💡 핵심 인사이트
카디널리티(1:N)가 "몇 명과 손을 잡을 수 있는가(Max)"를 정한다면, 참여 제약조건은 "아무랑도 손을 안 잡고 혼자 아싸처럼 있어도 되는가, 아니면 반드시 누군가와 최소 1번은 의무적으로 손을 잡아야만 하는가(Min)?"를 결정하는 강력한 업무 규칙입니다.
테이블 설계 시 **외래 키의 NULL 허용 여부(NOT NULL)**를 결정짓는 기준이 됩니다.
Ⅰ. 참여 제약조건의 2가지 유형
개체가 관계(마름모)에 발을 담그는 방식에 따라 '전체(필수)'와 '부분(선택)'으로 나뉩니다.
1. 전체 참여 (Total Participation / 필수 참여)
- 개념: A 개체 집합에 있는 모든 튜플이 단 한 명의 열외도 없이 반드시 1번 이상 관계에 참여해야만 존재가 허락되는 강제성입니다.
- 비즈니스 규칙 예시: "모든 사원은 반드시 어느 한 부서에 소속되어야 한다." (미발령 무소속 사원은 존재 불가).
- ERD 기호: 개체와 마름모 사이를 **이중 실선(====)**으로 강하게 연결합니다.
- DB 매핑 (SQL): 사원 테이블의 부서번호(FK) 컬럼에
NOT NULL제약조건을 때려 박아 강제합니다.
2. 부분 참여 (Partial Participation / 선택 참여)
- 개념: 관계에 참여해도 되고, 귀찮으면 참여하지 않고 가만히 있어도(NULL) 용인되는 느슨한 관계입니다.
- 비즈니스 규칙 예시: "사원들 중 일부만 특정 프로젝트의 매니저(관리자) 역할을 맡는다." (대부분의 평사원은 매니저 관계에 참여하지 않음).
- ERD 기호: 개체와 마름모 사이를 단일 실선(───) 하나로 가볍게 연결합니다.
- DB 매핑 (SQL): 사원 테이블의 관리프로젝트(FK) 컬럼에 **
NULL 값을 허용**하여, 관리자가 아닌 사람은 빈칸으로 놔두게 합니다.
Ⅱ. (MIN, MAX) 표기법으로 한 번에 보기
현대의 ERD(특히 UML이나 Barker 표기법)에서는 선의 끝에 (최솟값, 최댓값)을 적어 이 모든 제약조건을 한눈에 표시합니다.
- (0, N): 0번 참여해도 됨(선택/부분 참여), 최대 N번 참여 가능 (다대다 문어발).
- (1, 1): 무조건 1번은 참여해야 함(필수/전체 참여), 최대 1번만 가능 (1:1 유일 관계).
- (1, N): 무조건 1번 이상 참여해야 함(필수), 한도 끝도 없이 참여 가능.
[적용 예시]
사원 (1, 1) ────── 소속 ────── (0, N) 부서
- 해석: 사원은 무조건(1) 1개의 부서(1)에만 속해야 한다. 하지만 어떤 부서는 신설되어서 아직 사원이 0명(0)일 수도 있고 수백 명(N)일 수도 있다.
📢 섹션 요약 비유: 참여 제약조건은 회사 체육대회의 줄다리기 출전 규정입니다. '전체 참여(이중선)'는 부서원 전원이 아프든 말든 무조건 운동장에 끌려 나와 동아줄을 잡아야 하는 스파르타식 강제 규정(NOT NULL)입니다. '부분 참여(단일선)'는 하고 싶은 사람만 줄을 잡고 나머지는 응원석에서 구경(NULL)해도 허락해 주는 자유로운 규정입니다.