참여도는 한 엔티티가 어떤 관계에 대해 필수적으로 참여하는지, 선택적으로 참여하는지를 나타낸다.
논리적 모델링에서는 이 참여도를 외래 키 컬럼의 NULL 허용 여부로 구현한다.
NULL 허용NOT NULL다만, 이는 어디까지나 외래 키가 있는 쪽(N쪽) 의 참여도만 제어할 수 있다는 점이 중요하다.
비즈니스 규칙을 다음처럼 정의한다고 가정한다.
이 경우 member.team_id 를 NULL 허용으로 설계한다.
DROP TABLE IF EXISTS member;
DROP TABLE IF EXISTS team;
CREATE TABLE team (
team_id BIGINT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
PRIMARY KEY (team_id)
);
CREATE TABLE member (
member_id BIGINT NOT NULL AUTO_INCREMENT,
team_id BIGINT NULL, -- 선택적 참여
name VARCHAR(50) NOT NULL,
PRIMARY KEY (member_id),
CONSTRAINT fk_member_team FOREIGN KEY (team_id)
REFERENCES team (team_id)
);
이렇게 설계하면 팀이 배정되지 않은 회원도 추가할 수 있다.
INSERT INTO member(name, team_id) VALUES ('이기획', NULL);
SELECT * FROM member;
예상 결과:
| member_id | team_id | name |
|---|---|---|
| 1 | NULL | 이기획 |
team_id 가 NULL이므로, 팀에 소속되지 않은 회원을 자연스럽게 표현한다.