핵심 요약
관계의 구성 요소와 1:1·
SQLD·
학습 목표
- 관계의 존재성과 행위성을 설명한다.
- 관계 차수, 카디널리티와 선택성을 ERD에서 읽는다.
본문
개념 지도
업무 사실→엔터티와 행 단위→속성·도메인→관계·카디널리티→제약핵심 내용
관계는 두 엔터티 사이의 업무상 연관 규칙이다. 고객이 주문을 한다는 행위 관계, 부서에 사원이 소속된다는 존재 관계처럼 양쪽 관점의 관계명을 문장으로 읽어야 한다.
- 관계 차수(Degree): 관계에 참여하는 엔터티 수
- 카디널리티: 한 인스턴스와 대응하는 상대 인스턴스의 수(1:1, 1:M, M:N)
- 선택성/Optionality: 관계 참여가 필수인지 선택인지(최소 1 또는 0)
논리 모델의 M:N 관계는 구현 단계에서 보통 연결 엔터티로 해소한다. 예를 들어 학생과 과목 사이의 수강 관계는 수강(학생번호, 과목번호, 수강일자) 같은 엔터티가 된다.
관계는 실제 업무 규칙으로 검증한다. “모든 주문은 반드시 한 고객에게 속하는가?”, “고객은 주문이 없어도 존재할 수 있는가?”처럼 양방향으로 질문한다.
최소·최대 카디널리티를 따로 읽기
고객 1명 ── 주문 0..N건
주문 1건 ── 고객 정확히 1명
이 관계에는 두 방향의 규칙이 있다. 고객은 주문 없이도 존재할 수 있으므로 고객→주문의 최소값은 0이고, 주문은 반드시 고객 한 명에 속하므로 주문→고객의 최소·최대값은 모두 1이다.
CREATE TABLE orders (
order_id NUMBER PRIMARY KEY,
customer_id NUMBER NOT NULL,
CONSTRAINT orders_customer_fk
FOREIGN KEY (customer_id) REFERENCES customer(customer_id)
);
NOT NULL은 주문 쪽 필수 참여를, FK는 참조 대상의 존재를 보장한다. 고객이 주문을 반드시 한 건 이상 가져야 한다는 반대 방향의 최소값은 이 DDL만으로 자동 보장되지 않으며 별도 업무 절차가 필요하다.
M:N을 연결 엔터티로 바꾸기
학생과 과목은 M:N이지만 실제 업무에는 수강일자·성적·상태 같은 관계 자체의 속성이 존재한다.
학생 1 ── N 수강 N ── 1 과목
수강 PK = (학생번호, 과목번호, 학기)
연결 엔터티를 만들면 “한 학생이 같은 과목을 학기마다 다시 수강할 수 있는가?” 같은 업무 유일성을 PK로 표현할 수 있다.
식별 관계 여부
부모 식별자가 자식 PK에 포함되면 식별 관계다. 포함되지 않고 단순 FK로만 존재하면 비식별 관계다. 생명주기 종속성과 업무 식별 규칙을 확인해 선택하며, 선 굵기나 모양만 외우지 않는다.
시험 포인트
문항 풀이 보강: 관계를 검증하는 네 가지 질문
관계는 엔터티가 존재한다는 이유만으로 자동 생성되지 않는다. 다음을 업무 문장과 데이터 조합으로 확인한다.
- 두 엔터티 사이에 업무상 관심 있는 연관 규칙이 있는가?
- 두 엔터티의 정보를 함께 조회하거나 조합하는 업무가 있는가?
- 업무 기술서나 장표에 연결 규칙이 표현되어 있는가?
- 관계 연결을 가능하게 하는 동사와 조인 기준이 있는가?
관계의 표기에는 관계명, 차수(Degree), 카디널리티와 선택성이 포함된다. 두 엔터티가 참여하는 관계는 2항 관계이고, 한 고객이 주문 여러 건과 연결되면 1:M이다.
고객은 주문을 0건 이상 할 수 있다.
주문은 반드시 한 고객에 속한다.
이처럼 양쪽 방향으로 최소값(0 또는 1)과 최대값(1 또는 다수)을 각각 읽어야 한다. 선택 관계는 최소 카디널리티가 0이라는 뜻이고, 1:M의 M은 최대 카디널리티다.
문제에 적용하는 순서
- 두 엔터티를 주어와 목적어로 바꾸어 양방향 문장을 만든다.
- 각 방향의 최소와 최대를 따로 표시한다.
- M:N이면 연결 엔터티가 필요한지 확인한다.
- 단순히 함께 등장한다는 이유만으로 관계라고 판단하지 않는다.
자주 틀리는 부분
- 1:M에서 FK는 일반적으로 M 쪽에 위치한다.
- 선택 관계라고 해서 FK 컬럼이 항상 NULL 허용인 것은 아니다. 관계 구현 방식과 다른 제약을 함께 본다.
- 관계명 없이 선만 그으면 행위의 의미와 방향을 검증하기 어렵다.
복습 문제
답을 생각한 뒤 정답과 근거를 펼쳐 보세요.
고객 1명이 주문 여러 건을 만들 수 있을 때 카디널리티는?
정답과 근거
고객 대 주문은 1:N 관계입니다.
M:N 관계를 물리 테이블로 바로 두기 어려운 이유는?
정답과 근거
두 부모의 조합별 속성과 식별 규칙을 둘 위치가 모호해지므로 교차 엔터티로 해소해야 합니다.
논리 모델의 M:N 관계는 구현 단계에서 보통 연결 엔터티로 해소한다. 예를 들어 학생과 과목 사이의 수강 관계는 수강(학생번호, 과목번호, 수강일자) 같은 엔터티가 된다.
고객 없이 주문이 생성될 수 있는지에 따라 관계의 최소 참여 수를 어떻게 표기하는가?
정답과 근거
주문이 고객 없이 가능하면 주문 쪽에서 고객 참여 최소값은 0, 반드시 고객이 있어야 하면 1로 표기합니다. 최대값은 한 주문당 고객 하나라는 업무 규칙에 따라 1입니다.