1. 1st Normal Form
- 각 tuple의 속성은 atomic하다.
- 가로, 세로 유일한 값이 단 하나로 결정된다.
2. 2nd Normal Form
- 예시를 통해 알아보자.
- 아래 table의 경우는 건물 이름과 방 넘버가 PK를 이룬다(합성키)
- trivial한 종속관계를 제외한 함수종속 관계를 나열하면 아래와 같다.
- 위의 함수종속 관계를 완전종속관계와 부분종속 관계로 구분할 수 있다.
- 완전 종속의 경우는 bldg와 room#가 모두 주어져야만 capacity가 결정되는 관계이다.
- 부분 종속의 경우를 살펴보면 bldg만 있으면 사실상 bldg_area가 결정된다. 이런 관계를 부분종속이라고 한다.
- 만약 PK가 합성키라면 모든 함수종속관계가 완전 종속 관계가 된다.
- 제2 정규형을 만족하기 위해서는 PK를 제외한 모든 attribute는 PK에 의존성을 가지고 있어야 한다.
- PK가 합성키 일때만 제2정규형을 따지게 된다.
- 즉 위의 예시는 bldg의 면적이라는 속성이 PK의 일부와만 의존관계를 가지기 때문에(PK와 의존관계x) 위의 테이블은 제2정규형을 만족하지 않는다.
- 이렇게 분해하면 제2 정규형을 만족한다.
- DB 설계에서 제2정규형 만족을 목표로 설정하지는 않는다. 그 이상의 제3, 제4정규형을 목표로 한다.
3. 3rd Normal Form
- 제3정규형을 만족하려면 기본적으로 제2정규형까지는 만족해야 한다.
- 예전에 transitive dependency를 공부한적이 있다. (이행종속)
- 후보키에 포함되는 속성을 prime attribute라고 하는데 제3 정규형을 만족하기 위해서는 nonprime attribute가 PK와 transitively dependent해서는 안된다.
- dept_name이 PK이고 함수종속관계는 아래와 같다. bldg, budget, bldg_area는 nonprime attribute이다.
- dept_name -> bldg, bldb -> bldg_area 두 종속관계가 이행종속을 이룬다.
- 따라서 위 테이블은 제3 정규형을 만족하지 않는다.
- 정보의 redundancy가 발생할 여지가 있다.
- 결과적으로 제3정규형을 만족하기 위해 분해하면 아래와 같다.
- 아래 예시를 살펴보면 prime attribute가 이행종속을 이룬다. 이 경우는 3NF에 위배되지 않는다.
- 참고로 제3정규형도 redundancy를 해소하지만 그래도 존재할 여지는 있다.
4. Boyce Code Normal Form (BCNF)
- 이전시간에 먼저 배웠으니 간단하게 정의만 짚어보자.
- nontrivial 한 함수종속관계에서 결정자는 superkey임을 만족하도록 하여 redundancy문제를 완전히 해소한다.
- 이 형태는 여러 후보키가 존재하는 상황에서도 적용이 가능하다.
5. Dependency Preservation (함수종속 보존 분해)
- db를 설계할때 goal of normalization을 정한다.
- 3NF, BCNF 둘 중 하나를 선택한다.
- 당연히 BCNF가 redundancy를 완전히 해소했으니 좋지 않냐 할수 있지만 실제로는 3NF를 사용하는데 그 이유를 알아보자.
- 우리가 테이블을 분해할때는 반드시 무손실 분해가 가능하도록 한다. 이와 더불어 함수종속 보존이 성립하도록 한다.
- 3NF는 분해시 무손실분해와 함수종속이 보존되지만 BCNF에서는 함수종속이 보존이 되지 않는다.
- 즉 BCNF는 redundacny를 해결하지만 약점이 있는 셈이다.
- R을 두가지 방법으로 분해해보자.
- 분해1을 보면 B -> C 의 기존 함수종속관계가 유지되지 않고 사라졌다.
- 이게 왜 문제가 되냐면 5391이라는 새로운 값이 입력된다고 하면 B->C를 만족하지 않음에도 불구하고 R1, R2로 쪼개진 새로운 테이블에서는 삽입에 전혀 문제가 없다.
- 이 입력 튜플이 잘못된 값임을 판단하기 위해 R1, R2를 join해봐야 하는데 이는 cost가 매우 크다.
- 반대로 분해2는 R3 테이블만 보더라도 입력 튜플이 잘못되었는지 판단이 가능하다.
- 이 예시를 보면 R1, R2로 쪼개어 3NF를 만족하도록 하는데 함수종속이 보존이 된다.
- 이번에는 3NF를 만족하는 테이블을 BCNF로 쪼개는 예시이다.
- redundancy를 해결하지만 함수종속이 보존되지 않는다.
'ComputerScience > Database' 카테고리의 다른 글
DB - 26. Webtoon DB 설계 프로젝트 (0) | 2022.02.18 |
---|---|
DB - 25. JDBC 연습 (0) | 2022.02.18 |
DB - 23. Functions and Procedures , Trigger (0) | 2021.12.06 |
DB - 22. Intermediate SQL 2 (0) | 2021.12.05 |
DB - 21. Integrity Constraints (0) | 2021.12.01 |