데이터베이스의 다대다(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 (학생) 테이블
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 테이블의 키 구성
기본키(Primary Key)
- student_id와 course_id의 조합으로 구성된 복합 기본키
- 동일한 학생이 같은 과목을 중복 수강하는 것을 방지
외래키(Foreign Key)
- student_id: Student 테이블의 student_id를 참조
- course_id: Course 테이블의 course_id를 참조
5.2 키 제약조건의 효과
- 데이터 무결성 보장
- 존재하지 않는 학생이나 강좌의 데이터가 입력되는 것을 방지
- 중복 수강신청 방지
댓글