본문으로 건너뛰기
데이터베이스 기초집LESSON 06

Primary Key, Foreign Key, Unique, Check 제약 조건

난이도초급 → 중급
예상 시간35분
선수지식이전 강의

6강. Primary Key, Foreign Key, Unique, Check 제약 조건

1. 이번 강의에서 해결할 문제​

정상 요청만 가정한 테이블은 중복 참가, 존재하지 않는 캐릭터, 음수 점수를 저장할 수 있습니다. 핵심 규칙을 이름 있는 제약 조건으로 표현해 어느 쓰기 경로에서도 위반을 거부합니다.

2. 학습 목표​

3. 핵심 개념​

기본 키는 행의 정체성, 외래 키는 관계의 존재, UNIQUE는 후보 키와 복합 중복, CHECK는 한 행의 값 범위를 지킵니다. PostgreSQL은 PK와 UNIQUE에 인덱스를 자동 생성하지만 외래 키를 가진 쪽의 인덱스는 자동 생성하지 않습니다. 삭제 동작은 관계의 수명에 따라 명시적으로 선택합니다.

4. 단계별 예시​

파일 경로: C:\dev\game-ranking-service\database\sql\06-schema.sql

database/sql/06-schema.sql
CREATE TABLE ranking.characters (
character_id bigint GENERATED ALWAYS AS IDENTITY,
code varchar(30) NOT NULL,
display_name varchar(60) NOT NULL,
CONSTRAINT pk_characters PRIMARY KEY (character_id),
CONSTRAINT uq_characters_code UNIQUE (code)
);

CREATE TABLE ranking.games (
game_id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
mode varchar(20) NOT NULL,
status varchar(12) NOT NULL,
started_at timestamptz NOT NULL,
ended_at timestamptz,
CONSTRAINT ck_games_status CHECK (status IN ('waiting', 'playing', 'finished', 'cancelled')),
CONSTRAINT ck_games_time CHECK (ended_at IS NULL OR ended_at >= started_at)
);

CREATE TABLE ranking.match_results (
result_id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
game_id bigint NOT NULL REFERENCES ranking.games(game_id) ON DELETE CASCADE,
player_id bigint NOT NULL REFERENCES ranking.players(player_id) ON DELETE RESTRICT,
character_id bigint NOT NULL REFERENCES ranking.characters(character_id) ON DELETE RESTRICT,
score integer NOT NULL,
outcome varchar(8) NOT NULL,
CONSTRAINT uq_results_game_player UNIQUE (game_id, player_id),
CONSTRAINT ck_results_score CHECK (score >= 0),
CONSTRAINT ck_results_outcome CHECK (outcome IN ('win', 'loss', 'draw'))
);
PowerShell · 트랜잭션으로 적용
psql -d game_ranking_dev -v ON_ERROR_STOP=1 --single-transaction -f .\database\sql\06-schema.sql

5. 동작 원리​

이름 있는 제약은 위반 오류에서 규칙을 빠르게 찾게 합니다. 게임 삭제 시 그 구성 요소인 결과는 함께 삭제할 수 있지만, 플레이어 삭제가 기록을 연쇄 삭제하면 감사 이력을 잃으므로 RESTRICT를 선택했습니다. --single-transaction은 파일 중간 오류 시 앞선 DDL까지 함께 롤백합니다.

6. 자주 하는 실수와 해결법​

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

Primary Key, Foreign Key, Unique, Check 제약 조건 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“Primary Key, Foreign Key, Unique, Check 제약 조건”에서 다음 단계로 넘어가기 전에 확인할 핵심은 무엇인가요?
  2. 문제 2‘운영 테이블을 DROP 후 재생성’ 실수를 판단할 때 “Primary Key, Foreign Key, Unique, Check 제약 조건” 강의가 제시한 기준은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

6강. Primary Key, Foreign Key, Unique, Check 제약 조건 미완료 상태