ERD 표기와 관계 차수 읽기
ERD에서 관계선, 선택성, 1:1·1:N·M:N 관계를 읽고 SQL 조인 결과와 연결하는 방법을 정리합니다.
출제 빈도 ★★★☆☆ 관련 문제 4개 |
1:11:NM:NIEBarker ERD는 테이블 그림이 아니라 업무 규칙 지도입니다
ERD는 엔터티와 엔터티 사이의 관계를 시각적으로 표현한 모델입니다. 시험에서는 ERD를 보고 어떤 테이블에 외래키가 들어가야 하는지, 관계가 필수인지 선택인지, 결과 행 수가 어떻게 늘어날 수 있는지 묻습니다.
예를 들어 고객과 주문의 관계는 보통 다음과 같이 해석합니다.
고객 1명은 주문을 0건 이상 할 수 있습니다.
주문 1건은 고객 1명에 속합니다.
이 문장을 테이블로 옮기면 주문 테이블에 고객번호 외래키가 들어갑니다.
관계 차수
| 관계 | 의미 | 설계 기준 |
|---|---|---|
| 1:1 | 한 행이 상대 한 행과 연결 | 합칠지 분리할지 업무와 보안 기준으로 판단 |
| 1:N | 한 행이 상대 여러 행과 연결 | N쪽에 외래키를 둡니다 |
| M:N | 양쪽 모두 여러 행과 연결 | 교차 엔터티로 풀어냅니다 |
M:N 관계는 그대로 구현하기 어렵습니다. 학생과 과목은 M:N 관계이므로 수강 엔터티를 사이에 둡니다.
학생 1:N 수강 N:1 과목
이렇게 바꾸면 SQL 조인 경로도 명확해집니다.
선택성과 필수성
관계는 반드시 있어야 하는 관계와 없어도 되는 관계로 나뉩니다.
| 구분 | 의미 | 예 |
|---|---|---|
| 필수 관계 | 상대 인스턴스가 반드시 존재 | 주문은 고객이 있어야 합니다 |
| 선택 관계 | 상대 인스턴스가 없어도 됨 | 고객은 아직 주문이 없을 수 있습니다 |
선택 관계는 SQL에서 OUTER JOIN이 필요한 상황과 연결됩니다. 주문이 없는 고객까지 보여주어야 한다면 고객을 기준으로 LEFT OUTER JOIN을 사용합니다.
식별 관계 표기 읽기
식별 관계는 부모 식별자가 자식의 주 식별자에 포함되는 관계입니다. 자식 엔터티가 부모 없이는 독립적으로 식별되기 어렵습니다.
주문(주문번호)
주문상세(주문번호, 순번)
주문상세의 식별자에 주문번호가 포함되므로 주문과 주문상세는 식별 관계로 표현할 수 있습니다.
비식별 관계는 부모 키가 자식의 일반 외래키로 들어가지만 자식의 주 식별자에는 포함되지 않습니다.
식별 관계
주문(주문번호)
주문상세(주문번호, 순번)
└─────┴── PK
- 부모 키가 자식 PK의 일부입니다.
- 자식은 부모 없이 독립적으로 식별되기 어렵습니다.
- ERD에서 보통 실선으로 표기합니다.
비식별 관계
부서(부서번호)
사원(사원번호, 부서번호)
└── PK └── FK only
- 부모 키가 자식의 일반 FK로만 들어갑니다.
- 자식은 자체 PK로 독립 식별됩니다.
- ERD에서 보통 점선으로 표기합니다.
ERD를 SQL로 바꾸는 방법
- 엔터티를 테이블로 봅니다.
- 속성을 컬럼으로 봅니다.
- 주 식별자를 기본키 후보로 봅니다.
- 1:N 관계에서 N쪽 외래키를 찾습니다.
- 선택 관계라면
OUTER JOIN가능성을 고려합니다. - M:N 관계라면 중간 테이블을 거쳐 조인합니다.
시험장에서 유의할 지점
- M:N 관계를 외래키 하나로만 해결하려는 경우가 있습니다.
- 선택 관계인데 내부 조인만 고려하는 경우가 있습니다.
- 관계 차수의 기준을 전체 테이블 크기로 혼동하는 경우가 있습니다.
- 식별 관계와 비식별 관계를 외래키 존재 여부만으로 판단하기 쉽습니다.
한 문장 요약
ERD의 관계 차수와 선택성은 외래키 위치와 SQL 조인 방식을 결정합니다.