CS

[데이터베이스] 1. 데이터베이스의 기본

말하는 알감자 2026. 5. 12. 16:41

데이터베이스란?

데이터베이스(DB, DataBase) 는 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음이다.
해당 데이터베이스를 제어, 관리하는 통합 시스템을 DBMS(DataBase Management System) 라고 한다.

데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어(query language)를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있다. 또한, 데이터베이스는 실시간 접근과 동시 공유가 가능하다.

응용 프로그램
    ↕
  DBMS
    ↕
데이터베이스

데이터베이스 위에 DBMS가 있고 그 위에 응용 프로그램이 있으며, 이러한 구조를 기반으로 데이터를 주고받는다.

예를 들어 MySQL이라는 DBMS가 있고 그 위에 응용 프로그램에 속하는 Node.js나 PHP에서 해당 데이터베이스 안에 있는 데이터를 끄집어내 관련 로직을 구축할 수 있다.


1.1. 엔터티 (Entity)

엔터티는 사람, 장소, 물건, 사건, 개념 등 여러 개의 속성을 지닌 명사를 의미한다.

예를 들어 '회원'이라는 엔터티가 있다고 해보자. 회원은 다음과 같은 속성을 갖는다.

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

물론 이보다 많은 속성이 있지만 서비스의 요구 사항에 맞춰 속성이 정해진다. 주소라는 속성이 서비스의 요구 사항과 무관하다면 주소라는 속성은 사라지게 된다.

약한 엔터티와 강한 엔터티

  • 약한 엔터티: 혼자서는 존재하지 못하고 다른 엔터티에 종속적인 엔터티
  • 강한 엔터티: 단독으로 존재할 수 있는 엔터티

예: '방'은 '건물' 안에만 존재하므로 방은 약한 엔터티, 건물은 강한 엔터티.


1.2. 릴레이션 (Relation)

릴레이션은 데이터베이스에서 정보를 구분하여 저장하는 기본 단위다. 엔터티에 관한 데이터를 데이터베이스는 릴레이션 하나에 담아서 관리한다.

부르는 이름 데이터베이스 종류

테이블(Table) 관계형 데이터베이스 (MySQL 등)
컬렉션(Collection) NoSQL 데이터베이스 (MongoDB 등)

테이블과 컬렉션의 구조

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

레코드(또는 도큐먼트)가 쌓여서 테이블(또는 컬렉션)이 되고, 그것들이 쌓여 데이터베이스가 된다.


1.3. 속성 (Attribute)

속성은 릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보다.

예를 들어 '차'라는 엔터티의 속성을 뽑아보자.

  • 차 넘버
  • 바퀴 수
  • 차 색깔
  • 차종

이 중에서 서비스의 요구 사항을 기반으로 관리해야 할 필요가 있는 속성들만 엔터티의 속성이 된다.


1.4. 도메인 (Domain)

도메인이란 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합을 말한다.

예를 들어 '성별'이라는 속성이 있다면 이 속성이 가질 수 있는 값은 {남, 여}라는 집합이 된다.


1.5. 필드와 레코드

위 개념들을 기반으로 데이터베이스에서 필드와 레코드로 구성된 테이블을 만들 수 있다.

member 테이블 예시

name  ID  address phonenumber
큰돌 kundol 서울 112
가영 kay 대전 114
빅뱅 big 카이루 119
  • 필드(field): 컬럼(name, ID, address, phonenumber)
  • 레코드(record) = 튜플(tuple): 행 단위의 데이터

필드 타입

필드는 타입을 갖는다. 이름은 문자열이고 전화번호는 숫자다. 이러한 타입들은 DBMS마다 다르다. (이하 MySQL 기준)

숫자 타입

타입 용량(바이트) 최솟값(부호 있음)  최댓값(부호 있음)
TINYINT 1 -128 127
SMALLINT 2 -32,768 32,767
MEDIUMINT 3 -8,388,608 8,388,607
INT 4 -2,147,483,648 2,147,483,647
BIGINT 8 -2⁶³ 2⁶³-1

