다음 시나리오를 생각해본다.
학생은 여러 과목을 수강할 수 있고, 과목은 여러 학생이 수강할 수 있다.
이때 관계 자체에는 별도의 데이터가 없다고 가정한다.
개념적 모델링 단계에서는 단순히 학생과 과목이 다대다 관계로 연결되어 있다고 표현한다.
학생 (M) >---< (N) 과목
관계 자체에 추가 속성이 없으므로, 별도의 연관 엔티티를 그리지 않아도 된다.
하지만 논리적 모델링(테이블 설계) 단계로 내려오면, 관계형 데이터베이스의 한계 때문에 그냥 M:N 관계를 둘 수 없다.
그래서 다음과 같이 수강(ENROLLMENT) 이라는 연결 테이블을 만든다.
CREATE TABLE student (
student_id BIGINT PRIMARY KEY,
name VARCHAR(50) NOT NULL
);
CREATE TABLE course (
course_id BIGINT PRIMARY KEY,
title VARCHAR(100) NOT NULL
);
CREATE TABLE enrollment (
enrollment_id BIGINT PRIMARY KEY,
student_id BIGINT NOT NULL,
course_id BIGINT NOT NULL,
CONSTRAINT fk_enrollment_student
FOREIGN KEY (student_id) REFERENCES student(student_id),
CONSTRAINT fk_enrollment_course
FOREIGN KEY (course_id) REFERENCES course(course_id)
);
여기서는 관계 자체에 별도 속성이 없으므로 enrollment는 두 개의 FK만 가져도 충분하다.
앞서 본 주문-상품 관계처럼, 종종 관계 속에만 의미가 있는 속성이 존재한다.