본문 바로가기

Library/Database

정규형(Normal Form)

어떤 관계 스키마가 주어졌을 때, 이 스키마가 좋은 설계인지, 혹은 그렇지 않으면 여러 개의 더 작은 관계들로 분해해야 하는지 판단할 필요가 있다. 따라서, 좋은 설계가 어떤 것인지 판단할 수 있는 기준이 필요한데, 이는 현재 주어진 스키마로부터 발생할 수 있는 문제점들이 무엇인지를 이해하는 것으로부터 출발한다. 이러한 기준을 제공하기 위해서 몇 개의 유용한 정규형(normal form)이 제안되었다.

FD(functional dependency)에 기반한 정규형들은 제1정규형(first normal form : 1NF), 제2정규형(second normal form : 2NF), 제3정규형(third normal form : 3NF), 보이스-코드 정규형(Boyce-Codd normal form : BCNF)의 네 가지가 있다. 이들 정규형들은 점차적으로 뒤의 정규형으로 갈수록 제약 조건이 많아진다. 즉, BCNF에 속하는 모든 관계들은 역시 3NF에 속하며, 3NF에 속하는 모든 관계들 2NF에 속하고, 2NF에 속하는 모든 관계들은 1NF에 속한다. 여기서 가장 기본적인 제1정규형은 다음과 같은 제약 조건을 가지고 있다. 어떤 관계에서 모든 각 속성(attribute)에 원자 값(atomic value)만 반드시 허용하는 경우(즉, 리스트 혹은 집합 값들과 같이 여러 개의 값들이 허용이 안 되는 경우), 이 관계를 제1정규형이라 한다.

그렇다면, 정규형에서 FD는 어떤 역할을 하는가? 예를 들어, ABC라는 속성으로 구성된 관계 스키마 R을 생각해 보자. 여기서 어떠한 제약조건들도 전혀 주어지지 않았다고 가정하면, R의 튜플들이 어떠한 값을 갖든지 이는 정당한 인스턴스가 될 것이며, 중복 또한 발생할 가능성이 없을 것이다. 반면, A → B와 같은 FD가 주어졌다고 하자. 이때, A에 대해 동일한 값을 갖는 튜플들이 여러 개 있다고 한다면, 이들 튜플들 역시 B에 대해서도 역시 동일한 값을 가져야 할 것이다. 따라서, 이러한 FD 정보로부터 중복이 발생할 가능성이 있다는 것을 예측할 수 있다. 그리고, 더 많은 제약조건들이 주어진다면, 이것으로부터 좀 더 많은 중복 가능성을 알아낼 수 있을 것이다.