Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

제3정규형(3NF) 완벽 정리 - 개념부터 변환 예제까지

3NF(제3정규형)란 무엇인가?

데이터베이스 정규화(Normalization)의 세 번째 단계가 바로 3NF(Third Normal Form, 제3정규형)입니다.

하나의 테이블이 3NF를 만족하려면 다음 두 가지 조건을 충족해야 합니다.

  • 해당 관계(relation)가 이미 2NF(제2정규형)를 만족해야 합니다.
  • 이행적 함수 종속(Transitive Functional Dependency)이 존재하지 않아야 합니다.

그럼 구체적인 예제를 통해 살펴보겠습니다.

예제 1: 3NF를 위반하는 테이블

<MovieListing>

Movie_ID
Listing_ID
Listing_Type
DVD_Price ($)
0089
007
Comedy
100
0090
003
Action
150
0091
007
Comedy
100

위 테이블은 이행적 함수 종속이 존재하기 때문에 3NF를 만족하지 않습니다.

Movie_ID -> Listing_ID
Listing_ID -> Listing_Type

즉, Listing_ID가 Movie_ID에 종속되고, Listing_Type이 다시 Listing_ID에 종속되는 구조입니다. 따라서 간접적으로 Movie_ID -> Listing_Type이라는 이행적 함수 종속이 성립하게 됩니다. 이러한 종속 관계는 데이터 중복과 이상(anomaly) 현상을 유발할 수 있으므로 제거해야 합니다.

예제 2: 3NF로 변환된 테이블

테이블을 3NF 형태로 만들려면, 테이블을 분할하여 이행적 함수 종속을 제거해야 합니다. 위의 MovieListing 테이블을 아래와 같이 두 개의 테이블로 나눌 수 있습니다.

<Movie>

Movie_ID
Listing_ID
DVD_Price ($)
0089
007
100
0090
003
150
0091
007
100

<Listing>

Listing_ID
Listing_Type
007
Comedy
003
Action
007
Comedy

이렇게 테이블을 분할하면 Listing_ID에서 Listing_Type으로의 종속 관계가 별도의 테이블로 분리되어, 더 이상 이행적 함수 종속이 발생하지 않습니다. 그 결과 두 테이블 모두 3NF를 만족하는 정규화된 테이블이 됩니다.

정리하면, 3NF는 기본키가 아닌 속성 간의 종속 관계를 제거함으로써 데이터 중복을 최소화하고 데이터 무결성을 높이는 중요한 정규화 단계입니다.