DB 정규화란?
정규화 단계
알아둬야 할 용어
각 정규화 단계별 정의와 예시
Attribute의 값은 반드시 더이상 나눠질 수 없는 단일 값 이어야 한다.
ex) EMPLOYEE_ACCOUNT에서의 마지막 row.
card_id 의 값이 두 개를 가지면 단일 값이 아니다.
1NF를 만족하기 위한 방법 - 두 개의 튜플로 분리 + primary key 수정(account_id, card_id), (bank_name, account_num, card_id)
1NF를 만족한 결과의 테이블 (아래 그림)
모든 Non-prime attributes는 모든 Key에 fully functionally dependent 해야 한다.
즉, partially FD 하면 안된다. (= 복합 Key 중 어느 한가지 attribute와 non-prime 간의 FD가 존재해선 안된다)
ex) 모든 non-prime attributes (class, ratio, empl_id, empl_name) 은 account_id 만으로 의존관계가 성립한다. 따라서, paritally dependent 존재.
판단을 쉽게 하는 법 - 한가지 값만으로 이뤄진 attribute가 없다면, composite key가 존재하지 않으면 2NF를 만족한다.
2NF를 만족하기 위한 방법 - 문제가 되는 card_id의 테이블 분리
2NF를 만족한 결과의 테이블 (아래 그림)
Non-prime 간의 FD 관계가 존재하면 안된다.
정확한 정의) X->Y, Y->Z 일 때, Y,Z 가 key의 부분집합이 아니고 X->Z 관계가 성립하는 경우가 있어서는 안된다. (Transitive FD)
ex) emp_id -> empl_name 의존관계가 존재하기 때문에 3NF를 만족하지 못한다.
3NF를 만족하기 위한 방법 - 문제가 되는 emp_id, empl_name의 테이블 분리.
3NF를 만족한 결과의 테이블 (아래 그림)
모든 non-trivial FD X->Y 에서 X는 super key여야만 한다.
BCNF를 만족하기 위한 방법 - 문제가 되는 class와 bank_name를 다른 테이블로 분리.
BCNF를 만족한 결과의 테이블 (아래 그림)