8-1. 속성이 없는 M:N 관계 예시

다음 시나리오를 생각해본다.

학생은 여러 과목을 수강할 수 있고, 과목은 여러 학생이 수강할 수 있다.

이때 관계 자체에는 별도의 데이터가 없다고 가정한다.

개념적 모델링

개념적 모델링 단계에서는 단순히 학생과 과목이 다대다 관계로 연결되어 있다고 표현한다.

학생 (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만 가져도 충분하다.


8-2. 속성이 있는 M:N 관계 예시

앞서 본 주문-상품 관계처럼, 종종 관계 속에만 의미가 있는 속성이 존재한다.