제2정규형
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
제2정규형(2NF)은 관계형 데이터베이스 정규화의 한 형태로, 부분 함수 종속성을 제거하여 데이터 중복과 갱신 이상을 방지하는 것을 목표로 한다. 1971년 E.F. 코드에 의해 처음 정의되었으며, 제1정규형을 만족하는 릴레이션에서 후보 키의 일부분에만 종속되는 속성이 없어야 제2정규형을 만족한다. 예를 들어, 종업원 정보 테이블에서 '근무지'가 '종업원'에만 종속되고 '기술'에는 종속되지 않는 경우, 이 테이블은 2NF를 위반한다. 이러한 경우 테이블을 분해하여 갱신 이상을 해결할 수 있다. 그러나 2NF 테이블도 추이 종속성으로 인해 갱신 이상이 발생할 수 있으며, 이는 제3정규형에서 다룬다.
더 읽어볼만한 페이지
제2정규형 | |
---|---|
개요 | |
데이터베이스 정규화 단계 | 제2정규형 |
영어 | Second Normal Form (2NF) |
설명 | 데이터베이스 테이블 설계 시 중복을 줄이고 데이터 일관성을 확보하기 위한 정규화 과정의 한 단계이다. 제1정규형을 만족하는 테이블에 대해 완전 함수 종속성을 적용하여 달성된다. |
제1정규형 조건 | |
조건 | 모든 속성이 원자값을 가진다. 즉, 복합 속성이나 다중값 속성이 없어야 한다. 테이블의 각 행은 고유한 기본 키(Primary Key)를 가진다. |
제2정규형 조건 | |
조건 | 제1정규형을 만족해야 한다. 기본 키가 아닌 모든 속성은 기본 키에 완전 함수 종속적이어야 한다. 즉, 기본 키의 일부가 아닌 전체에 의존해야 한다. |
완전 함수 종속 | |
설명 | 속성 B가 속성 A에 완전 함수 종속이라는 것은, A의 어떤 부분 집합도 B를 결정할 수 없다는 의미이다. 다시 말해, B를 결정하기 위해서는 A 전체가 필요하다. |
예시 | |
예시 테이블 | "주문" 테이블이 있다고 가정해보자. 이 테이블은 "주문 ID", "고객 ID", "제품 ID", "제품명", "가격" 속성을 가진다. 여기서 기본 키는 "주문 ID", "고객 ID", "제품 ID"의 조합이다. |
문제점 | "제품명"과 "가격"은 "제품 ID"에만 의존하고, "주문 ID"나 "고객 ID"에는 의존하지 않는다. 이는 부분 함수 종속에 해당하며, 제2정규형을 위반한다. |
해결 방법 | 테이블을 두 개로 분리한다. "주문" 테이블은 "주문 ID", "고객 ID", "제품 ID" 속성을 가지고, "제품" 테이블은 "제품 ID", "제품명", "가격" 속성을 가진다. 이렇게 하면 모든 속성이 기본 키에 완전 함수 종속적이게 된다. |
필요성 | |
필요성 | 데이터 중복 감소 데이터 일관성 유지 데이터베이스 무결성 향상 데이터베이스 성능 향상 |
주의사항 | |
주의사항 | 제2정규형은 제3정규형, BCNF(Boyce-Codd Normal Form) 등으로 이어지는 더 높은 수준의 정규화를 위한 기본 단계이다. |
2. 역사
E. F. 코드가 1971년에 제2정규형을 처음 정의했다.[1]
2. 1. E. F. 코드의 정의
E. F. 코드가 1971년에 제2정규형을 처음 정의했다.[1]3. 제2정규형의 조건 및 판별
어떤 릴레이션(테이블)이 제2정규형을 만족하려면, 먼저 제1정규형을 만족해야 한다. 제2정규형은 후보 키가 아닌 속성값들이 모든 후보 키에 대해 완전 함수 종속을 만족해야 한다. 즉, 후보 키의 일부에만 종속되는 부분 함수 종속성이 없어야 한다. 부분 함수 종속성은 후보 키의 일부 속성만으로도 비(非) 키 속성을 결정할 수 있는 경우를 말하며, 이는 데이터 중복 및 갱신 이상의 원인이 된다.
예를 들어, 종업원들의 기술을 나타내는 다음 테이블을 보자.
종업원 | 기술 | 근무지 |
---|---|---|
Jones | Typing | 114 Main Street |
Jones | Shorthand | 114 Main Street |
Jones | Whittling | 114 Main Street |
Bravo | Light Cleaning | 73 Industrial Way |
Ellis | Alchemy | 73 Industrial Way |
Ellis | Flying | 73 Industrial Way |
Harrison | Light Cleaning | 73 Industrial Way |
{종업원}이나 {기술}은 각각 후보 키가 될 수 없다. {종업원}은 다수의 기술을 가질 수 있고, {기술} 또한 다수의 종업원이 보유할 수 있기 때문이다. 따라서 복합 키 {종업원, 기술}만이 후보 키가 된다.
그런데 {근무지}는 후보 키의 일부분인 {종업원}에만 종속된다. 즉, {근무지}는 {종업원, 기술} 전체에 종속되지 않고 {종업원}에만 부분적으로 종속되므로, 이 테이블은 제2정규형을 만족하지 않는다. 이로 인해 Jones의 근무지(114 Main Street)가 3번, Ellis의 근무지(73 Industrial Way)가 2번 중복되는 현상이 발생한다. 이는 갱신 이상을 야기하여, 예를 들어 Jones의 근무지를 변경할 때 일부 레코드만 수정하면 데이터 불일치가 발생할 수 있다.
이러한 디자인은 "종업원" 테이블({종업원}을 후보 키로 가짐)과 "종업원의 기술" 테이블({종업원, 기술}을 후보 키로 가짐)로 분리하여 제2정규형을 만족시킬 수 있다. 이렇게 하면 갱신 이상 문제가 해결된다.
종업원 | 근무지 |
---|---|
Jones | 114 Main Street |
Bravo | 73 Industrial Way |
Ellis | 73 Industrial Way |
Harrison | 73 Industrial Way |
종업원 | 기술 |
---|---|
Jones | Typing |
Jones | Shorthand |
Jones | Whittling |
Bravo | Light Cleaning |
Ellis | Alchemy |
Ellis | Flying |
Harrison | Light Cleaning |
하지만 모든 제2정규형 테이블이 갱신 이상으로부터 자유로운 것은 아니다. 다음은 갱신 이상이 발생할 수 있는 제2정규형 테이블의 예시이다.
대회 | 연도 | 우승자 | 우승자 생년 월일 |
---|---|---|---|
Des Moines Masters | 1998 | Chip Masterson | 14 March 1977 |
Indiana Invitational | 1998 | Al Fredrickson | 21 July 1975 |
Cleveland Open | 1999 | Bob Albertson | 28 September 1968 |
Des Moines Masters | 1999 | Al Fredrickson | 21 July 1975 |
Indiana Invitational | 1999 | Chip Masterson | 14 March 1977 |
위 테이블에서 우승자와 우승자 생년월일은 {대회, 연도} 키에 의해 결정되지만, 데이터 중복으로 인해 갱신 이상이 발생할 수 있다. 이는 우승자 생년월일 속성이 추이 종속성을 가지기 때문이다. 즉, 우승자 생년월일은 우승자에 의해 결정되고, 우승자는 다시 키 {대회, 연도}에 의해 결정된다. 이 문제는 제3정규형에서 다룬다.
4. 제1정규형에서 제2정규형으로의 변환 (분해)
1NF 관계를 2NF 관계로 만들기 위해서는 첫 번째 정규형 관계의 부분적 종속성에 있는 함수적 종속 속성을 제거하고, 해당 부분적 종속 속성이 종속된 결정자가 전체 후보 키가 되는 관계에 배치해야 한다.
== 예제 1: 직원 정보 ==
"종업원의 기술" 테이블은 제2정규형을 만족하지 않는다. 이 테이블의 후보 키는 {종업원, 기술}인데, {근무지}는 후보 키의 일부인 {종업원}에만 종속되기 때문이다.
종업원 | 기술 | 근무지 |
---|---|---|
Jones | Typing | 114 Main Street |
Jones | Shorthand | 114 Main Street |
Jones | Whittling | 114 Main Street |
Bravo | Light Cleaning | 73 Industrial Way |
Ellis | Alchemy | 73 Industrial Way |
Ellis | Flying | 73 Industrial Way |
Harrison | Light Cleaning | 73 Industrial Way |
이러한 구조는 갱신 이상을 일으킬 수 있다. 예를 들어, Jones의 근무지를 변경할 때, Jones의 모든 기술 레코드({Typing, Shorthand, Whittling})에 대해 근무지를 일일이 변경해야 한다. 만약 하나의 레코드라도 변경하지 않으면, "Jones의 근무지는 어디인가?"라는 질의에 혼동된 답을 얻게 된다.
이 테이블을 제2정규형으로 변환하려면, 데이터를 두 개의 테이블로 분해해야 한다. 하나는 {종업원}을 후보 키로 갖는 "종업원" 테이블이고, 다른 하나는 {종업원, 기술}을 후보 키로 갖는 "종업원의 기술" 테이블이다.
종업원 | 근무지 |
---|---|
Jones | 114 Main Street |
Bravo | 73 Industrial Way |
Ellis | 73 Industrial Way |
Harrison | 73 Industrial Way |
종업원 | 기술 |
---|---|
Jones | Typing |
Jones | Shorthand |
Jones | Whittling |
Bravo | Light Cleaning |
Ellis | Alchemy |
Ellis | Flying |
Harrison | Light Cleaning |
분해된 테이블들은 더 이상 갱신 이상이 발생하지 않는다.
== 예제 2: 전동 칫솔 모델 ==
다음은 제2정규형을 만족하지 않는 "전동 칫솔 모델" 테이블의 예시이다.
제조사 | 모델 | 제조사 국가 |
---|---|---|
Forte | X-Prime | 이탈리아 |
Forte | Ultraclean | 이탈리아 |
Dent-o-Fresh | EZbrush | 미국 |
Brushmaster | SuperBrush | 미국 |
Kobayashi | ST-60 | 고바야시/小林일본어 |
Hoch | Toothmaster | 독일 |
Hoch | X-Prime | 독일 |
{제조사, 모델}은 후보 키이지만, {제조사 국가}는 {제조사}에만 종속된다. 따라서 이 관계는 2NF를 위반한다.
다음은 분해된 테이블들이다.
제조사 | 모델 |
---|---|
Forte | X-Prime |
Forte | Ultraclean |
Dent-o-Fresh | EZbrush |
Brushmaster | SuperBrush |
Kobayashi | ST-60 |
Hoch | Toothmaster |
Hoch | X-Prime |
제조사 | 제조사 국가 |
---|---|
Forte | 이탈리아 |
Dent-o-Fresh | 미국 |
Brushmaster | 미국 |
Kobayashi | 일본/日本일본어 |
Hoch | 독일 |
"전동 칫솔 모델" 테이블의 후보 키는 {제조사, 모델}이고, "전동 칫솔 제조사" 테이블의 후보 키는 {제조사}이다.
4. 1. 예제 1: 직원 정보
"종업원의 기술" 테이블은 제2정규형을 만족하지 않는다. 이 테이블의 후보 키는 {종업원, 기술}인데, {근무지}는 후보 키의 일부인 {종업원}에만 종속되기 때문이다.종업원 | 기술 | 근무지 |
---|---|---|
Jones | Typing | 114 Main Street |
Jones | Shorthand | 114 Main Street |
Jones | Whittling | 114 Main Street |
Bravo | Light Cleaning | 73 Industrial Way |
Ellis | Alchemy | 73 Industrial Way |
Ellis | Flying | 73 Industrial Way |
Harrison | Light Cleaning | 73 Industrial Way |
이러한 구조는 갱신 이상을 일으킬 수 있다. 예를 들어, Jones의 근무지를 변경할 때, Jones의 모든 기술 레코드({Typing, Shorthand, Whittling})에 대해 근무지를 일일이 변경해야 한다. 만약 하나의 레코드라도 변경하지 않으면, "Jones의 근무지는 어디인가?"라는 질의에 혼동된 답을 얻게 된다.
이 테이블을 제2정규형으로 변환하려면, 데이터를 두 개의 테이블로 분해해야 한다. 하나는 {종업원}을 후보 키로 갖는 "종업원" 테이블이고, 다른 하나는 {종업원, 기술}을 후보 키로 갖는 "종업원의 기술" 테이블이다.
종업원 | 근무지 |
---|---|
Jones | 114 Main Street |
Bravo | 73 Industrial Way |
Ellis | 73 Industrial Way |
Harrison | 73 Industrial Way |
종업원 | 기술 |
---|---|
Jones | Typing |
Jones | Shorthand |
Jones | Whittling |
Bravo | Light Cleaning |
Ellis | Alchemy |
Ellis | Flying |
Harrison | Light Cleaning |
분해된 테이블들은 더 이상 갱신 이상이 발생하지 않는다.
4. 2. 예제 2: 전동 칫솔 모델
다음은 제2정규형을 만족하지 않는 "전동 칫솔 모델" 테이블의 예시이다.제조사 | 모델 | 제조사 국가 |
---|---|---|
Forte | X-Prime | 이탈리아 |
Forte | Ultraclean | 이탈리아 |
Dent-o-Fresh | EZbrush | 미국 |
Brushmaster | SuperBrush | 미국 |
Kobayashi | ST-60 | 일본 |
Hoch | Toothmaster | 독일 |
Hoch | X-Prime | 독일 |
{제조사, 모델}은 후보 키이지만, {제조사 국가}는 {제조사}에만 종속된다. 따라서 이 관계는 2NF를 위반한다.
다음은 분해된 테이블들이다.
제조사 | 모델 |
---|---|
Forte | X-Prime |
Forte | Ultraclean |
Dent-o-Fresh | EZbrush |
Brushmaster | SuperBrush |
Kobayashi | ST-60 |
Hoch | Toothmaster |
Hoch | X-Prime |
제조사 | 제조사 국가 |
---|---|
Forte | 이탈리아 |
Dent-o-Fresh | 미국 |
Brushmaster | 미국 |
Kobayashi | 일본 |
Hoch | 독일 |
"전동 칫솔 모델" 테이블의 후보 키는 {제조사, 모델}이고, "전동 칫솔 제조사" 테이블의 후보 키는 {제조사}이다.
5. 제2정규형과 갱신 이상
참조
[1]
논문
"Further Normalization of the Data Base Relational Model"
IBM Research Report RJ909
1971-08-31
[2]
논문
"Further Normalization of the Data Base Relational Model"
IBM Research Report RJ909
1971-08-31
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com