맨위로가기

제3정규형

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

제3 정규형(3NF)은 데이터베이스 정규화에서 사용되는 정규형으로, 1971년 E.F. 코드에 의해 정의되었다. 3NF는 테이블이 제2 정규형(2NF)에 속하고, 비-기본 속성이 기본 키에 대해 전이적으로 종속되지 않아야 한다. 3NF는 데이터베이스에서 데이터 중복을 줄이고 데이터 무결성을 유지하는 데 기여하지만, 특정 상황에서는 갱신, 삽입, 삭제 이상 현상이 발생할 수 있으며, 이러한 경우 보이스-코드 정규형(BCNF)이나 더 높은 정규형을 고려할 수 있다.

더 읽어볼만한 페이지

  • 데이터베이스 정규화 - 단일 진실 공급원
    단일 진실 공급원(SSOT)은 데이터 중복을 줄이고 일관성을 유지하여 의사 결정 및 운영 효율성을 향상시키기 위해 특정 정보에 대한 단 하나의 신뢰할 수 있는 출처를 만드는 개념이다.
  • 데이터베이스 정규화 - 제2정규형
    제2 정규형은 데이터베이스 정규화 단계로서, 테이블 속성들이 기본키에 완전 종속되도록 하여 데이터 중복과 갱신 이상을 줄이고 데이터 일관성을 유지하는 것을 목표로 합니다.
제3정규형
개요
유형데이터베이스 정규화
목표데이터 중복 최소화 및 데이터 무결성 보장
선행 조건제2정규형 만족
결과모든 비주요 속성이 주요 속성에 완전 종속
상세 내용
정의모든 비주요 속성이 주요 속성에 이행적으로 종속되지 않는 정규형
설명제2정규형을 만족하고, 비주요 속성 간의 종속성을 제거하여 데이터 중복을 줄임
테이블의 모든 속성이 기본 키에 종속되도록 함
목적데이터 중복 감소
데이터 무결성 강화
데이터베이스 유지보수 효율성 향상
예시주문 테이블에서 고객 정보와 주문 정보를 분리하여 관리
고려 사항
장점데이터 중복 감소로 인한 저장 공간 효율성 증가
데이터 변경 시 일관성 유지 용이
데이터베이스 설계 단순화 및 유지보수 용이
단점테이블 분할로 인한 조인 연산 증가
쿼리 복잡도 증가 가능성
데이터 검색 성능 저하 가능성

2. 제3 정규형 (3NF)의 정의

제3 정규형(Third Normal Form, 3NF)은 관계형 데이터베이스 설계 시 데이터 중복을 최소화하고 데이터 무결성을 강화하기 위해 사용되는 데이터베이스 정규화의 한 단계이다. 3NF는 1971년 E. F. 코드에 의해 처음 정의되었다.[2]

테이블이 3NF를 만족하기 위한 조건은 여러 방식으로 정의될 수 있다. 대표적으로 코드가 처음 제시한 정의와, 이후 1982년 카를로 자니올로가 제시한 동등한 정의가 있다.[5][6] 두 정의 모두 특정 함수적 종속성 조건을 만족해야 함을 명시하며, 세부적인 내용은 하위 섹션에서 설명한다.

2. 1. 코드의 정의

제3 정규형(3NF)은 데이터베이스 정규화에서 사용되는 정규형이다. 3NF는 1971년 E. F. 코드에 의해 처음 정의되었다.[2]

코드의 정의에 따르면, 어떤 테이블이 제3 정규형을 만족하려면 다음 두 가지 조건을 모두 충족해야 한다.

  • 테이블이 제2 정규형 (2NF)을 만족해야 한다.
  • 테이블 내의 어떤 비-기본 속성도 기본 키에 대해 전이적으로 종속되어서는 안 된다.


여기서 ''비-기본 속성''이란 테이블의 어떤 후보키에도 포함되지 않는 속성을 말한다.[3] 전이적 종속성이란, 예를 들어 X가 Y를 결정하고 (''X'' → ''Y''), Y가 Z를 결정할 때 (''Y'' → ''Z''), 결과적으로 X가 Z를 결정하게 되는 (''X'' → ''Z'') 함수적 종속성 관계를 의미한다. 다만, 이 관계가 성립하려면 Y가 X를 결정하는 관계(''Y'' → ''X'')는 성립하지 않아야 한다.[4]

