CS/Database

[데이터베이스] 8. Functional Dependencies and Normalization for Relational Databases (Ch. 14)

공영재 2023. 12. 9. 20:23

Reference - Fundamentals of Database Systems 7th edition

 

 

 

Relation DB design guidelines

 

 

저장 효율성을 위해, view level이 아닌, base relation level에서 schema를 살펴봐야한다.

1. 하나의 entity or relationship만 다뤄야한다. 또한 이들은 foreign key로만 join이 가능해야한다.

여러번 반복되는 attribute를 분해할 필요가 있고, 그 과정을 "정규화"라고 한다. 이때 뒤에 나올 Functional Dependencies 개념이 필요하다.

 

가이드라인 1. 암묵적으로, relation의 각 tuple은 하나의 entity 또는 relationship instance를 표현해야 한다.

서로 다른 entity의 attribute가 동일한 relation으로 합쳐져선 안되고, foreign key만 서로 다른 entities를 참조할 수 있어야 한다.

가이드라인 2. anomaly 문제가 생기지 않도록 스키마를 디자인해야한다.

Modification anomaly : 여러번 중복되는 attribute 변경 시 모든 row를 변경해야한다.

ex. project number 10의 name을 변경하려면 table의 모든 employee name을 변경해야 함.

Insert anomaly : employee가 할당되지 않은 project 정보(or project를 부여받지 않은 employee 정보)는 insert할 수 없다. - entity constraint 위반

Delete anomaly : project가 삭제되면 참여하는 employee 정보도 함께 삭제된다. 반대도 마찬가지.

가이드라인 3. attributes가 가능한 NULL값을 적게 가져야 한다. 즉, join시 소실되는 정보가 없는 특성을 PK로 지정해야 한다.

가이드라인 4. lossless join condition을 만족하도록 schema design : NATURAL JOIN 시 spurious tuple이 생성되어선 안된다. spurious tuple은 원래 relation엔 없는데 JOIN의 결과로 인공적으로 생성된 tuple을 말한다.

 

Functional Dependencies

 

함수 종속성이란 두 attributes set 사이 constraints, attributes를 말하며, 어떤 attributes A가 항상 다른 attributes B의 값을 결정하면 B가 A에 종속된다고 말한다.

 

제1, 제2. 제3 정규형

 

1NF는 아래 규칙을 만족해야 한다.

- 모든 attribute 값은 atomic해야 한다.

 

참고로 정규형이 올라갈수록 그 아래 정규형의 조건도 만족해야 한다.

 

2NF는 아래 규칙을 만족해야 한다.

- partial FD이 존재하지 않아야 한다.

이는 candidate key 일부에 종속되는 attribute가 있다는 얘기인데,

이는 table을 분리해서 없앨 수 있다.

 

3NF는 아래 규칙을 만족해야 한다.

- Transitive FD가 존재하지 않아야 한다.

Trnasitive FD란 키가 아닌 속성 사이의 FD를 말한다.

 

BCNF

 

BCNF는 아래 규칙을 만족해야 한다.

- candidate key가 superkey거나, candidate key가 attribute의 부분집합이 되지 않아야 한다.

학번 - 학부 - 단과 Relation이 있을때

학번은 unique하지만, 학부의 경우 단과(ex. 공대)의 부분집합이다.

attribute가 key를 결정지을 때, 제3정규형은 위배되지 않는다.

하지만 BCNF에서는 만족하지 않으므로, 이 경우 해당 attribute와 key를 분리하여 테이블로 만들고(new table의 key=attribute), 기존 테이블에선 해당 key를 제외하여 두개의 table로 만든다.

 

제4, 제5 정규형

 

4NF는 아래 규칙을 만족해야 한다.

BCNF를 만족하고 Multi-valued Dependency가 없어야 한다.

애트리뷰트 값이 여러개인 경우 이를 분리해서 여러 행으로 나누는 경우를 다치 종속이라 한다.

이같은 경우 정규화를 통해 두개의 relation으로 분해한다.

 

5NF는 아래 규칙을 만족해야 한다.

- Join Dependency가 없어야한다.

join dependency는 가능한 한 전 분해 후 다시 join했을 때 lossless한 경우를 말한다.

 

반응형
loading