domsam - IT 기술 블로그

제3정규형 (Third Normal Form) 본문

SQL/정규형

제3정규형 (Third Normal Form)

domsam 2025. 2. 21. 14:01
반응형

제3정규형은 이행적 종속성과 관련 있다. 만약 속성 중에 Y가 X에 종속되고 Z가 Y에 종속되면 Z는 X에도 종속된다고 추론하는 것을 이행적 종속성이라 한다. 이 때 Y는 일반 속성이다.

FD: X → Y → Z

일반 속성(비식별 속성) 간의 종속 관계를 분해하면 제3정규형이 된다. 일반 속성 간에는 서로 직접 종속될 수 없으므로 함수 종속 관계가 없어야 한다. 그림(1)과 같이 일반 속성(C, D) 사이에 결정자, 종속자 역할을 하는 속성이 존재하는 릴레이션은 제3정규화의 대상이 된다. 속성 C는 일반 속성이면서 D의 결정자이기도 하다. 속성 D는 종속자이면서 주 식별자의 이행 종속 속성이다. 즉, 속성 D는 A, B 속성만으로는 하나만 결정될 수 없었고 C가 있기 때문에 하나만 결정될 수 있기에 간접 종속돼 있다. 

그림(1) 이행 종속으로 제3정규형 위배

 

쉽게 생각해서 일반 속성 중에 결정자 역할을 하는 속성이 있는지 살펴보면 된다. (보통은 FK가 그런 역할을 할 수 있다.)
제3정규화를 진행하면 아래와 같다.

  • 엔터티1: #A, #B, C
  • 엔터티2: #C, D

 

그림(2)에서 주문 엔터티의 일반 속성인 고객ID와 고객명이 함수 종속 관계이다. 즉, 고객ID를 알면 고객 이름이 하나만 결정되므로 고객명은 고객ID에 종속되어 있다. 

그림(2) 이행 종속이 발생한 모델과 릴레이션

 

후보 식별자가 아닌 일반 속성 간의 종속이 발생했으므로 고객명 속성은 주문 엔터티에서 제거하고 다른 엔터티를 만들어야 한다. 그림(3)처럼 고객 엔터티를 생성하고 고객명 속성을 추가한다. 그리고 고객 엔터티와 주문 엔터티를 일대다(1:M) 관계로 생성한다. 

그림(3) 제3정규형 모델과 릴레이션