Determinant | Dependant |
1 | a |
2 | b |
1 → a
2 → b
위와 같다면 Valid Functional Dependency 이다
Determinant | Dependant |
1 | a |
2 | a |
Dependant 만 같다면 Determinant 가 달라도 문제가 없다
하지만
Determinant | Dependant |
1 | a |
1 | b |
Determinant 가 같은데 Dependant 가 다르다면 그건 Functional dependency 가 될 수 없다
Multi valued Attribute 가 있다면 1NF (First Normal Form) 의 조건에 부합하지 않는다
ID | 이름 | 핸드폰 번호 |
1 | 홍길동 | 12345678,34562234 |
2 | 김길동 | 7891011 |
3 | 이길동 | 44223231,54778811 |
위와 같이 1명에게 2개의 핸드폰 번호가 있다면 multi valued attribute 가 되기 때문에 1NF 의 조건에 부합하지 않는다
ID | 이름 | 번호1 | 번호2 |
1 | 홍길동 | 12345678 | 34562234 |
2 | 김길동 | 7891011 | NULL |
3 | 이길동 | 44223231 | 54778811 |
위와 같이 새로운 attribute 을 추가 해준다면 중복되는 키가 없기 때문에 1NF 의 조건을 만족한다
2NF (Second Normal form)은 1NF의 조건이 만족 되어야 하고 Partial Dependency 를 포함하면 안된다
ID | CourseID | CourseFee |
1 | IOT | 750 |
2 | IOT | 750 |
3 | IOT | 750 |
1 | AI | 850 |
2 | AI | 850 |
3 | AI | 850 |
ID 와 CourseID 2개의 키를 이용해야만 CourseFee 를 구할수 있다
그렇기에 ID와 CourseID는 Candidate key가 된다
만약 Candidate key를 이용해서 Non-Prime Attributes 를 알수있다면 그건 Partial Dependency가 된다
위의 케이스를 이용하면 CourseID → CourseFee 이기 때문에 Partial Dependency 의 조건에 만족한다
그렇기에 위 표를 2NF 의 조건에 만족 시키기 위해서는 표를 2개로 나눠야한다
ID | CourseID |
1 | IOT |
2 | IOT |
3 | IOT |
1 | AI |
2 | AI |
3 | AI |
CourseID | CourseFee |
IOT | 750 |
AI | 850 |
표를 2개로 나눴기 때문에 IOT 를 선택한 ID는 750을 내야하고 AI 를 선택한 ID는 850을 내야한다는 걸 알 수 있다
2NF 의 조건을 만족 했다면 이제 3NF 의 조건도 만족해야한다
3NF 는 2NF 의 조건을 만족해야하고 Transitive Dependency 를 포함하면 안된다
ID | 이름 | 번호 |
1 | 홍길동 | 12345678 |
2 | 김길동 | 11112222 |
3 | 이길동 | 45323413 |
위 표는 Composite Attribute, Multi Valued Attribute 를 포함하지 않고 Partial dependency 도 없다
그렇기에 1NF 그리고 2NF 의 조건 까지 만족한다
A→B (PRIME ATTRIBUTE = A, NON PRIME ATTRIBUTE = B)
B→C (NON PRIME ATTRIBUTE = B, NON PRIME ATTRIBUTE = C)
자동적으로 A→C가 된다
하지만 B→C 에서 NON PRIME ATTRIBUTE가 NON PRIME ATTRIBUTE를 가르키기 때문에 Transitive Dependency 가 된다
그렇기에 3NF 를 만족하지 않는다
BCNF 의 조건을 만족하기 위해서는
1. 3NF 를 만족해야하고
2. Functional Dependency 가 전부 X(Candidate or Superkey) → Y 형식이여야 한다