[DBMS] 정규화

Zoe·2022년 5월 31일
0

DBMS

목록 보기
2/3

정규화


✅ Normalization

  • 너무 조각조각(디컴포지션decomposition) 내놓은 것을 가지고 조인해서 정보를 찾으려고 했지만 원래 데이터보다 많아짐 -> 로시 디컴포지션(lossy decomposition)?
  • 문제가 생길 때마다 자르는 것이 노멀라이재이션

✅ 제1정규형 (1NF)

  • 모든 속성값이 원잣값으로 구성된 제1정규형 릴레이션
  • 프라이머리키 당 하나씩만 들어가게

✅ 제2정규형 (2NF)

  • 부분 함수의 종속성을 제거
  • 어떤 속성이 문제가 됨 ? 프라이머리키에 굳이 안 붙어도 되는데 딸려있는 애
  • 함수 종속 : ??, (학번, 이름) -> 부분함수종속임. 학번과 이름을 따로 떼어내도 됨 -> 삭제 이상이 생길 수 있음./(학번, 과목명, 성적)-> 꼭 둘다 있어야 결정나는 애는 성적
  • 프라이머리키에 속하지 않는 속성들을 체크 : 완전함수 종속인지.
  • 삽입 삭제 갱신 이상...?

✅ 제3정규형 (3NF)

  • 이행적 함수 종속이 생겨나면 또 문제됨 : 잘라내야 됨
  • a->b->c->이면 a->c인 경우 : a->b / b->c로 자르기
  • 갱신 이상 : 하나를 바꾸면 다른 것과 모순이 생김
  • 삭제 이상 : 지도 교수를 취소하면 교수님의 모든 정보가 갑자기 사라짐.

✅ 정규화 예제

1️⃣ 자동차 부품

제1정규형

  • 프라이머리키 : (부품번호, 공급자번호)
  • 펑셔널 디펜던시 : 공급자번호를 알면 소재지를 앎(공급자번호->소재지), (공급자번호->운송거리), (공급자번호, 부품번호 -> 수량), (소재지 -> 운송거리)

제2정규형

  • 완전 함수 종속 : (공급자번호, 부품번호, 수량)
  • 부분 함수 종속 : (공급자번호, 소재지, 운송거리)

제3정규형

  • 이행적 함수 종속 : (공급자번호, 소재지), (소재지, 운송거리)
  • (공급자번호, 부품번호, 수량)

✅ BCNF (Boyce-Codd Normal Form)

  • 후보키가 아닌 결정자를 제거
  • 무손실 분해(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) 이렇게 잘라야 맞음
profile
iOS 개발자😺

0개의 댓글