1. 1NF
한 개의 column(attribute)에 한개의 원소(값)만 저장하는 것.
2.2NF
기본 키의 부분집합에 의해 결정되는 attribute가 없어야한다.
만약, 기본 키의 부분 집합에 의해 결정되는 attribute가 존재한다면,
그 부분집합을 기본키로하는 relation을 하나 만들어줘야한다.
3.3NF
기본키에 포함되지 않는 attribute끼리 의존성이 존재하면 안되는 것이다.
다시 말하면, 2NF가 진행된 테이블에서 이행적 종속을 없애는 것이다.
이행적 종속 : A → B, B → C면 A → C가 성립된다
Relation 내의 모든 종속관계에 대해서,
trivial하거나,
a가 superkey이거나,
b에서 a를 뺀 나머지가 candidate key에 포함된다면
3NF를 만족한다.
a -> b in f+에서
b에서 a를 뺀 나머지가 candidate key에 포함된다는 것이 무슨 뜻일까?
어떤 종속이 존재하는데,
이 종속대상이 candidate key의 부분집합이라는 뜻이다.
이런 상황을 생각해볼 수 있다.
A, B - > C C -> B
위의 경우 candidate key는 두개가 될 수 있는데,
(A,C)와 (A,B)이다.
이때 B - C는 B가 되고, B는 (A, B)에 포함되므로
3NF를 만족한다.
BCNF이면 3NF를 무조건 만족하지만, 역은 성립하지 않는다.
4.BCNF
아래에서 나오는 조건 2개중 하나만 만족시키면 된다.
즉, tivial하거나 a가 R의 superkey인 것이다.
tirivial의 정의는 아래를 참고하자.
tirivial의 뜻은 자명한 것을 말하는데, 여기서는 간단히 부분집합이라고 생각하면 될 거 같다.
근데 아래에서
dept_name -> building, budget은 non trivial하면서
동시에 dept_name이 superkey가 아니므로, BCNF가 되지못한다.
따라서 분해해줘야 한다.
아래는 BCNF 분해 방법이다.
'Computer Science > 데이터베이스' 카테고리의 다른 글
[DataBase] - Superkey, Candidate key, Primary key (0) | 2024.03.09 |
---|