Web/DataBase

[ Database - Intermediate ] - Functional dependency

Hyunseo😊 2023. 7. 19. 16:07

위와같이 empl_id(집합 X)가 같다면 그 empl_name ~ salary까지(집합 Y)가 같다는 즉 X에 의해 Y가 결정되고 Y는 X에 의존하는 것을 X -> Y로 표현하고 이것을 Functional dependency (FD)라고 부릅니다.

 

주의해야 할 점이 있는데, state만으로 FD를 판단해서는 안됩니다. 위와같이 {empl_name} -> {birth_date} 이렇게 하게되면 Jinho라는 동명이인이 들어왔을 떄 birth_date가 달라지기 때문이죠.

 

그리고 위와같이 dept_id를 이전에 FD에 포함하지 않았었는데, 이는 구축하려는 DB의 attribute가 관계적으로 어떤 의미(sementics)를 지닐지에 따라 달라집니다. 그 이유는 임직원이 여러개의 부서를 가질 수 있다면 X -> Y관계는 위 상황에서 성립하지 않기 때문이죠.

 

그리고 {} -> {company} 이런식으로 left-hand가 공집합이라면, 이는 compnay는 무조건 하나의 고유한 값만 가진다는 의미가 됩니다. 그리고 FD는 역관계가 성립하지 않음을 주의해야 합니다. 이는 다음 포스팅에서 DB 정규화에서 2NF를 배울텐데 이와 관련된 내용이니 유념해야 합니다.

 

그리고 right-hand가 left-hand의 부분집합이라면 trivial FD라고 합니다. Non-trivial FD는 그 반대겠죠?? 반대는 부분집합이 아닌 경우를 말합니다. 그리고 {a, b, c} -> {b, c, d} 이걸 non-trivial FD라고 하는데, {a, b, c} -> {d, e} 이렇게 하나도 속하지 않은 경우를 non-trivial FD이자 completely non-trivial FD라고 합니다.

 

그리고 X -> Y에서 X의 proper subset(진 부분집합) 중 하나라도 X -> Y이 성립하면 이를 partial FD라고 합니다. {empl_id, empl_name} -> {birth_date} 에서 left-hand에서 empl_name이 없더라고 X -> Y이 성립하기 때문에 이를 partial FD이 성립한다 라고 말할 수 있는 것이죠. 

 

그리고 모든 proper subset이 X -> Y이 되지 않는다면 이를 Full FD라고 합니다. {stu_id, class_id} -> {grade}가 있다고 해 봅시다. X의 proper subset은 {stu_id}, {class_id}, {} 가 되는데, 이 3개만으로는 {grade}를 결정할 수 없습니다. 그래서 이는 Full FD가 되는 것입니다.

 

다음에서는 이제 FD를 사용해서 DB를 정규화(normalization)을 하는 방법에 대해 보겠습니다.