2-1. 참여도의 의미

참여도는 한 엔티티가 어떤 관계에 대해 필수적으로 참여하는지, 선택적으로 참여하는지를 나타낸다.

논리적 모델링에서는 이 참여도를 외래 키 컬럼의 NULL 허용 여부로 구현한다.

다만, 이는 어디까지나 외래 키가 있는 쪽(N쪽) 의 참여도만 제어할 수 있다는 점이 중요하다.

2-2. N쪽(회원)에서의 참여도 구현 – NULL / NOT NULL

(1) 회원은 팀에 소속될 수도 있고, 안 될 수도 있다 (선택 참여)

비즈니스 규칙을 다음처럼 정의한다고 가정한다.

이 경우 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이므로, 팀에 소속되지 않은 회원을 자연스럽게 표현한다.