날짜 타입

  • 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: 고정 길이 문자열, 0~255 사이. 선언한 길이로 '고정' 저장. CHAR(100)으로 선언 후 10글자를 저장해도 100바이트로 저장.
  • VARCHAR: 가변 길이 문자열, 0~65,535 사이. 입력된 데이터에 따라 용량 가변. 10글자 이메일 저장 시 → 10바이트 + 길이기록용 1바이트.
  • TEXT: 큰 문자열 저장 (게시판 본문 등).
  • BLOB: 이미지, 동영상 등 큰 데이터 저장. 보통은 S3 같은 외부에 파일을 올리고 그 경로를 VARCHAR로 저장.
  • ENUM: ENUM('x-small', 'small', 'medium', 'large', 'x-large') 형태. 단일 선택. 최대 65,535개 요소. 메모리 절약 가능.
  • SET: ENUM과 비슷하지만 여러 개 선택 가능, 비트 단위 연산. 최대 64개 요소.

💡 CHAR vs VARCHAR: 유동적이지 않은 길이의 데이터는 CHAR, 유동적인 길이는 VARCHAR가 효율적.


1.6. 관계 (Relationship)

데이터베이스에 테이블은 하나만 있는 것이 아니다. 여러 개의 테이블이 있고, 이러한 테이블은 서로 관계가 정의되어 있다. 이 관계를 관계화살표로 나타낸다.

관계 의미

1:1 하나의 A는 하나의 B로 구성되어 있다
1:N 하나의 A는 하나 이상의 B로 구성되어 있다
1:0~1 하나의 A는 하나 이하의 B로 구성되어 있다
1:0~N 하나의 A는 0 또는 하나 이상의 B로 구성되어 있다

1:1 관계

유저당 유저 이메일은 한 개씩 있는 경우. 테이블을 두 개의 테이블로 나눠 구조를 더 이해하기 쉽게 만들어준다.

1:N 관계

쇼핑몰에서 한 유저당 여러 개의 상품을 장바구니에 넣는 경우. 한 개체가 다른 많은 개체를 포함하는 관계.

N:M 관계

학생과 강의의 관계처럼 양쪽 모두 다수가 다수에 속하는 경우. N:M은 테이블 두 개를 직접 연결해서 구축하지 않고 1:N, 1:M 관계를 갖는 테이블 두 개로 나눠서 설정한다. (학생, 강의 사이에 학생_강의 테이블이 끼게 된다.)


1.7. 키 (Key)

테이블 간의 관계를 명확하게 하고 테이블 자체의 인덱스를 위해 설정된 장치. 다음 다섯 가지가 있다.

           ┌─ 슈퍼키 (유일성) ─┐
           │                │
           │  ┌─ 후보키 ─┐    │
           │  │ (최소성) │    │
           │  │ ┌────┐ │     │
           │  │ │기본키│ │     │ ← 대체키
           │  │ └────┘  │    │
           │  └─────────┘    │
           └─────────────────┘
  • 유일성: 중복되는 값이 없음
  • 최소성: 필드를 조합하지 않고 최소 필드만 써서 키를 형성

1) 기본키 (Primary Key, PK)

유일성과 최소성을 만족하는 키. 자연키 또는 인조키 중에 골라 설정한다.

- 자연키 (Natural Key)

자연스럽게 뽑아내는 키. 예: 주민등록번호. 언젠가는 변하는 속성을 가진다.

- 인조키 (Surrogate Key)

인위적으로 부여한 고유 식별자. 오라클은 sequence, MySQL은 auto_increment 등으로 설정. 변하지 않음.
따라서 보통 기본키는 인조키로 설정한다.

2) 외래키 (Foreign Key, FK)

다른 테이블의 기본키를 그대로 참조하는 값으로, 개체와의 관계를 식별. 중복되어도 괜찮다.

3) 후보키 (Candidate Key)

기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족하는 키

4) 대체키 (Alternate Key)

후보키가 두 개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키들

5) 슈퍼키 (Super Key)

각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키

'CS' 카테고리의 다른 글

[운영체제] 2. 메모리  (0) 2026.05.03
[운영체제] 1. 운영체제와 컴퓨터  (0) 2026.05.02
[자료구조] 재귀 함수( Recursive Function)  (0) 2024.01.12
[자료구조] Stack & Queue  (0) 2024.01.12