일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 1과목
- SQL
- 문제풀이
- BFS
- 코틀린
- 파이썬
- 백준 알고리즘
- python
- 공부일지
- 소프티어
- 코딩교육봉사
- C++
- 코딩봉사
- 알고리즘
- 데이터베이스
- programmers
- softeer
- 회고
- 시나공
- kotlin
- 백준
- 백준알고리즘
- 프로그래머스
- 정보처리산업기사
- MYSQL
- 자바
- java
- SW봉사
- CJ UNIT
- 스프링
- Today
- Total
JIE0025
[데이터 모델링] 모델링 예제 (ER다이어그램,관계 데이터 모델) 본문
요구사항을 반영한 ER다이어그램을 만들고, 관계 데이터 모델도 써보겠다.
이용하는 DB는 마당대학이지만,
ER 다이어그램과 관계 데이터 모델을 생성하는 것이기 떄문에
데이터베이스는 필요하지 않다.
마당대학 요구사항
① 교수(Professor)는 아이디(ssn), 이름(name), 나이(age), 직위(rank), 연구 분야(speciality)를 가진다.
② 학과(Department)에는 학과번호(dno), 학과이름(dname), 학과사무실(office)이있다.
③ 대학원생(Graduate)은 아이디(ssn), 이름(name), 나이(age), 학위과정(deg_prog, 석사/박사)을 가진다.
④ 과제(Project)는 과제번호(pid), 지원기관(sponsor), 개시일(start_date), 종료일(end_date), 예산액 (budget)이있다.
⑤ 학과마다그 학과를 운영(run)하는 교수(학과장이라고 한다)가 한명씩 있다.
⑥ 한 교수가 여러학과에서 근무(work-dept)할 수 있는데, 이때각 학과별로 참여백분율(pct_time)이 기록된다.
⑦ 대학원생에게는 학위 과정을 밟을 전공학과(major)가하나씩 있다.
⑧ 대학원생에게는 어떤과목을 들으면좋을지 조언(advisor)해주는 선임대학원생(학생조언자라고 한다)이있다.
⑨ 과제는 한 교수(연구책임자라고 한다)에의해 관리(manage)된다.
⑩ 과제는 한 사람이상의 교수(공동연구책임자라고 한다)에의해 수행(work-in)된다.
⑪ 한 과제는 한 명이상의 대학원생(연구조교라고 한다)에의해 수행(work-prog)된다.
먼저 요구사항을 쭉 읽어보자.
1~4번은 개체와 속성을 연결해주는 부분이다.
5~11번은 관계로 개체들을 연결해주는 부분이다.
ER다이어그램 만들기
1~4번 : 개체와 속성 연결
개체에 속성을 연결하기만 하면 된다.
아이디나 번호 등은 개체를 구분하는 KEY값이 되므로 밑줄을 그어준다.
① 교수(Professor)는 아이디(ssn), 이름(name), 나이(age), 직위(rank), 연구 분야(speciality)를 가진다.
② 학과(Department)에는 학과번호(dno), 학과이름(dname), 학과사무실(office)이있다.
③ 대학원생(Graduate)은 아이디(ssn), 이름(name), 나이(age), 학위과정(deg_prog, 석사/박사)을 가진다.
④ 과제(Project)는 과제번호(pid), 지원기관(sponsor), 개시일(start_date), 종료일(end_date), 예산액 (budget)이있다.
5~11번 : 관계로 개체들을 연결
< 개체 목록 >
교수(Professor) 학과(Department) 대학원생(Graduate) 과제(Project)
⑤ 학과마다그 학과를 운영(run)하는 교수(학과장이라고 한다)가 한명씩 있다.
해석 : 학과에는 학과장이 한명 있을수 밖에 없으므로 1:1관계이다.
⑥ 한 교수가 여러학과에서 근무(work-dept)할 수 있는데, 이때각 학과별로 참여백분율(pct_time)이 기록된다.
해석 : 교수가 여러학과에서 근무할 수 있다.
학과 한개에는 여러명의 교수가 존재할 수 있다.
즉 교수:학과 는 N대 M관계이다.
참여백분율 개체가 아니므로 속성으로서 연결한다.
⑦ 대학원생에게는 학위 과정을 밟을 전공학과(major)가 하나씩 있다.
해석 : 학과(Department) 는 여러명의 대학원생(Graduate)을 포함할 수 있으므로
학과 : 대학원생은 N:1의 관계이다.
⑧ 대학원생에게는 어떤과목을 들으면좋을지 조언(advisor)해주는 선임대학원생(학생조언자라고 한다)이있다.
해석 : 대학원생이 대학원생에게 조언해주는 것이므로 1진관계 또는 순환적 관계이다.
⑨ 과제는 한 교수(연구책임자라고 한다)에의해 관리(manage)된다.
해석 : 과제 한개당 교수 한명이 관리한다.
교수는 여러개의 과제를 관리해줄 수 있다.
즉 과제 : 교수는 N : 1관계이다.
⑩ 과제는 한 사람 이상의 교수(공동연구책임자라고 한다)에의해 수행(work-in)된다.
해석 : 여러명의 교수가 1개의 과제에 참여할 수 있다.
교수는 과제를 여러개 수행할 수 있다.
즉 과제와 교수는 N:M관계이다.
⑪ 한 과제는 한 명이상의 대학원생(연구조교라고 한다)에의해 수행(work-prog)된다.
해석 : 과제 1개는 N명의 대학원생이 수행한다.
대학원생은 여러개의 과제를 수행할 수 있다.
즉 과제와 대학원생은 N:M관계이다.
최종 ER 다이어그램
요구사항에 맞는 정확한 다이어그램이 생성된 것을 확인할 수 있다.
ER다이어그램을 바탕으로 관계 데이터 모델을 만들어보자.
관계 데이터 모델
외래키로 참조하는 것도 반영해야한다.
외래키 반영을 위해 다시 관계 정보를 보자
⑤ 학과마다그 학과를 운영(run)하는 교수(학과장이라고 한다)가 한명씩 있다.
⑥ 한 교수가 여러학과에서 근무(work-dept)할 수 있는데, 이때각 학과별로 참여백분율(pct_time)이 기록된다.
⑦ 대학원생에게는 학위 과정을 밟을 전공학과(major)가하나씩 있다.
⑧ 대학원생에게는 어떤과목을 들으면좋을지 조언(advisor)해주는 선임대학원생(학생조언자라고 한다)이있다.
⑨ 과제는 한 교수(연구책임자라고 한다)에의해 관리(manage)된다.
⑩ 과제는 한 사람이상의 교수(공동연구책임자라고 한다)에의해 수행(work-in)된다.
⑪ 한 과제는 한 명이상의 대학원생(연구조교라고 한다)에의해 수행(work-prog)된다.
(1:1), (1:N)의 관계를 외래키로 표현한다.
(1:1), (1:N)의 관계는 다음과 같다.
- Proffessor - run - Department
- Department - major - Graduate
- Proffessor - manage - Project
- Graduate - advisor - Graduate
개체
Professor (ssn, name, age, rank. speciallity)
Department (dno, dname, office, run_prof_ssn)
// run_prof_ssn : Department(학과)를 운영하는 proffesor(교수님)의 고유번호 ssn
Graduate (ssn, name, age, deg_prog, dno , adv_grad_ssn )
// dno : Graduate(대학원생)이 major(전공) 삼고 있는 Department(학과)의 고유번호 dno
// adv_grad_ssn : advise(조언) 해주는 Graduate(대학원생)의 고유번호 ssn
Project (pid, sponsor, start_date, end_date, budget, manage_prof_ssn)
// manage_prof_ssn : Project(과제)를 관리하는 Professor(교수님)의 고유번호 ssn
(M:N) 일 경우 개체가 아닌 관계로 묶어준다.
(M:N) 관계는 다음과 같다.
- Proffessor - work_dept - Department
- Project - work_in - Professor
- Project - work_prog - Graduate
(M:N) 일 경우, 교차 테이블을 생성해야한다.
관계
M:N으로 연결된 각 테이블의 PK를 외래키로 참조, 추가 속성을 추가해주면 끝난다.
work-dept(professor_ssn, dno, pct_time)
work-in(professor_ssn, pid)
work_prog(graduate_ssn, pid)
'백엔드 > 데이터베이스' 카테고리의 다른 글
[MySQL] GROUP BY, PARTITION BY 차이점 (1) | 2022.12.05 |
---|---|
[DB] 트랜잭션(Transaction) 개념, 예제 (0) | 2022.10.13 |
[데이터모델링] ER 모델 , 관계 데이터 모델로 사상 (0) | 2021.06.05 |
[데이터모델링] E-R 다이어그램 - web에서 그리기 (2) | 2021.06.05 |
[데이터모델링] ER모델 개념, IE표기법 (0) | 2021.06.05 |