여러가지 데이터베이스 연관관계에 대해 공부하던 중, 일대일 연관관계 부분에서 의문이 생겼다.
1 : 1 연관관계에서는 상대방의 PK 하나 당 하나의 데이터만 매칭되는데 그냥 그 FK 를 PK 로 사용할 수 없을까?
검색을 좀 해보니 이미 존재하는 방식이고 공유 기본 키(Shared Primary Key) 라고 불린다.
이에 대한 정보를 정리해보자.
정의
공유 기본 키란 두 개 이상의 테이블에서 동일한 기본 키를 공유하는 관계를 의미한다. 이 방식은 주로 1:1 연관관계에서 사용되며, 자식 테이블이 부모 테이블의 기본 키를 그대로 사용하여 PK와 FK로 동시에 동작하도록 설계된다.
User 테이블 (부모)CREATE TABLE user (
id BIGINT PRIMARY KEY,
name VARCHAR(50)
);Address 테이블 (자식)CREATE TABLE address (
user_id BIGINT PRIMARY KEY, -- PK와 FK를 공유
address VARCHAR(255),
FOREIGN KEY (user_id) REFERENCES user(id)
);Profile)이 항상 특정 유저(User)에 속하는 경우. Address 테이블 CREATE TABLE address (
id BIGINT PRIMARY KEY, -- 독립적인 PK
user_id BIGINT, -- 외래 키
address VARCHAR(255),
FOREIGN KEY (user_id) REFERENCES user(id)
);Address)이 독립적으로 관리 가능. 공유 기본 키는 데이터 일관성을 엄격히 유지해야 하는 강한 부모-자식 관계에서 적합하다. 그러나 확장성과 유연성을 위해서는 일반 외래 키 설계가 더 유리한 경우도 많다.