정규화

데이터베이스에서 항상 출제되는 문제 중 하나가 정규화, 정규형이다.

데이터베이스를 잘못 설계하면 데이터 중복이 발생하여 이상 현상이 발생한다.

이상의 종류는 삭제/삽입/갱신 이상이 있다.

이상의 원인은 종속 관계가 있는 애트리뷰트들을 하나의 릴레이션으로 나타낼 때 발생한다.

이런 이상 현상을 해결하는 방법은 종속성을 분석하여 하나의 릴레이션에 하나의 종속성만 존재하도록 분해하는 것이다.

정규화(Normalization)는 데이터 중복성을 최소화하기 위해 릴레이션을 분해하는 과정을 말한다.


정규화 문제는 BCNF까지만 출제되었고 제4 정규형, 제5 정규형 문제는 나오지 않았다.


정규화와 정규형

정규화와 정규형을 혼동하는 경우가 많다.


정규화는 정규형을 구하는 과정이다.

정규형은 정규화를 수행한 결과이다.


즉, 정규화를 수행한 결과 정규형이 구해진다. 

제1정규화를 수행하면 제1정규형이 만들어지고, 제3정규화의 결과가 제3정규형이다.


정규형의 종류

 정규형 종류

 정의

 정규화 과정

 제1정규형

 (1NF: First Normal Form)

 한 릴레이션에 속한 모든 도메인이 원자값(atomic value)으로만 구성

 도메인이 원자값을 가지도록 분해.

 제2정규형

 (2NF: 2 Normal Form)

 한 릴레이션이 1NF이고 기본키가 아닌 모든 애트리뷰트가 기본키에 완전함수 종속

 부분함수 종속 제거

 제3정규형

 (3NF: 3 Normal Form)

 한 릴레이션이 2NF이고 기본키가 아닌 모든 애트리뷰트가 

 기본키에 이행함수 종속이 아니다.

 이행함수 종속 제거

 보이스코드 정규형

 (BCNF: Boyce Codd 

           Normal Form)

 한 릴레이션이 3NF이고 모든 결정자(determinant)가 후보키(candidate key)이다.

 결정자함수 종속 제거

 제4정규형

 (4NF: 4 Normal Form)

 한 릴레이션에 A->>B를 만족하는 애트리뷰트 부분집합 A,B가 존재할 때 이 릴레이션의 모든 애트리뷰트들이 A에 함수종속.

 다치 종속 제거

  제5정규형

 (5NF: 5 Normal Form)

 한 릴레이션에 존재하는 모든 조인 종속이 릴레이션의 후보키를 통해서만 성립.

 조인종속 제거


* 다치종속의 정의

A,B,C를 릴레이션의 애트리뷰트의 부분집합으로 가정할 때 애트리뷰트 쌍 (A,C) 값에 대응되는 B 값의 집합이 A 값에만 종속되고 C 값에는 독립이면 B는 A에 다치종속이라 한다. A ->>B로 표기


* 조인 종속의 정의

한 릴레이션의  애크리뷰트 부분 집합 A,B, .. Z가 있다고 가정한다.

이 릴레이션이 프로젝셔 A,B, .. Z를 모두 조인한 것과 같다면 조인종속을 만족한다.


정규형 관련 문제

함수 종속성과 정규형 관련된 문제는 최소 1문제 이상 출제된다.

가장  쉬운 경우에 해당하는 2010년 기출문제 65번을 보자.

 

65. 다음과 같은 테이블과 함수적 종속성이 존재할 때, 3정규형에 만족하는 테이블 구조로 가장 잘 분할된 것은?


S

S#

STATUS

CITY

S3

30

Paris

S5

30

Athens

 

 

S# -> STATUS, S# -> CITY, CITY -> STATUS

 

① S1(S#, STATUS), S2(STATUS, CITY)

② S1(S#, CITY), S2(STATUS, CITY)

③ S1(S#, STATUS), S2(S#, CITY)

④ S1(S#, CITY), S2(S#, CITY, STATUS)


상당히 평이한 문제이다.

테이블 S 자체를 볼 필요는 없다. 그보다 함수 종속성을 나타내는 것에 집중하면 된다.


함수적 종속성 표시

문제에 주어진 테이블에 함수적 종속성을 아래 그림처럼 표시한다.

붉은 사각형은 기본키를 나타낸다.


이행함수 종속 파악 및 해결

. 기본키가 단일 애트리뷰트로 되어 있고 다른 애트리뷰트들을 모두 완전함수 종속하므로(부분함수 종속이 없다.) 이 테이블은 제2정규형이다.

. S# -> CITY, CITY -> STATUS 이므로 S# -> STATUS인 이행함수 종속이 존재한다.

. 이행함수 종속을 해결하기 위해 테이블 S를 분해한다.

  분해는 기본키 S#를 기준으로 S# -> CITY과 일반 속성 CITY 기준으로 CITY -> STATUS로 나눈다.


[정답]

S1(S#, CITY), S2(CITY, STATUS)

시사점

평이한 문제이다.

제3정규형으로 분해하라고 했으니  이행함수 종속만 파악하면 된다.

시험이 어려워지는 경향으로 보아 이런 문제는 다시 나오지 않을 것이다.

보다 복잡한 문제로 출제될 것이다.

저작자 표시 비영리 변경 금지
신고

+ Recent posts

티스토리 툴바