2. 2. 자니올로의 정의

코드의 정의와 동등하지만 다르게 표현된 3NF 정의는 1982년 카를로 자니올로에 의해 제시되었다. 이 정의에 따르면, 테이블은 각 함수적 종속성 ''X'' → ''Y''에 대해 다음 조건 중 적어도 하나가 충족될 때 3NF에 속한다.[5][6]

  • ''X''가 ''Y''를 포함한다 (즉, ''Y''는 ''X''의 부분 집합이며, ''X'' → ''Y''는 자명한 함수적 종속성이다).
  • ''X''는 슈퍼키이다.
  • ''Y'' \ ''X''의 모든 요소 (즉, Y와 X의 차집합에 속하는 모든 속성)는 '''기본 속성'''이다 (즉, 일부 후보키에 포함된다).


간단히 말해, 자니올로의 정의는 관계 내 모든 비자명한 함수적 종속성 ''X'' → ''Y''에 대해, ''X''가 슈퍼키이거나 또는 ''Y'' \ ''X''가 기본 속성만으로 구성될 경우 해당 관계가 3NF에 속한다고 본다. 이 정의는 3NF와 더 엄격한 보이스-코드 정규형 (BCNF)의 차이를 명확히 보여준다. BCNF는 자니올로 정의의 세 번째 조건("''Y'' \ ''X''의 모든 요소는 기본 속성이다")을 허용하지 않는다.

자니올로가 1982년에 제시한 이 정의는 코드의 정의와 동등함을 다음과 같이 보일 수 있다.[5][6] ''X'' → ''A''가 비자명한 함수적 종속성(즉, ''X''가 ''A''를 포함하지 않음)이고 ''A''가 비-기본 속성이라고 가정하자. 또한 ''Y''를 관계 R의 후보키라고 하면, ''Y'' → ''X''가 성립한다. 코드의 정의에 따르면, 비-기본 속성 ''A''는 기본 키 ''Y''에 대해 전이적으로 종속되어서는 안 된다. 만약 ''X''가 슈퍼키가 아니라면, ''Y'' → ''X''이고 ''X'' → ''A''이므로 ''Y'' → ''A''라는 전이적 종속성이 성립한다. 따라서 코드의 정의는 비-기본 속성 ''A''에 대한 비자명 함수적 종속성 ''X'' → ''A''가 존재할 경우, ''X''가 반드시 슈퍼키여야 함을 의미한다. 자니올로의 정의에서는 ''X''가 슈퍼키이거나 ''A''가 기본 속성이어야 한다고 명시하는데, ''A''가 비-기본 속성인 경우에는 결국 ''X''가 슈퍼키여야 한다는 조건만 남게 되어 코드의 정의와 동등해진다.

3. "키, 전체 키, 그리고 키 외에는 아무것도 아닌 것"

빌 켄트는 정규형 중 하나인 3NF의 정의를 법정에서의 전통적인 맹세에 비유하여 다음과 같이 표현했다: "[모든] 비키(non-key) 속성은 키(the key), 전체 키(the whole key), 그리고 키 외에는 아무것도 아닌 것(nothing but the key)에 대한 사실을 제공해야 한다".[7] 이는 "코드님, 도와주세요"라는 맹세를 덧붙여 변형되기도 한다.[8]

이 표현은 3NF를 이해하는 데 도움을 준다.


  • "키"의 존재를 요구하는 것은 테이블이 1NF을 만족해야 함을 의미한다.
  • 비키 속성이 "전체 키"에 의존해야 한다는 요구는 2NF을 만족해야 함을 의미한다. 즉, 복합 키의 일부가 아닌 전체에 종속되어야 한다.
  • 비키 속성이 "키 외에는 아무것도 아닌 것"에 의존해야 한다는 추가 요구는 3NF를 만족해야 함을 의미한다. 이는 키가 아닌 속성에 종속되어서는 안 된다는 뜻이다(즉, 전이 종속성이 없어야 한다).


