STUDY

데이터베이스

Lim임 2026. 2. 9. 14:55

4.1 데이터베이스의 기본

데이터베이스(DB)

 

  • 일정한 규칙에 따라 구조화되어 저장된 데이터의 집합
  • 실시간 접근 가능
  • 여러 사용자가 동시에 데이터 공유 가능

DBMS (DataBase Management System)

  • 데이터베이스를 제어·관리하는 통합 시스템
  • 데이터 삽입, 삭제, 수정, 조회 기능 제공
  • DBMS마다 정의된 쿼리 언어 사용

데이터베이스 구조

  • 데이터베이스 위에 DBMS가 존재
  • 그 위에서 응용 프로그램이 데이터에 접근
  • 예: MySQL + Node.js / PHP 등

4.1.1 엔터티 (Entity)

엔터티

  • 사람, 장소, 물건, 사건, 개념 등 여러 속성을 가진 명사
  • 서비스 요구 사항에 따라 속성 구성

예시: 회원 엔터티

  • 이름
  • 아이디
  • 주소
  • 전화번호

요구 사항과 무관한 속성은 제거됨

약한 엔터티와 강한 엔터티

강한 엔터티

  • 독립적으로 존재 가능

약한 엔터티

  • 다른 엔터티에 종속되어 존재
  • 예: 건물(강한 엔터티) – 방(약한 엔터티)

4.1.2 릴레이션 (Relation)

릴레이션

  • 엔터티 데이터를 저장하는 데이터베이스의 기본 단위

용어 차이

  • 테이블: 관계형 DB(MySQL)
  • 컬렉션: NoSQL DB(MongoDB)

데이터베이스 구조

  • MySQL: 레코드 → 테이블 → 데이터베이스
  • MongoDB: 도큐먼트 → 컬렉션 → 데이터베이스


4.1.3 속성 (Attribute)

속성

  • 엔터티가 가지는 고유한 정보
  • 서비스 요구 사항에 따라 선택됨

예시: '차' 엔터티 Car

  • 차 번호 id
  • 바퀴 수 wheels
  • 차 색깔 color
  • 차종 type

4.1.4 도메인 (Domain)

도메인

  • 속성이 가질 수 있는 값의 집합

예시  ------------------------------>

  • 성별 속성의 도메인: {남, 여}

4.1.5 필드와 레코드

필드(Field)

  • 테이블의 열(column)
  • 속성이 실제로 저장되는 공간

레코드(Record)

  • 테이블의 행(row)
  • 하나의 데이터 단위
  • 튜플(tuple)이라고도 함

필드 타입

  • 필드는 각각 타입을 가짐
  • DBMS마다 지원하는 타입이 다름
  • 여기서는 MySQL 기준으로 설명

숫자 타입

  • 정수 값을 저장하는 데 사용

대표적인 타입

  • TINYINT
  • SMALLINT
  • MEDIUMINT
  • INT
  • BIGINT

차이점

  • 타입별로 저장 가능한 값의 범위가 다름
  • 용량(바이트) 차이 존재
  • 부호 있음 / 부호 없음 설정 가능

날짜 타입

  • 날짜 또는 시간 정보를 저장하는 데 사용

DATE

  • 날짜 정보만 저장
  • 시간 정보는 포함하지 않음
  • 지원 범위: 1000-01-01 ~ 9999-12-31
  • 용량: 3바이트

DATETIME

  • 날짜와 시간 정보를 모두 저장
  • 지원 범위:
    • 1000-01-01 00:00:00
    • 9999-12-31 23:59:59
  • 용량: 8바이트

TIMESTAMP

  • 날짜와 시간 정보를 모두 저장
  • 지원 범위:
    • 1970-01-01 00:00:01
    • 2038-01-19 03:14:07
  • 용량: 4바이트

문자 타입

  • 문자열 데이터를 저장하는 데 사용

CHAR와 VARCHAR

공통

  • 괄호 안 숫자로 최대 길이 지정
  • 예: CHAR(30) → 최대 30글자 저장

CHAR

  • 고정 길이 문자열
  • 길이 범위: 0 ~ 255
  • 선언한 길이만큼 항상 고정 저장
  • 예: CHAR(100)에 10글자 저장 → 100바이트 사용
  • 길이가 일정한 데이터에 적합

VARCHAR

  • 가변 길이 문자열
  • 길이 범위: 0 ~ 65,535
  • 실제 입력된 데이터 크기만큼 저장
  • 예:
    • 10글자 저장 시
    • 문자열 바이트 + 길이 기록용 1바이트 사용
  • 선언 길이가 커도 실제 저장 용량은 입력값 기준
  • 길이가 유동적인 데이터에 적합

정리

  • 고정 길이 데이터 → CHAR
  • 가변 길이 데이터 → VARCHAR

TEXT와 BLOB

공통

  • 큰 데이터를 저장할 때 사용하는 타입

TEXT

  • 큰 문자열 저장
  • 주로 게시판 본문 등에 사용

BLOB

  • 이미지, 동영상 등 바이너리 데이터 저장
  • 실제 서비스에서는
    • 파일은 서버(S3 등)에 저장
    • 파일 경로만 VARCHAR로 DB에 저장하는 경우가 많음

ENUM과 SET

공통

  • 문자열을 열거한 타입

ENUM

  • 미리 정의한 값 중 하나만 선택 가능
  • 예: ENUM('x-small', 'small', 'medium', 'large', 'x-large')
  • 리스트에 없는 값 입력 시 빈 문자열 저장
  • 내부적으로 숫자(0, 1, 2 …)로 매핑
  • 메모리 사용량이 적음
  • 최대 65,535개 요소 지정 가능

SET

  • ENUM과 유사하지만 여러 값 선택 가능
  • 비트 단위 연산 가능
  • 최대 64개 요소 지정 가능

ENUM / SET 단점

  • 애플리케이션 수정 시
  • DB에 정의된 ENUM, SET 목록도 함께 수정해야 함

 

4.1.6 관계 (Relationship)

관계

  • 테이블 간의 연관성

1:1 관계

  • 하나의 엔터티가 하나의 엔터티와만 관계
  • 구조를 단순화하기 위해 테이블 분리 목적

1:N 관계

  • 하나의 엔터티가 여러 엔터티와 관계
  • 예: 사용자 – 장바구니

N:M 관계

  • 양쪽 엔터티 모두 여러 개와 관계
  • 직접 연결하지 않음
  • 중간 테이블을 생성하여
  • 1:N, N:1 관계로 분리

4.1.7 키 (Key)

 

  • 테이블의 레코드를 식별하기 위한 속성
  • 테이블 간 관계 설정 및 인덱스 역할

기본키 (Primary Key)

  • 유일성 + 최소성 만족
  • 중복 불가
  • 보통 인조키 사용

자연키

  • 실제 데이터 중 자연스럽게 선택된 키
  • 변경될 가능성 있음

인조키

  • 인위적으로 생성한 키
  • auto increment, sequence 등
  • 값이 변하지 않음
  • 기본키로 가장 많이 사용

외래키 (Foreign Key)

  • 다른 테이블의 기본키를 참조
  • 중복 가능
  • 테이블 간 관계 표현

후보키

  • 기본키가 될 수 있는 키
  • 유일성 + 최소성 만족

대체키

  • 후보키 중 기본키로 선택되지 않은 키

슈퍼키

  • 유일성을 만족하는 모든 키