본문으로 건너뛰기
데이터베이스 기초집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 제약 조건 미완료 상태