이 문구는 3NF를 기억하기 위한 유용한 방법이지만, 테이블의 모든 후보 키가 아닌 단 하나의 키만을 언급하기 때문에 2NF와 3NF를 만족시키기 위한 필요 조건일 뿐 충분 조건은 아니다. 2NF와 3NF는 테이블에 존재하는 ''모든'' 후보 키에 대해 적용되어야 한다.

크리스 데이트는 켄트의 요약을 3NF에 대한 "직관적으로 매력적인 특성"이라고 평가하며, 약간 수정하여 더 강력한 보이스-코드 정규형(BCNF)의 정의로 사용할 수 있다고 언급했다: "각 속성은 키, 전체 키, 그리고 키 외에는 아무것도 아닌 것에 대한 사실을 나타내야 한다."[9] 켄트의 3NF 정의는 비키 속성만이 키에 의존해야 한다고 명시하는 반면, 데이트의 BCNF 정의는 키의 일부인 프라임 속성을 포함한 모든 속성이 키에 완전하게 함수적으로 종속되어야 함을 요구하므로 더 강력하다. 프라임 속성은 키 자체의 일부이므로 키에 대한 사실을 나타내는 것으로 간주된다. (단, 이 규칙은 함수적으로 종속된 속성에만 적용된다. 모든 속성에 적용하면 복합 후보 키 자체가 금지될 수 있다.)

다음은 3NF의 요구 사항을 만족하지 못하는 테이블의 예시이다.

토너먼트 우승자
토너먼트연도우승자우승자 생년월일
인디애나 인비테이셔널1998알 프레드릭슨1975년 7월 21일
클리블랜드 오픈1999밥 앨버트슨1968년 9월 28일
데스 모인스 마스터스1999알 프레드릭슨1975년 7월 21일
인디애나 인비테이셔널1999칩 마스터슨1977년 3월 14일



이 테이블에서 각 행은 특정 연도의 토너먼트 우승자를 나타내므로, {토너먼트, 연도}는 행을 고유하게 식별하는 후보 키이다. 그러나 이 테이블은 3NF를 위반한다. 왜냐하면 비키 속성인 '우승자 생년월일'이 후보 키 {토너먼트, 연도}에 직접 종속되지 않고, 다른 비키 속성인 '우승자'를 통해 전이적으로 종속되기 때문이다. 즉, {토너먼트, 연도} → 우승자 → 우승자 생년월일의 종속 관계가 성립한다. 이러한 구조는 '우승자 생년월일' 정보가 '우승자' 정보에 따라 중복 저장될 수 있으며, 만약 동일한 우승자의 생년월일이 잘못 입력될 경우 데이터의 논리적 불일치가 발생할 수 있다.

3NF를 만족시키면서 동일한 정보를 표현하려면 테이블을 두 개로 분할해야 한다.

토너먼트 우승자
토너먼트연도우승자
인디애나 인비테이셔널1998알 프레드릭슨
클리블랜드 오픈1999밥 앨버트슨
데스 모인스 마스터스1999알 프레드릭슨
인디애나 인비테이셔널1999칩 마스터슨



우승자 생년월일
우승자생년월일
칩 마스터슨1977년 3월 14일
알 프레드릭슨1975년 7월 21일
밥 앨버트슨1968년 9월 28일



이렇게 테이블을 분할하면 '우승자 생년월일' 테이블에서 '우승자' 속성이 후보 키가 되므로, 각 우승자에 대해 단 하나의 생년월일만 저장할 수 있게 된다. 이를 통해 데이터 중복 및 업데이트 이상 문제를 해결하고 데이터 무결성을 유지할 수 있다.

4. 제3 정규형 (3NF) 예제

다음은 2NF는 만족하지만 3NF는 만족하지 못하는 테이블과 이를 3NF로 분해한 예시이다.

