primary key는 테이블의 각 행을 유일하게 식별합니다. foreign key는 다른 테이블의 primary key를 참조하여, 테이블 간 관계를 수립하고 **참조 무결성(referential integrity)**을 강제합니다(존재하지 않는 행을 참조할 수 없음).
primary key — 유일한 행 식별자
users (
id ,
name (),
email ()
);
primary key는 테이블의 각 행을 유일하게 식별합니다. foreign key는 다른 테이블의 primary key를 참조하여, 테이블 간 관계를 수립하고 **참조 무결성(referential integrity)**을 강제합니다(존재하지 않는 행을 참조할 수 없음).
users (
id ,
name (),
email ()
);
primary key는 unique하고 not null입니다 — 각 행을 식별합니다. 자동으로 index가 걸리며(빠른 조회), foreign key가 참조하는 대상입니다.
CREATE TABLE orders (
id INT PRIMARY KEY,
user_id INT,
total DECIMAL(10,2),
FOREIGN KEY (user_id) REFERENCES users(id) -- user_id는 users.id와 매칭되어야 함
);
foreign key(user_id)는 다른 테이블의 primary key(users.id)를 참조하여 "order는 user에 속한다"는 관계를 만듭니다. 데이터베이스가 이를 강제합니다: users에 존재하지 않는 user_id로 order를 삽입할 수 없습니다.
INSERT INTO orders (user_id, total) VALUES (999, 50); -- ❌ user 999가 없으면 오류
-- foreign key가 고아 레코드를 방지함 (존재하지 않는 user를 참조하는 order)
참조 무결성은 데이터베이스가 관계의 유효성을 보장한다는 의미입니다 — 존재하지 않는 user를 참조하는 order를 가질 수 없습니다. 이는 고아/유효하지 않은 참조로 인한 데이터 손상을 방지합니다.
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE -- user 삭제 → 그들의 order도 삭제
-- ON DELETE SET NULL -- user_id를 NULL로 설정
-- ON DELETE RESTRICT -- order가 있는 user의 삭제 방지 (사실상 기본값)
ON DELETE/ON UPDATE는 참조되는 행이 삭제되거나 변경될 때 종속 행에 어떤 일이 일어날지 정의합니다 — CASCADE(전파), SET NULL, RESTRICT(방지). 올바른 선택은 우발적 데이터 손실이나 고아 행을 피하는 데 중요합니다.
primary key와 foreign key는 관계형 데이터베이스 설계에 근본적입니다. 관계형 모델이 테이블 간 정체성과 관계를 수립하는 방법이므로, 어떤 관계형 데이터베이스든 설계하고 다루는 데 필수적입니다. primary key(각 행을 유일하게 식별, 자동 index)는 테이블 정체성의 기초이자 관계가 참조하는 대상입니다. foreign key는 애플리케이션 데이터의 관계형 구조를 정의하는 테이블 간 관계(order는 user에 속함 등)를 수립합니다.
결정적으로, foreign key는 참조 무결성을 강제합니다 — 데이터베이스가 관계의 유효성을 보장하여(존재하지 않는 행을 참조할 수 없음) 고아 또는 유효하지 않은 참조로 인한 데이터 손상을 방지합니다. 데이터 일관성을 자동으로 유지하는 주요 신뢰성 이점입니다.
ON DELETE/ON UPDATE 동작(CASCADE, SET NULL, RESTRICT)을 이해하는 것은 중요합니다. 참조되는 행이 변경되거나 삭제될 때 연관 데이터에 무슨 일이 일어날지 결정하기 때문입니다 — 올바른 선택은 우발적 데이터 손실(예: CASCADE가 의도보다 많이 삭제)이나 고아 레코드를 방지하는 중대한 설계 결정입니다.
테이블 간 관계는 관계형 데이터베이스의 본질이고, primary/foreign key(와 참조 무결성)가 그 관계를 정의하고 보호하는 방법이므로, 이를 이해하는 것 — 정체성과 관계를 위한 키, 데이터 일관성을 위한 참조 무결성, 연관 데이터 관리를 위한 on-delete 동작 — 은 데이터베이스 설계에 핵심적이고 기초적인 지식이자 관계형 데이터를 올바르게 다루는 데 필수적인 흔한 인터뷰 주제입니다.