[CS] 데이터베이스의 기본

눈치없어·2025년 5월 20일

데이터베이스(DB, DataBase): 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음

DBMS(DataBase Management System): 데이터베이스를 제어, 관리하는 통합 시스템



엔터티(entity)

  • 현실 세계의 객체(사람, 장소, 사물, 개념, 사건 등)를 데이터베이스로 표현한 것
  • 보통 명사 형태로 표현됨
  • 여러 개의 속성(Attributes)을 가짐

엔티티 vs 엔터티
엔티티는 관용적으로 자주 쓰이지만 틀린 표기로 가 맞는 표현


약한 엔터티 / 강한 엔터티

약한 엔터티 (Weak Entity)

  • 고유 식별자가 없거나, 다른 엔터티의 존재에 의존

강한 엔터티 (Strong Entity)

  • 자체적으로 고유 식별자(Primary Key)를 가짐

강한 엔터티: 건물
약한 엔터티: 방 (건물이 있어야 방도 존재할 수 있음)



릴레이션(relation)

  • 데이터베이스에서 정보를 구분해 저장하는 기본 단위
  • 하나의 엔터티를 DB에 저장할 때 릴레이션(=테이블)로 표현됨
  • 관계형 DB에서는 테이블, NoSQL에서는 컬렉션이라고 함

테이블과 컬렉션

항목관계형 DB (예: MySQL)NoSQL DB (예: MongoDB)
단일 데이터레코드 (Row)도큐먼트 (Document)
데이터 묶음테이블 (Table)컬렉션 (Collection)
전체 저장소데이터베이스데이터베이스


속성

  • 릴레이션(테이블)에서 각 열(column)을 구성하는 구체적인 정보 항목
  • 각 속성은 고유한 이름을 가지며, 한 가지 정보만 저장함
  • 속성은 서비스의 요구 사항에 따라 선택되며, 모든 정보를 속성으로 포함하진 않음


도메인

  • 속성이 가질 수 있는 값의 범위(집합)
  • 속성(attribute)은 하나의 도메인에 속해야 함
  • 도메인은 데이터 무결성을 보장하기 위한 기본 요소


필드와 레코드

📌 필드(Field)

  • 릴레이션(테이블)의 열(column)을 의미
  • 속성(attribute)과 같음
  • 각 필드는 고유한 데이터 타입을 갖는다 (예: VARCHAR, INT)

📌 레코드(Record) = 튜플(Tuple)

  • 릴레이션의 행(row)을 의미
  • 하나의 레코드는 하나의 실체(Entity)에 대한 정보를 담고 있음
  • 앞에서 설명한 것들을 기반으로 데이터베이스에서 필드와 레코드로 구성된 테이블을 만들 수 있습니다.
idtitleauthor_idgenre
1"운영체제란?"7"기술"

필드의 데이터 타입 (MySQL 기준)

📌 숫자 타입

타입크기(바이트)범위(부호 있음)
TINYINT1-128 ~ 127
SMALLINT2-32,768 ~ 32,767
MEDIUMINT3-8,388,608 ~ 8,388,607
INT4-2^31 ~ 2^31 - 1
BIGINT8-2^63 ~ 2^63 - 1

📌 날짜/시간 타입

타입설명
DATE날짜만 포함 (예: 2024-05-19)
DATETIME날짜 + 시간 (예: 2024-05-19 12:00:00)
TIMESTAMPUNIX 타임스탬프 (2038년까지만 가능)

📌 문자 타입

타입특징
CHAR(n)고정 길이 문자열. 항상 n바이트 저장
VARCHAR(n)가변 길이 문자열. 실제 길이 + 1~2바이트 저장
TEXT긴 문자열 저장 (게시판 본문 등)
BLOB이진 데이터 저장 (이미지, 영상 등)

📌 ENUM / SET

타입설명
ENUM단일 선택. 정해진 문자열 중 하나만 가능
SET다중 선택. 여러 문자열 선택 가능. 내부적으로 비트 연산 사용

테이블 생성 예시

CREATE TABLE book (
    id INT NOT NULL AUTO_INCREMENT,
    title VARCHAR(255),
    author_id INT,
    publishing_year VARCHAR(255),
    genre VARCHAR(255),
    created_at DATETIME,
    updated_at DATETIME,
    PRIMARY KEY (id)
);


관계

관계형 데이터베이스에서는 두 개 이상의 테이블이 서로 연결되어 있어야 실용적인 데이터 처리가 가능함. 이때 각 테이블 간의 관계는 다음 세 가지로 나뉨

📌 1:1 관계

  • 한 테이블의 한 레코드가 다른 테이블의 한 레코드와만 연결되는 구조
  • 예시:
    - User ↔ UserProfile
    - 한 명의 유저는 하나의 프로필을 가짐
  • 보통 테이블을 논리적으로 나누고 싶을 때 사용
-- user table
id | name
---|------
1  | 사용자이름1

-- user_profile table
user_id | bio
--------|----------------
1       | 회원

📌 1:N 관계

  • 한 테이블의 하나의 레코드가 다른 테이블의 여러 레코드와 연결
  • 예시:
    - User ↔ CartItem
    - 한 명의 유저가 여러 개의 장바구니 아이템을 가질 수 있음
  • 외래 키(foreign key)는 N쪽(많은 쪽)에 존재
-- user table
id | name
---|------
1  | 사용자이름1

-- cart_item table
id | user_id | product_name
---|---------|--------------
1  |    1    | 무선마우스
2  |    1    | 키보드

📌 N:M 관계

  • 여러 개의 A가 여러 개의 B와 연결되는 구조
  • 예시:
    - Student ↔ Lecture
    - 한 명의 학생은 여러 강의를 수강, 하나의 강의는 여러 학생을 가짐
  • 중간 테이블(조인 테이블) 필요 → 보통 1:N, N:1로 분해
-- student table
id | name
---|------
1  | 사용자이름1

-- lecture table
id | title
---|---------
101 | 운영체제

-- student_lecture table (조인 테이블)
student_id | lecture_id
-----------|------------
1          | 101


  • 테이블 간의 관계를 제대로 맺기 위해서는 각 테이블에 고유 식별자(=키) 가 필요함
  • 이 키들을 통해 테이블을 연결하거나, 유일하게 식별하거나, 중복을 방지할 수 있음

키의 종류와 개념

📌 슈퍼키 (Super Key)

  • 테이블의 레코드를 유일하게 식별할 수 있는 키의 집합
  • 유일성만 만족
  • 예: {주민등록번호}, {이름, 전화번호}, {이메일}, {이름, 이메일}

📌 후보키 (Candidate Key)

  • 슈퍼키 중에서 최소성을 만족하는 키
  • 즉, 더 이상 뺄 수 없는 필드 조합
  • 예: {주민등록번호}, {이메일} ← 둘 다 중복 안 되고 최소 필드만 사용

📌 기본키 (Primary Key, PK)

  • 후보키 중에서 대표로 선택된 키
  • NOT NULL + UNIQUE 조건이 적용됨
  • 예: 회원 테이블의 user_id (AUTO_INCREMENT 인조키 등)

📌 대체키 (Alternate Key)

  • 후보키 중에서 기본키로 선택되지 않은 나머지 후보키
  • 예: 기본키로 주민등록번호를 쓰면, 이메일은 대체키

📌 외래키 (Foreign Key, FK)

  • 다른 테이블의 기본키를 참조하는 키
  • 테이블 간 관계 형성에 사용됨



참고: 북스터디 - 면접을 위한 CS 전공지식 노트 (Chapter 4-1)

profile
dock 사이즈 다르잖아

0개의 댓글