◇ PART · DB

DB 기초

테이블 · 행 · 열 · PK · FK

학습 목표

  • DB 의 가장 기본 단위 — 테이블·행·열 을 안다
  • PKFK 의 의미를 안다
  • 관계형 DB 가 무엇인지 직관적으로 이해

⚠️ DB 가 처음엔 추상적이다

학생들의 첫 인상

"DB 는 뭔가 마법 같은 저장소? 데이터 어디에 들어 있는 거예요?"

사실 DB 는 우리가 매일 쓰는 도구와 똑같이 생겼습니다 — 엑셀.

🛠️ DB = 엑셀 시트

친숙한 비유 — 엑셀 파일

관계형 DB 의 모든 데이터는 「표(table)」 형태로 저장됩니다. 엑셀의 시트와 똑같이 — 행과 열 의 구조.

엑셀 파일 1 개 ↔ 데이터베이스 1 개 엑셀 시트 1 장 ↔ 테이블 1 개 엑셀 한 줄 ↔ 행(Row, Record) 엑셀 한 칸 ↔ 값(Cell) 엑셀 칼럼 ↔ 열(Column)

실제 테이블 모습

member 테이블 ┌────┬─────────┬───────────┬────────┬────────────────┐ │ id │ user_id │ password │ name │ created_at │ ← 열(컬럼) ├────┼─────────┼───────────┼────────┼────────────────┤ │ 1 │ hong │ pw12345 │ 홍길동 │ 2024-08-01... │ ← 행 1 │ 2 │ kim │ kimpw │ 김철수 │ 2024-08-15... │ ← 행 2 │ 3 │ lee │ leepw │ 이영희 │ 2024-09-01... │ ← 행 3 └────┴─────────┴───────────┴────────┴────────────────┘

👉 한 행 = 회원 한 명의 데이터.

① 테이블 (Table)

  • 데이터를 담는 표
  • 하나의 「의미 단위」 (회원·게시글·댓글 등)
  • 보통 영어 소문자 + 단수 또는 복수 (member 또는 members)
  • DB 1 개 안에 여러 테이블

② 행 (Row, Record)

  • 테이블의 한 줄 = 한 데이터
  • 위 예시에서 (1, 'hong', 'pw12345', '홍길동', ...) 한 줄 = 한 회원
  • 데이터 추가 = 행 추가 (INSERT)
  • 데이터 수정 = 행의 값 변경 (UPDATE)
  • 데이터 삭제 = 행 제거 (DELETE)

③ 열 (Column, Field)

  • 테이블의 세로 줄 — 데이터의 속성
  • 각 열은 이름자료형
  • id INT, user_id VARCHAR(50), name VARCHAR(50)
  • 행마다 같은 구조 — 모든 회원이 id, user_id, name 등을 가짐

자료형 (Data Type)

자료형용도자바 매핑
INT정수int / Integer
BIGINT큰 정수long / Long
VARCHAR(N)가변 문자열 (최대 N)String
TEXT긴 문자열String
BOOLEANtrue/falseboolean
DATE날짜LocalDate
TIMESTAMP날짜+시간LocalDateTime
DECIMAL(P,S)정확한 소수 (돈)BigDecimal

④ Primary Key (PK) — 주키

각 행을 「고유하게 식별」 하는 열.

  • 중복 불가 (UNIQUE)
  • NULL 불가
  • 테이블당 보통 1 개 (id 가 일반적)
  • 여러 열 조합 가능 (복합 키)

CREATE TABLE myboard (
    num INT PRIMARY KEY AUTO_INCREMENT,
    ...
);

AUTO_INCREMENT — 자동 증가


-- 새 행 추가 시 num 안 적어도 자동 증가
INSERT INTO myboard (title, writer, content)
VALUES ('첫 글', 'hong', '안녕');           -- num=1 자동 부여

INSERT INTO myboard (title, writer, content)
VALUES ('두 번째', 'hong', '내용');          -- num=2 자동

👉 PK 를 자동으로 부여 → 사용자가 글 번호를 직접 신경 쓸 필요 없음.

⑤ Foreign Key (FK) — 외래 키

다른 테이블의 PK 를 가리키는 열. 「관계」 를 표현.


-- 후속 차시에서 등장할 댓글 테이블 예시
CREATE TABLE myreply (
    num      INT          PRIMARY KEY AUTO_INCREMENT,
    content  VARCHAR(500) NOT NULL,
    boardnum INT          NOT NULL,
    FOREIGN KEY (boardnum) REFERENCES myboard(num)
);
myboard myreply ┌────┬─────┐ ┌────┬───────┬──────────┐ │ num│title│ ←─ │ num│content│ boardnum │ │ 1 │첫글 │ │ 1 │댓글1 │ 1 │ │ 2 │둘째 │ │ 2 │댓글2 │ 1 │ └────┴─────┘ └────┴───────┴───────────┘

관계 (Relation)

관계예시
1 : 1회원 ↔ 프로필
1 : N회원 ↔ 게시글 (한 명이 여러 글) ⭐
N : N게시글 ↔ 태그 (중간 테이블 사용)

👉 1:N 은 「N 쪽에 FK」 를 둠.

제약 조건 (Constraint)

제약의미
PRIMARY KEY주키 (고유 + NOT NULL)
NOT NULLNULL 금지
UNIQUE중복 금지
FOREIGN KEY외래 키 (다른 테이블 참조)
DEFAULT 값기본값

본 과정에서 만들 두 테이블 — 처음에는 최소형


-- 회원 (v2 최소형)
CREATE TABLE mymember (
    id   VARCHAR(50)  PRIMARY KEY,
    pwd  VARCHAR(20)  NOT NULL
);

-- 게시판 (v5 최소형)
CREATE TABLE myboard (
    num     INT          PRIMARY KEY AUTO_INCREMENT,
    title   VARCHAR(100) NOT NULL,
    writer  VARCHAR(50)  NOT NULL,    -- mymember.id 를 가리킴 (논리적 참조)
    content TEXT         NOT NULL
);

👉 작성 시각·조회수·첨부 같은 컬럼은 후속 차시에서 ALTER TABLE 로 추가됩니다.

🔄 Before / After

Part 4 시작

DB 가 막연한 「데이터 저장소」.

이번 차시 끝

DB = 엑셀 같은 표. 테이블·행·열·PK·FK 의 의미를 안다.

이번 차시의 데이터 흐름

DB
테이블
DB 의 4 단 구조 — 우리가 만질 가장 기본 단위

정리

오늘 들고 가는 것

  • DB = 엑셀 같은 표 (테이블·행·열)
  • PK = 행을 식별 / FK = 다른 테이블 참조
  • AUTO_INCREMENT 로 PK 자동 부여
  • 1:N 관계 = 「N 쪽에 FK」