테이블 · 행 · 열 · PK · FK
"DB 는 뭔가 마법 같은 저장소? 데이터 어디에 들어 있는 거예요?"
사실 DB 는 우리가 매일 쓰는 도구와 똑같이 생겼습니다 — 엑셀.
관계형 DB 의 모든 데이터는 「표(table)」 형태로 저장됩니다. 엑셀의 시트와 똑같이 — 행과 열 의 구조.
👉 한 행 = 회원 한 명의 데이터.
member 또는 members)(1, 'hong', 'pw12345', '홍길동', ...) 한 줄 = 한 회원id INT, user_id VARCHAR(50), name VARCHAR(50)| 자료형 | 용도 | 자바 매핑 |
|---|---|---|
INT | 정수 | int / Integer |
BIGINT | 큰 정수 | long / Long |
VARCHAR(N) | 가변 문자열 (최대 N) | String |
TEXT | 긴 문자열 | String |
BOOLEAN | true/false | boolean |
DATE | 날짜 | LocalDate |
TIMESTAMP | 날짜+시간 | LocalDateTime |
DECIMAL(P,S) | 정확한 소수 (돈) | BigDecimal |
각 행을 「고유하게 식별」 하는 열.
CREATE TABLE myboard (
num INT PRIMARY KEY AUTO_INCREMENT,
...
);
-- 새 행 추가 시 num 안 적어도 자동 증가
INSERT INTO myboard (title, writer, content)
VALUES ('첫 글', 'hong', '안녕'); -- num=1 자동 부여
INSERT INTO myboard (title, writer, content)
VALUES ('두 번째', 'hong', '내용'); -- num=2 자동
👉 PK 를 자동으로 부여 → 사용자가 글 번호를 직접 신경 쓸 필요 없음.
다른 테이블의 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)
);
| 관계 | 예시 |
|---|---|
| 1 : 1 | 회원 ↔ 프로필 |
| 1 : N | 회원 ↔ 게시글 (한 명이 여러 글) ⭐ |
| N : N | 게시글 ↔ 태그 (중간 테이블 사용) |
👉 1:N 은 「N 쪽에 FK」 를 둠.
| 제약 | 의미 |
|---|---|
| PRIMARY KEY | 주키 (고유 + NOT NULL) |
| NOT NULL | NULL 금지 |
| 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 로 추가됩니다.
DB 가 막연한 「데이터 저장소」.
DB = 엑셀 같은 표. 테이블·행·열·PK·FK 의 의미를 안다.