개발/CS

[DB] 데이터베이스 정규형 1NF, 2NF, 3NF (Normal Form)

zz132456zz 2022. 5. 11. 01:23
728x90

정규형이란 릴레이션이 정규화된 정도이다.

 

정규형은 제1 정규형 ~ 제5 정규형과 보이스/코드 정규형까지 포함하면 총 6가지 정규형이 있다.

 

각 정규형마다 제약조건이 존재하고 정규형의 차수가 높아질수록 요구되는 제약조건이 많아지고 엄격해진다.

즉 정규형의 차수가 높아질수록 데이터 중복이 줄어 이상 현상이 발생하지 않을 가능성이 커진다.

 

그렇다고 항상 릴레이션을 제5 정규형을 만족하도록 구성해야 하는가 하면 그것은 아닐 것이다.

릴레이션의 특성을 고려하여 적합한 정규형은 선택해서 적용해야 한다.

 

간단하게 제1 정규형부터 제3 정규형까지 알아보자.

 

 

제1 정규형 (1NF)

- 릴레이션의 모든 속성의 도메인이 원자 값만으로 구성되어 있어야 한다.

 

제1 정규형만 만족한다면 데이터의 중복으로 인해 이상 현상이 발생할 수 있다.

기본키에 완전 함수 종속되지 못한 칼럼이 있다면 갱신, 삭제, 삽입 이상이 일어날 가능성이 있다.

이를 해결하기 위해 부분 함수 종속을 제거한다면 이것이 제2 정규형을 만족한다.

 

 

제2 정규형 (2NF)

- 릴레이션이 제1 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되어야 한다.

 

제2 정규형을 만족한다고 하더라도 이행적 함수 종속이 존재하면 이상 현상이 일어날 수 있다.

 

이행적 함수 종속으로 일어날 수 있는 이상현상을 쉽게 설명하자면 A가 B를 결정하고 B가 C를 결정하면 A가 C를 결정할 수 있기 때문에 A, B, C가 같은 릴레이션에 있다면 B->C의 데이터가 변경될 때 릴레이션에 해당하는 모든 데이터가 변경되지 않는다면 데이터 불일치로 인한 갱신 이상이 발생할 수 있다.

 

그래서 이를 해결하기 위해 이행적 함수 종속을 제거하도록 릴레이션을 분해하면 제3 정규형을 만족하게 된다.

 

 

제3 정규형 (3NF)

- 릴레이션이 제2 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속되지 않아야 한다.

 

728x90