대회 우승자 (3NF 위반)
대회연도우승자우승자 생년 월일
Des Moines Masters1998Chip Masterson14 March 1977
Indiana Invitational1998Al Fredrickson21 July 1975
Cleveland Open1999Bob Albertson28 September 1968
Des Moines Masters1999Al Fredrickson21 July 1975
Indiana Invitational1999Chip Masterson14 March 1977



위 테이블을 3NF로 변형하면 다음과 같이 두 개의 테이블로 분해된다.

대회 우승자 (3NF)
대회연도우승자
Des Moines Masters1998Chip Masterson
Indiana Invitational1998Al Fredrickson
Cleveland Open1999Bob Albertson
Des Moines Masters1999Al Fredrickson
Indiana Invitational1999Chip Masterson



우승자 생년 월일 (3NF)
우승자우승자 생년 월일
Chip Masterson14 March 1977
Al Fredrickson21 July 1975
Bob Albertson28 September 1968


4. 1. 3NF 위반 예시

다음 테이블은 2NF는 만족하지만 3NF는 만족하지 못하는 예시이다. 이 테이블에서 {대회, 연도}는 후보 키이다.

대회 우승자 (3NF 위반)
대회연도우승자우승자 생년 월일
Des Moines Masters1998Chip Masterson14 March 1977
Indiana Invitational1998Al Fredrickson21 July 1975
Cleveland Open1999Bob Albertson28 September 1968
Des Moines Masters1999Al Fredrickson21 July 1975
Indiana Invitational1999Chip Masterson14 March 1977



이 테이블은 2NF를 만족한다. 모든 주요 속성이 아닌 속성("우승자", "우승자 생년 월일")은 후보 키 {대회, 연도} 전체에 완전 함수 종속되기 때문이다. 즉, {대회, 연도} → 우승자, {대회, 연도} → 우승자 생년 월일 관계가 성립한다.

하지만 이 테이블은 3NF를 만족하지 못한다. 주요 속성이 아닌 속성 간의 종속성, 즉 전이적 종속성이 존재하기 때문이다. "우승자 생년 월일"은 후보 키 {대회, 연도}에 직접 종속되지 않고, 후보 키가 아닌 속성 "우승자"에 함수 종속된다. ({대회, 연도} → 우승자 이고, 우승자 → 우승자 생년 월일)

이러한 전이적 종속성은 데이터 중복 및 갱신 이상 문제를 일으킬 수 있다. 예를 들어, Al Fredrickson의 생년월일이 변경되면 해당 정보가 포함된 모든 행을 수정해야 하는 번거로움이 발생한다.

이 테이블을 3NF로 변형하려면 전이적 종속성을 제거해야 하며, 이는 종속 관계에 따라 테이블을 분해함으로써 가능하다.

대회 우승자 (3NF 만족)
대회연도우승자
Des Moines Masters1998Chip Masterson
Indiana Invitational1998Al Fredrickson
Cleveland Open1999Bob Albertson
Des Moines Masters1999Al Fredrickson
Indiana Invitational1999Chip Masterson



우승자 생년 월일 (3NF 만족)
우승자우승자 생년 월일
Chip Masterson14 March 1977
Al Fredrickson21 July 1975
Bob Albertson28 September 1968



위와 같이 테이블을 분해하면 각 테이블은 3NF를 만족하게 된다. 첫 번째 테이블에서는 {대회, 연도}가 기본 키이고, 두 번째 테이블에서는 {우승자}가 기본 키이다. "우승자 생년 월일"은 이제 "우승자" 테이블에서 기본 키인 "우승자"에 직접 종속되므로 전이적 종속성이 제거되었다.

4. 2. 3NF 만족 예시

아래 테이블은 2NF를 만족하지만 3NF는 만족하지 못하는 예시이다. '우승자 생년 월일'은 후보 키 '대회', '연도'에 함수적으로 종속되지 않고, 기본 키가 아닌 속성(non-prime attribute)인 '우승자'에 전이적으로 종속되어 있기 때문이다.

