시나리오
- 학생(Student)은 여러 과목을 수강함
- 교수(Professor)는 여러 과목을 담당함
- 각 과목(Course)은 한 교수에 의해 진행됨
- 강의실(Room)에서 과목이 정해진 시간표에 따라 열림
- 성적(Grade)은 학생이 수강한 과목마다 기록됨
- 전공(Major)은 학생과 과목 모두에 연결됨
ER 모델 구성 요소
개체(Entity)
- Student(학생) — 학번, 이름, 생년월일, 전공코드
- Professor(교수) — 교수ID, 이름, 학과
- Course(과목) — 과목코드, 과목명, 학점, 교수ID
- Room(강의실) — 강의실ID, 건물명, 수용인원
- Major(전공) — 전공코드, 전공명
관계(Relationship)
- Enroll(수강): 학생이 과목을 수강함 + 성적, 학기
- Teaches(담당): 교수는 여러 과목을 가르침
- Schedules(시간표): 과목은 강의실에서 특정 요일, 시간에 진행됨
- BelongsTo: 학생과 과목 모두 특정 전공에 속함
관계형 데이터베이스 매핑
개체 -> 테이블
- 각 개체는 하나의 테이블로 매핑
- 개체의 속성은 테이블의 열(Column)
- 기본 키는 테이블의 Primary Key
1. Student (student_id , name, birth_date , major_id)
CREATE TABLE Student (
student_id INT PRIMARY KEY,
name VARCHAR(50),
birth_date DATE,
major_id INT,
FOREIGN KEY (major_id) REFERENCES Major(major_id)
);
- student_id: 기본 키 (Primary Key)
- major_id: 전공 개체(Major)와의 관계를 반영하기 위해 **외래 키(Foreign Key)**로 추가
2. Professor(professor_id , name , department)
CREATE TABLE Professor (
professor_id INT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50)
);
- 간단한 개체는 그대로 열(Column)로 매핑
3.Course(course_id , course_name , credit , professor_id , major_id)
CREATE TABLE Course (
course_id INT PRIMARY KEY,
course_name VARCHAR(100),
credit INT,
professor_id INT,
major_id INT,
FOREIGN KEY (professor_id) REFERENCES Professor(professor_id),
FOREIGN KEY (major_id) REFERENCES Major(major_id)
);
- professor_id, major_id는 다른 개체(Professor, Major)와의 관계를 반영
- 이처럼 개체 안에 다른 개체를 참조하면 → Foreign Key로 연결됨
4. Room(room_id , building_name , capacity)
CREATE TABLE Room (
room_id INT PRIMARY KEY,
building_name VARCHAR(50),
capacity INT
);
5. Major(major_id, major_name)
CREATE TABLE Major (
major_id INT PRIMARY KEY,
major_name VARCHAR(50)
);
관계 -> 테이블,외래키
1. Enroll (학생 수강)
- 관계 타입: M:N 관계 (두 개체의 기본 키를 조합해서 복합 기본 키로 사용)
- 학생 1명은 여러 과목을 수강, 과목 1개는 여러 학생이 수강
CREATE TABLE Enroll (
student_id INT,
course_id INT,
semester VARCHAR(20),
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)
);
2. Schedule(시간표)
- 과목(Course)이 강의실(Room)에서 특정 시간대에 수업함
- 이건 복합 관계 → 테이블로 매핑
CREATE TABLE Schedule (
course_id INT,
room_id INT,
day_of_week VARCHAR(10),
time_slot VARCHAR(10),
PRIMARY KEY (course_id, day_of_week, time_slot),
FOREIGN KEY (course_id) REFERENCES Course(course_id),
FOREIGN KEY (room_id) REFERENCES Room(room_id)
);
DBeaver실습

