DB upgrade
아래의 table들을 기존의 DB에 추가해서 다시 design하고자 한다.
EER diagram
우선 club의 경우 특별한 소속이 없이 인하대학교의 학생이라면 가입이 가능하다. 또한 club에는 여러 학생이 소속되어 있고 학생들도 여러 club에 가입할 수 있기 때문에 club과 student를 n:m의 관계로 정의해주었다. 또한 동아리방 즉, room은 없을 수도 있기 때문에 비식별관계로 정의 해주었고 room의 mandatory를 풀어주었다.
다음으로 room은 반드시 building에 포함이 되어있고 building하나에 여러 개의 room이 들어가 있을 수 있기 때문에 room : building = n:1의 식별관계로 정의해주었다.
다음으로 employee는 청소부, 경비원, 시설 관리자등과 같이 특정 building에 소속된 분들로 정의했다. 따라서 building과 employee도 1:n의 식별 관계로 정의해주었다.
Building table은 앞서 설명한 관계외에는 특별한 지점은 없다.
Class table은 보다 복잡하게 얽혀 있다. 우선 모든 수업은 특정한 과에서 여는 것이므로 department와 class를 1:n의 식별 관계로 정의해주었고 한 수업이 특별한 경우에는 요일에 따라 다른 강의실에서 진행될 수 있고 한 강의실에서 시간표에 따라 다양한 수업이 진행되므로 class : room = n:m의 다대다 식별관계로 정의해주었다. 마지막으로 학생들은 다양한 수업을 듣고 한 수업에도 다양한 학생들이 수강을 하기 때문에 class와 student도 class : student = n:m 즉, 다대다의 식별관계로 정의해주었다.
앞서 언급했듯 department는 class를 주관하기 때문에 department : class = 1:n의 식별관계가 존재하고 4주차에서 정의했듯 한 과에 여러 학생이 소속되어 있고 학생에 따라 복수전공을 할 수 있기 때문에 department : student = n:m의 식별관계로 정의해주었다.
마지막으로 학생은 어떤 과, 수업, 동아리에 소속이 되는 존재이지 어떤 것을 주관하거나 포함하는 역할이 아니기 때문에 student table은 앞서 언급한 club, class, department table과 각각 다대다의 복합적인 관계를 맺고 있다는 사실 외에는 특별한 점이 없다.
종합적으로 보면 모든 사항들은 not null로 설정해주었으나 club table에서 room이 존재하지 않을 수 있어 비식별관계로 맺은 만큼 room_ID는 null이 가능하도록 설정하였다.
Data Insert
INSERT INTO building VALUES
(12, 'hightech'),
(1, 'main'),
(2, 'library'),
(3, '60_anniv'),
(5, 'building_5'),
(7, 'student_center');
INSERT INTO department VALUES
(416, 'ice', 'ice@inha.ac.kr', '032-860-7431'),
(291, 'mechanical', 'me@inha.ac.kr', '032-860-7300'),
(423, 'computer science', 'cse@inha.ac.kr', '032-540-9632'),
(244, 'electrical', 'eee@inha.ac.kr', '032-824-7823'),
(221, 'biology', 'bio@inha.ac.kr', '032-472-9812'),
(289, 'chemistry', 'chm@inha.ac.kr', '032-860-7234'),
(539, 'korean edu', 'ke@inha.ac.kr', '032-347-5982'),
(564, 'math', 'mth@inha.ac.kr', '032-912-9443');
INSERT INTO room VALUES
(232, 'ice1', 45, 12),
(230, 'ice2', 45, 12),
(718, 'dance_room', 50, 7),
(300, 'wallchoen', 250, 3),
(204, 'ar_ex', 10, 2),
(107, 'startup', 30, 1),
(512, 'math1', 50, 5),
(734, 'studyroom1', 50, 2),
(553, 'lectureroom1', 50, 3),
(342, 'lectureroom2', 55, 12);
INSERT INTO student VALUES
(101, 'John Doe', 'john.doe@example.com', '010-456-7890', 'computer science'),
(102, 'Jane Smith', 'jane.smith@example.com', '010-4567-6891', 'biology'),
(103, 'Alice Johnson', 'alice.johnson@example.com', '010-4567-892', 'math'),
(104, 'Bob Brown', 'bob.brown@example.com', '123-456-7893', 'math'),
(105, 'Charlie Davis', 'charlie.davis@example.com', '123-4567-894', 'electrical'),
(106, 'Daisy Evans', 'daisy.evans@example.com', '123-456-7895', 'chemistry'),
(107, 'Edward White', 'edward.white@example.com', '123-4567-896', 'computer science'),
(108, 'Fiona Green', 'fiona.green@example.com', '123-456-7897', 'ice'),
(109, 'George Wilson', 'george.wilson@example.com', '123-456-7898', 'ice'),
(110, 'Hannah Taylor', 'hannah.taylor@example.com', '123-456-7899', 'korean edu');
INSERT INTO department_has_student VALUES
(423, 101),
(564, 101),
(221, 102),
(564, 103),
(564, 104),
(244, 105),
(289, 106),
(423, 107),
(416, 108),
(416, 109),
(291, 109),
(539, 110);
INSERT INTO club VALUES
(1, 'club1', 718),
(2, 'club2', null),
(3, 'club3', 512),
(4, 'club4', 204),
(5, 'club5', null);
INSERT INTO employee VALUES
(200, 'kim', 1),
(201, 'lee', 2),
(202, 'hwang', 3),
(203, 'choi', 5),
(204, 'bae', 12);
INSERT INTO class VALUES
(300, 'basic math', 'professor1',50, 564),
(301, 'electric circuit', 'professor2', 40, 244),
(302, 'computer architecture', 'professor3', 45, 423),
(303, 'computer network', 'professor4', 50, 416),
(304, 'korean literature', 'professor5', 65, 539);
INSERT INTO club_has_student VALUES
(1, 102),
(1, 107),
(2, 101),
(3, 102),
(4, 105),
(4, 106),
(5, 110);
INSERT INTO class_has_room VALUES
(300, 512),
(301, 734),
(302, 342),
(303, 232),
(304, 553);
INSERT INTO class_has_student VALUES
(300, 103),
(300, 104),
(301, 105),
(301, 107),
(302, 101),
(302, 107),
(303, 108),
(303, 109),
(304, 110);
'Quality control (Univ. Study) > Database Design' 카테고리의 다른 글
Relational Data Model (0) | 2023.10.20 |
---|---|
MySQL Express upgrade (1) | 2023.10.05 |
EER (0) | 2023.09.26 |
MySQL의 ER diagram (0) | 2023.09.26 |
MySQL Express 연동 (0) | 2023.09.25 |