대회 우승자 (2NF 상태)
대회연도우승자우승자 생년 월일
Des Moines Masters1998Chip Masterson14 March 1977
Indiana Invitational1998Al Fredrickson21 July 1975
Cleveland Open1999Bob Albertson28 September 1968
Des Moines Masters1999Al Fredrickson21 July 1975
Indiana Invitational1999Chip Masterson14 March 1977



이 테이블에서 전이적 종속성을 제거하여 3NF를 만족시키기 위해서는 테이블을 분리해야 한다. '우승자'와 '우승자 생년 월일' 간의 함수 종속성을 별도의 테이블로 분리하면 다음과 같이 3NF를 만족하는 두 개의 테이블로 나눌 수 있다.

대회 우승자 (3NF)
대회연도우승자
Des Moines Masters1998Chip Masterson
Indiana Invitational1998Al Fredrickson
Cleveland Open1999Bob Albertson
Des Moines Masters1999Al Fredrickson
Indiana Invitational1999Chip Masterson



우승자 생년 월일 (3NF)
우승자우승자 생년 월일
Chip Masterson14 March 1977
Al Fredrickson21 July 1975
Bob Albertson28 September 1968


5. 3NF 정규화

관계형은 항상 제3정규형(3NF)으로 분해될 수 있다. 이 분해 과정은 함수적 종속성을 보존하며, 다항 시간 내에 계산 가능하다.[10]

5. 1. 정규화 과정

모든 관계형은 제3정규형으로 분해될 수 있다. 이는 특정 관계 R을 여러 개의 투영 R1, ..., Rn으로 나누어 재구성할 수 있음을 의미하며, 이렇게 분해된 투영들의 조인 결과는 원래의 관계 R과 동일하다. 이러한 분해 방식은 함수적 종속성의 손실을 유발하지 않는다. 즉, 원래 관계 R에 존재했던 모든 함수적 종속성은 분해된 투영 R1, ..., Rn에서 유지되는 함수적 종속성으로부터 도출될 수 있다. 또한, 이러한 분해 과정은 다항 시간 내에 완료될 수 있다.[10]

제2정규형(2NF) 상태의 관계형을 제3정규형(3NF)으로 분해하기 위해서는, 해당 테이블을 정규 커버 함수적 종속성을 기준으로 나누어야 한다. 그리고 만약 원래 관계형의 후보 키 중 분해된 관계들의 부분 집합으로 표현되지 않는 것이 있다면, 해당 후보 키를 포함하는 새로운 관계형을 추가로 생성해야 한다.[11]

6. 3NF의 한계 및 추가 정규화

대부분의 제3정규형 테이블은 데이터 갱신, 삽입, 삭제 시 발생하는 이상 현상이 없다. 하지만 드물게 특정 유형의 3NF 테이블에서는 이러한 이상 현상이 나타날 수 있다. 이는 해당 테이블이 보이스-코드 정규형 (BCNF)을 만족하지 못하거나, BCNF를 만족하더라도 더 높은 수준의 정규형인 4차 정규형 (4NF) 또는 5차 정규형 (5NF)을 만족하지 못하기 때문이다.

참조

[1] 서적 Further Normalization of the Data Base Relational Model
[2] 간행물 Further Normalization of the Data Base Relational Model
[3] 서적
[4] 서적
[5] 논문 A New Normal Form for the Design of Relational Database Schemata 1982-09
[6] 서적 Database System Concepts http://www.db-book.c[...]
[7] 논문 A Simple Guide to Five Normal Forms in Relational Database Theory http://www.bkent.net[...] 1983-02
[8] 서적 Database Management Scott, Foresman 1989
[9] 서적 An Introduction to Database Systems Addison Wesley 2000
[10] 서적 Foundations of Databases http://webdam.inria.[...] Addison-Wesley 1995
[11] 웹사이트 Decomposition, 3NF, BCNF https://faculty.ksu.[...]
[12] 뉴스 Comparisons between Data Warehouse modelling techniques – Roelant Vos http://roelantvos.co[...] 2013-02-12
[13] 웹사이트 Hadoop Data Modeling Lessons https://infocus.dell[...] Dell EMC Services 2014-09-23
[14] 논문 Tidy Data https://doi.org/10.1[...] 2014-09-12



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com