1:1 관계에서는 외래 키를 어디에 두는지, 그리고 그 외래 키를 PK로 쓸지 여부에 따라 식별/비식별 관계가 갈린다. 예제로 회원과 회원 상세 프로필을 생각해 본다.
member와 member_profile이 1:1 관계라고 가정한다.
CREATE TABLE member (
member_id BIGINT NOT NULL AUTO_INCREMENT,
email VARCHAR(100) NOT NULL,
name VARCHAR(50) NOT NULL,
PRIMARY KEY (member_id),
UNIQUE (email)
);
CREATE TABLE member_profile_non_identifying (
profile_id BIGINT NOT NULL AUTO_INCREMENT, -- 독립적인 PK
member_id BIGINT NOT NULL, -- FK
nickname VARCHAR(50),
bio TEXT,
PRIMARY KEY (profile_id),
UNIQUE (member_id), -- 1:1 보장
CONSTRAINT fk_profile_member_non
FOREIGN KEY (member_id)
REFERENCES member (member_id)
);
member_profile는 profile_id라는 자기만의 PK를 가진다.member_id에 UNIQUE 제약을 건다.장점:
member_id FK만 잘 유지하면 된다.이번에는 프로필 테이블의 PK를 곧 member_id로 사용하는 방식이다.
CREATE TABLE member_profile_identifying (
member_id BIGINT NOT NULL, -- PK + FK
nickname VARCHAR(50),
bio TEXT,
PRIMARY KEY (member_id),
CONSTRAINT fk_profile_member_iden
FOREIGN KEY (member_id)
REFERENCES member (member_id)
);
member_id 하나뿐이다.장점:
단점: