- 릴레이션 Book(booktitle, authorname, booktype, listprice, authorgorup, publisher)에서 함수 종속성은 다음과 같다.
(1) Book 릴레이션은 몇 정규형인가? 그 이유를 설명하시오.
: 제 1정규형이다. 완전 함수 종속을 만족하지 못함
(2) 정규화를 수행하시오.
R1(booktitle, booktype)
R2(booktype, listprice)
R3(authorname, authorgroup)
R4(booktitle, authorname, publisher)
- 다음은 부품과 공급자에 대한 릴레이션 part(partnumber, description, supplier, suppaddress, price)
supplier - part -> m:n 관계 존재
[풀이]
⑴ 함수 종속성을 찾아보시오.
partnumber
→description
(partnumber, supplier)
→price
supplier
→suppaddress
⑵ 릴레이션 Part는 몇 정규형인가?
- 제1정규형
- 도메인이 원자값이므로 제1정규형을 만족
- 그러나 후보키
(partnumber, supplier)
의 일부 속성인supplier
가suppaddress
를 결정하는 부분 함수 종속 문제 발생
(partnumber, supplier)
→price
supplier
→suppaddress
⑶ 다음과 같이 분해를 했을 때 각각의 릴레이션은 몇 정규형인가?
R1(partnumber, description, supplier, price)
R2(supplier, suppaddress)
- R1: 제 1정규형 (부분 함수 종속 발생)
🔽
후보키:(partnumber, supplier)
partnumber
→description
- R2: 제 3정규형
⑷ ⑶의 릴레이션에서 분해가 더 필요한가? 필요하면 분해를 수행하시오.
부분 함수 종속 문제 해결 필요
🔽
R1( partnumber ,description)
R2( partnumber, supplier, price)
R3( supplier, suppaddress)
- [병원 데이터베이스] 다음은 마당병원의 환자 처방 폼의 일부이다.
[풀이]
⑴ 처방 폼에 있는 속성을 보고 함수 종속성을 찾아내고 함수 종속성 다이어그램을 그리시오. 그리고 키를 정하시오. 필요한 경우 속성이나 데이터 값에 조건을 붙여도 좋다.
🔽
릴레이션 4개
R 1 ( 환자번호(PK) , 환자이름 , 병동이름 , 병실번호 )
R 2 ( 병동이름(PK) , 병동번호 )
R 3 ( 약번호(PK) , 약이름 , 용량, 처방 , 복용법 )
R 4 ( 환자번호(PF), 약번호(PF) , 시작일(PK) , 1일 복용단위 , 종료일 )
함수 종속성
- 환자번호,→환자이름, 병동이름, 병동번호, 병실번호,
- 약번호 → 약이름, 처방, 용량, 복용법
- (환자번호, 약번호, 시작일)→1일복용단위 , 종료일
- 병동번호→병동이름
⇒ 기본키
: (환자번호, 약번호, 시작일)
🔽
환자번호로는 환자이름, 병동이름., 병동번호, 병실번호를 설명가능하고, 약번호로는 약이름, 용량, 처방, 복용법, 그리고 환자번호, 약번호, 시작일로 1일 복용단위 종료일까지 다 설명가능
최종적으로는 키가 환자번호, 약번호, 시작일이 될수 있음
⑵ 함수 종속성 다이어그램을 보고 정규화를 수행하시오. 최소 제3정규형이 되도록 만드시오.
⑶ 정규화 후 분해된 테이블에 대하여 기본키와 외래키를 표시하시오.
정규화 수행
제 2 정규화 수행 (부분함수 종속 제거)
R 1 ( 환자번호 , 환자이름 , 병동이름 , 병동번호, 병실번호 )
R 2 ( 약번호 , 약이름 , 용량, 처방 , 복용법 )
R 3 ( 환자번호, 약번호, 시작일 , 1일 복용단위 , 종료일 )
제 3 정규화 수행 (병동이름 -> 병동번호 제거)
R 1 ( 환자번호 , 환자이름 , 병동이름 , 병실번호 )
R 2 ( 병동이름 , 병동번호 )
R 3 ( 약번호 , 약이름 , 용량, 처방 , 복용법 )
R 4 ( 환자번호, 약번호 , 시작일 , 1일 복용단위 , 종료일 )
혹시 무슨책인지 알 수 있을까요?