정규화
✅ Normalization
- 너무 조각조각(디컴포지션decomposition) 내놓은 것을 가지고 조인해서 정보를 찾으려고 했지만 원래 데이터보다 많아짐 -> 로시 디컴포지션(lossy decomposition)?
- 문제가 생길 때마다 자르는 것이 노멀라이재이션
✅ 제1정규형 (1NF)
- 모든 속성값이 원잣값으로 구성된 제1정규형 릴레이션
- 프라이머리키 당 하나씩만 들어가게
✅ 제2정규형 (2NF)
- 부분 함수의 종속성을 제거
- 어떤 속성이 문제가 됨 ? 프라이머리키에 굳이 안 붙어도 되는데 딸려있는 애
- 함수 종속 : ??, (학번, 이름) -> 부분함수종속임. 학번과 이름을 따로 떼어내도 됨 -> 삭제 이상이 생길 수 있음./(학번, 과목명, 성적)-> 꼭 둘다 있어야 결정나는 애는 성적
- 프라이머리키에 속하지 않는 속성들을 체크 : 완전함수 종속인지.
- 삽입 삭제 갱신 이상...?
✅ 제3정규형 (3NF)
- 이행적 함수 종속이 생겨나면 또 문제됨 : 잘라내야 됨
- a->b->c->이면 a->c인 경우 : a->b / b->c로 자르기
- 갱신 이상 : 하나를 바꾸면 다른 것과 모순이 생김
- 삭제 이상 : 지도 교수를 취소하면 교수님의 모든 정보가 갑자기 사라짐.
✅ 정규화 예제
1️⃣ 자동차 부품
제1정규형
- 프라이머리키 : (부품번호, 공급자번호)
- 펑셔널 디펜던시 : 공급자번호를 알면 소재지를 앎(공급자번호->소재지), (공급자번호->운송거리), (공급자번호, 부품번호 -> 수량), (소재지 -> 운송거리)
제2정규형
- 완전 함수 종속 : (공급자번호, 부품번호, 수량)
- 부분 함수 종속 : (공급자번호, 소재지, 운송거리)
제3정규형
- 이행적 함수 종속 : (공급자번호, 소재지), (소재지, 운송거리)
- (공급자번호, 부품번호, 수량)
- 후보키가 아닌 결정자를 제거
- 무손실 분해(lossless-join decomposition)
✅ 정규화
- 함수 종속성을 찾아내서 이상현상을 나타내고 있는 릴레이션을 분해
- 정규형이 높아질수록 이상현상은 줄어듦
- 1NF : 값이 하나씩만 들어가도록, pk->원자값
- 2NF : 2개 다필요하면 완전함수종속, 하나만 있어도 가능하면 부분함수 종속, pk에 완전함수종속
- 3NF : pk에 속하지 않는 일반 속성들끼리 비이행적 함수종속 되도록
- BCNF : 속성이 다른 속성의 결정자가 될 때
✅ 정규화 정리
7-3
- 릴레이션R(A,B,C,D)는 다음과 같은 함수 종속성 : A->B, B->C, C->D
- 후보키는 ? B->C,D지만 A를 결정할 수 없으므로 프라이머리키가 될 수 없음. A->B,C,D 이므로 A가 후보키->기본키가 됨
- 몇 정규형인가? 제1정규형만족, 제2정규형(기본키가 하나이므로)만족, 제3정규형 만족 못함, BCNF당연히 만족 못함--> 따라서 제2정규형!!
- R1(A,B,C) R2(C,D)이면 무손실분해인가? R1과 R2의 교집합이 R2를 만족하므로 무손실분해가 맞음
7-4
- 릴레이션R(A,B,C)는 다음과 같은 함수 종속성 : AB->C, C->A
- 후보키는 ? AB
- 몇 정규형인가? 제1정규형만족, 제2정규형(두개 다 필요하므로)만족, 제3정규형 만족 (AB->C이므로 비이행적임), BCNF당연히 만족 못함(??)--> 따라서 제3정규형!!
- R1(B,C) R2(A,C)이면 무손실분해인가? R1과 R2의 교집합인 C가 R2를 만족하므로 무손실분해가 맞음
7-5
- 릴레이션R(A,B,C,D)는 다음과 같은 함수 종속성 : AB->C, C->A, C->D
- 후보키는 ? AB
- 몇 정규형인가? 제1정규형만족, 제2정규형(C와 D는 AB두개 다 필요하므로)만족, 제3정규형 만족 못함(이행적 함수종속), BCNF당연히 만족 못함--> 따라서 제2정규형!!
- R1(A,B,C) R2(C,D)이면 무손실분해인가? R1과 R2의 교집합인 C가 R2를 만족하므로 무손실분해가 맞음
- (C,A) (B,C) (C,D) 이렇게 잘라야 맞음