본문 바로가기
DB

DB N-N관계 풀어내기 예제

by 개발자 포비 2024. 12. 6.

데이터베이스의 다대다(N:M) 관계 설명

1. 다대다 관계란?

  • 한 테이블의 여러 레코드가 다른 테이블의 여러 레코드와 관계를 가질 수 있는 구조
  • 예: 학생과 강좌의 관계
    • 한 학생이 여러 강좌를 수강할 수 있음
    • 한 강좌에 여러 학생이 등록할 수 있음

2. 관계도

[Student 테이블]        [StudentCourse 테이블]           [Course 테이블]
- student_id (PK)  ────┐    - student_id (FK)    ┌────  - course_id (PK)
- name                     │    - course_id (FK)     │     - course_name
- email                   1│    - enrollment_date    │1    - professor
                           └───── - grade    ─┘
                                  N               N

3. 테이블 구조와 예시 데이터

3.1 Student (학생) 테이블

student_id name email
1 김철수 kim@example.com
2 이영희 lee@example.com
3 박지민 park@example.com

3.2 Course (강좌) 테이블

course_id course_name professor
101 데이터베이스 강교수
102 자바프로그래밍 정교수
103 웹개발 이교수

3.3 StudentCourse (수강신청) 테이블

student_id course_id enrollment_date grade
1 101 2024-03-02 A
1 102 2024-03-02 B+
2 101 2024-03-01 A+
2 103 2024-03-02 B
3 102 2024-03-01 A
3 103 2024-03-01 A+

4. 테이블 생성 SQL

-- 학생 테이블 생성
CREATE TABLE Student (
    student_id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

-- 강좌 테이블 생성
CREATE TABLE Course (
    course_id INT PRIMARY KEY,
    course_name VARCHAR(200),
    professor VARCHAR(100)
);

-- 수강신청 테이블 생성 (다대다 관계를 위한 연결 테이블)
CREATE TABLE StudentCourse (
    student_id INT,
    course_id INT,
    enrollment_date DATE,
    grade VARCHAR(2),
    -- 복합 기본키 설정
    PRIMARY KEY (student_id, course_id),
    -- 외래키 설정
    FOREIGN KEY (student_id) REFERENCES Student(student_id),
    FOREIGN KEY (course_id) REFERENCES Course(course_id)
);

5. 키(Key) 구조 설명

5.1 StudentCourse 테이블의 키 구성

  1. 기본키(Primary Key)

    • student_id와 course_id의 조합으로 구성된 복합 기본키
    • 동일한 학생이 같은 과목을 중복 수강하는 것을 방지
  2. 외래키(Foreign Key)

    • student_id: Student 테이블의 student_id를 참조
    • course_id: Course 테이블의 course_id를 참조

5.2 키 제약조건의 효과

  • 데이터 무결성 보장
  • 존재하지 않는 학생이나 강좌의 데이터가 입력되는 것을 방지
  • 중복 수강신청 방지

'DB' 카테고리의 다른 글

DB - B 트리를 사용하는 이유  (0) 2024.12.16
트랜잭션 동작 방식과 스프링의 트랜잭션 동작 방식  (1) 2024.12.06
DB - 인덱스  (0) 2024.12.03
DB - MySQL 기본 문법 정리  (0) 2024.12.02
DB - 정규화  (0) 2024.11.28

댓글