먼저 회원과 회원 프로필을 일대일로 나누어 설계한다.
CREATE TABLE member (
member_id BIGINT PRIMARY KEY,
name VARCHAR(50) NOT NULL
);
CREATE TABLE member_profile (
member_id BIGINT PRIMARY KEY,
intro TEXT,
mbti VARCHAR(4),
CONSTRAINT fk_member_profile_member
FOREIGN KEY (member_id) REFERENCES member(member_id)
);
이 구조에서는:
member_profile에 1행 존재member_profile에 아예 행이 없음즉, 자연스럽게 member 1 : 0..1 member_profile 관계를 표현한다.
시간이 지나면서 다음과 같은 요구 사항이 생긴다고 가정한다.
"일부 회원은 프리미엄 요금을 내고 있고, 프리미엄 전용 정보를 추가로 저장하고 싶다."
프리미엄 정보 예시:
이때 기존 member 테이블을 수정하지 않고, 새로운 1:1 테이블을 하나 더 붙이는 방식으로 확장할 수 있다.
CREATE TABLE member_premium (
member_id BIGINT PRIMARY KEY,
started_at DATETIME NOT NULL,
expired_at DATETIME,
manager_name VARCHAR(50),
CONSTRAINT fk_member_premium_member
FOREIGN KEY (member_id) REFERENCES member(member_id)
);
이제 한 회원은 다음과 같은 관계를 가진다.
member 1행 (필수)member_profile 0 또는 1행 (선택)