관계(Relationship) 완벽 정리
관계 정의·존재/행위 분류·차수·선택사양·읽기 방법까지 한눈에 정리
1. 관계의 정의
관계란?
엔터티와 엔터티 사이의 논리적인 연관성으로, 업무적으로 의미가 있는 연결을 의미한다. 관계는 동사(Verb)로 표현된다.
관계의 구성요소
- • 관계명 — 관계의 이름 (동사형, 예: "주문하다")
- • 관계차수 — 참여하는 인스턴스 수 (1:1, 1:M, M:N)
- • 관계선택사양 — 필수 참여 여부 (필수/선택)
관계의 페어링
관계 페어링이란 각 엔터티의 인스턴스들이 자신이 관련된 인스턴스들과 관계의 어커런스로 참여하는 형태이다. 관계는 엔터티 간의 관계이고, 페어링은 인스턴스 간의 개별 연결이다.
2. 관계 분류: 존재 관계 vs 행위 관계
존재 관계와 행위 관계 비교
| 구분 | 존재 관계 | 행위 관계 |
|---|---|---|
| 정의 | 존재 자체로 연관성이 있는 관계 | 행위에 의해 발생하는 관계 |
| 예시 | 부서 — 사원 (소속) | 고객 — 주문 (주문하다) |
| 관계명 | "소속된다", "포함된다" | "주문하다", "배송하다" |
| UML 표기 | 연관 관계(Association) | 의존 관계(Dependency) |
존재 관계 상세
엔터티 간 존재 자체만으로 연관성이 있는 관계이다. 특정 행위 없이도 관계가 성립한다.
부서 ← 사원: 사원은 부서에 "소속"된다 (행위 없이 존재 자체로 관계)
행위 관계 상세
엔터티 간 특정 행위(업무 수행)에 의해 발생하는 관계이다. 행위가 없으면 관계도 없다.
고객 → 주문: 고객이 "주문"이라는 행위를 해야 관계가 발생
3. 관계 차수 (Cardinality)
관계 차수란?
두 엔터티 간 관계에 참여하는 인스턴스의 수를 나타낸다. 한쪽 엔터티의 하나의 인스턴스가 다른 엔터티의 몇 개 인스턴스와 관계를 맺는지를 표현한다.
1:1, 1:M, M:N 비교
| 차수 | 설명 | 예시 | 빈도 |
|---|---|---|---|
| 1:1 | 한 인스턴스가 상대편 한 인스턴스와 대응 | 사원 — 좌석배치 | 드묾 |
| 1:M | 한 인스턴스가 상대편 여러 인스턴스와 대응 | 부서 — 사원 | 가장 흔함 |
| M:N | 양쪽 모두 여러 인스턴스와 대응 | 학생 — 과목 | 해소 필요 |
M:N 관계 해소
M:N 관계는 관계형 데이터베이스에서 직접 구현할 수 없다. 중간에 교차 엔터티(연결 엔터티)를 추가하여 1:M + M:1로 해소해야 한다.
해소 전:
학생 ←M:N→ 과목
해소 후:
학생 ←1:M→ 수강(학번, 과목코드) ←M:1→ 과목
1:1 관계 주의
1:1 관계는 실무에서 매우 드물다. 1:1로 모델링했다면 실제로는 1:M이 아닌지, 또는 하나의 엔터티로 통합 가능한지 재검토해야 한다.
4. 관계 선택사양 (Optionality)
필수 참여 vs 선택 참여
| 구분 | 필수 참여 (Mandatory) | 선택 참여 (Optional) |
|---|---|---|
| 의미 | 모든 인스턴스가 반드시 참여 | 일부 인스턴스만 참여 가능 |
| ERD 표기 | 실선 (|) | 원(O) |
| FK 제약 | NOT NULL | NULL 허용 |
| 예시 | 주문은 반드시 고객이 있어야 함 | 사원은 부서 배치 전일 수 있음 |
필수·선택 조합 예시
- • 고객(필수) — 주문(선택): 주문은 반드시 고객이 있어야 하지만, 고객은 주문하지 않을 수도 있다
- • 부서(필수) — 사원(필수): 사원은 반드시 부서에 소속되고, 부서에는 반드시 사원이 있어야 한다
5. 관계 읽기 방법
관계 읽기 4단계
- 1단계. 기준 엔터티를 먼저 읽는다 → "각(하나의)"
- 2단계. 대상 엔터티의 관계 참여도를 읽는다 → "하나의/하나 이상의"
- 3단계. 관계선택사양과 관계명을 읽는다
- 4단계. 반대 방향도 동일하게 읽는다
관계 읽기 예시
부서 ←1:M→ 사원
정방향: "각 부서는 하나 이상의 사원을 포함한다"
역방향: "각 사원은 하나의 부서에 소속된다"
관계 읽기 추가 예시
고객 ←1:M→ 주문 (고객:필수, 주문:선택)
정방향: "각 고객은 하나 이상의 주문을 할 수 있다" (선택)
역방향: "각 주문은 반드시 하나의 고객에 의해 발생한다" (필수)
6. 관계 표기 기호
IE 표기법 기호
| 기호 | 의미 | 설명 |
|---|---|---|
| | | 필수(1) | 정확히 하나 |
| O | 선택(0) | 0 또는 그 이상 |
| < (까마귀발) | 다수(Many) | 여러 개 |
| O< | 선택적 다수 | 0개 이상 여러 개 |
7. 관계 설정 시 체크사항
관계 성립 조건
- • 두 엔터티 사이에 관심 있는 연관 규칙이 존재하는지 확인
- • 두 엔터티 사이에 정보 조합이 발생하는지 확인
- • 업무기술서, 장표에 관계 연결을 가능하게 하는 동사가 있는지 확인
- • 업무기술서, 장표에 관계 연결에 대한 규칙이 존재하는지 확인
관계명 작성 규칙
- • 관계명은 현재형으로 표현 ("주문했다" X → "주문하다" O)
- • 관계명은 명확하게 작성 ("관련된다"는 모호함)
- • 양방향으로 읽을 수 있어야 함
8. 관계와 조인(JOIN)
관계는 조인의 근거
데이터 모델에서 정의한 관계는 물리 데이터베이스에서 FK(Foreign Key)로 구현되며, SQL에서 JOIN의 조건이 된다.
관계 없이도 조인 가능?
관계가 없어도 조인은 가능하다. 다만 관계가 없는 조인은 데이터 정합성이 보장되지 않으며, 성능 문제가 발생할 수 있다. 관계는 논리적 근거, 조인은 물리적 구현이다.
9. 시험 빈출 포인트
자주 출제되는 유형
- • 존재 관계 vs 행위 관계 구분 — 예시를 보고 구분하는 문제 빈출
- • M:N 관계 해소 — 교차 엔터티(연결 테이블)로 1:M + M:1 변환
- • 관계 읽기 — ERD를 보고 관계를 문장으로 읽는 문제
- • 필수/선택 참여와 NOT NULL — 필수 참여 = FK NOT NULL
- • 관계 페어링 — 관계는 엔터티 간, 페어링은 인스턴스 간
- • 관계와 조인의 차이 — 관계 없이도 조인 가능, 관계는 논리적 모델의 개념
함정 선지 주의
- • "1:M 관계가 가장 일반적이다" — 맞는 설명
- • "M:N 관계는 RDB에서 직접 구현할 수 없다" — 맞는 설명 (교차 엔터티 필요)
- • "관계가 있어야만 조인할 수 있다" — 틀린 설명 (관계 없이도 조인 가능)
개념을 확인했다면 문제로 실력을 검증해보세요