제2정규형
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
제2정규형(2NF)은 관계형 데이터베이스 정규화의 한 형태로, 부분 함수 종속성을 제거하여 데이터 중복과 갱신 이상을 방지하는 것을 목표로 한다. 1971년 E.F. 코드에 의해 처음 정의되었으며, 제1정규형을 만족하는 릴레이션에서 후보 키의 일부분에만 종속되는 속성이 없어야 제2정규형을 만족한다. 예를 들어, 종업원 정보 테이블에서 '근무지'가 '종업원'에만 종속되고 '기술'에는 종속되지 않는 경우, 이 테이블은 2NF를 위반한다. 이러한 경우 테이블을 분해하여 갱신 이상을 해결할 수 있다. 그러나 2NF 테이블도 추이 종속성으로 인해 갱신 이상이 발생할 수 있으며, 이는 제3정규형에서 다룬다.
더 읽어볼만한 페이지
2. 역사
E. F. 코드가 1971년에 제2정규형을 처음 정의했다.[1]
2. 1. E. F. 코드의 정의
E. F. 코드가 1971년에 제2정규형을 처음 정의했다.[1]3. 제2정규형의 조건 및 판별
어떤 릴레이션(테이블)이 제2정규형을 만족하려면, 먼저 제1정규형을 만족해야 한다. 제2정규형은 후보 키가 아닌 속성값들이 모든 후보 키에 대해 완전 함수 종속을 만족해야 한다. 즉, 후보 키의 일부에만 종속되는 부분 함수 종속성이 없어야 한다. 부분 함수 종속성은 후보 키의 일부 속성만으로도 비(非) 키 속성을 결정할 수 있는 경우를 말하며, 이는 데이터 중복 및 갱신 이상의 원인이 된다.
예를 들어, 종업원들의 기술을 나타내는 다음 테이블을 보자.
{종업원}이나 {기술}은 각각 후보 키가 될 수 없다. {종업원}은 다수의 기술을 가질 수 있고, {기술} 또한 다수의 종업원이 보유할 수 있기 때문이다. 따라서 복합 키 {종업원, 기술}만이 후보 키가 된다.
그런데 {근무지}는 후보 키의 일부분인 {종업원}에만 종속된다. 즉, {근무지}는 {종업원, 기술} 전체에 종속되지 않고 {종업원}에만 부분적으로 종속되므로, 이 테이블은 제2정규형을 만족하지 않는다. 이로 인해 Jones의 근무지(114 Main Street)가 3번, Ellis의 근무지(73 Industrial Way)가 2번 중복되는 현상이 발생한다. 이는 갱신 이상을 야기하여, 예를 들어 Jones의 근무지를 변경할 때 일부 레코드만 수정하면 데이터 불일치가 발생할 수 있다.
이러한 디자인은 "종업원" 테이블({종업원}을 후보 키로 가짐)과 "종업원의 기술" 테이블({종업원, 기술}을 후보 키로 가짐)로 분리하여 제2정규형을 만족시킬 수 있다. 이렇게 하면 갱신 이상 문제가 해결된다.
하지만 모든 제2정규형 테이블이 갱신 이상으로부터 자유로운 것은 아니다. 다음은 갱신 이상이 발생할 수 있는 제2정규형 테이블의 예시이다.
위 테이블에서 우승자와 우승자 생년월일은 {대회, 연도} 키에 의해 결정되지만, 데이터 중복으로 인해 갱신 이상이 발생할 수 있다. 이는 우승자 생년월일 속성이 추이 종속성을 가지기 때문이다. 즉, 우승자 생년월일은 우승자에 의해 결정되고, 우승자는 다시 키 {대회, 연도}에 의해 결정된다. 이 문제는 제3정규형에서 다룬다.
4. 제1정규형에서 제2정규형으로의 변환 (분해)
1NF 관계를 2NF 관계로 만들기 위해서는 첫 번째 정규형 관계의 부분적 종속성에 있는 함수적 종속 속성을 제거하고, 해당 부분적 종속 속성이 종속된 결정자가 전체 후보 키가 되는 관계에 배치해야 한다.
== 예제 1: 직원 정보 ==
"종업원의 기술" 테이블은 제2정규형을 만족하지 않는다. 이 테이블의 후보 키는 {종업원, 기술}인데, {근무지}는 후보 키의 일부인 {종업원}에만 종속되기 때문이다.
이러한 구조는 갱신 이상을 일으킬 수 있다. 예를 들어, Jones의 근무지를 변경할 때, Jones의 모든 기술 레코드({Typing, Shorthand, Whittling})에 대해 근무지를 일일이 변경해야 한다. 만약 하나의 레코드라도 변경하지 않으면, "Jones의 근무지는 어디인가?"라는 질의에 혼동된 답을 얻게 된다.
이 테이블을 제2정규형으로 변환하려면, 데이터를 두 개의 테이블로 분해해야 한다. 하나는 {종업원}을 후보 키로 갖는 "종업원" 테이블이고, 다른 하나는 {종업원, 기술}을 후보 키로 갖는 "종업원의 기술" 테이블이다.
분해된 테이블들은 더 이상 갱신 이상이 발생하지 않는다.
== 예제 2: 전동 칫솔 모델 ==
다음은 제2정규형을 만족하지 않는 "전동 칫솔 모델" 테이블의 예시이다.
{제조사, 모델}은 후보 키이지만, {제조사 국가}는 {제조사}에만 종속된다. 따라서 이 관계는 2NF를 위반한다.
다음은 분해된 테이블들이다.
"전동 칫솔 모델" 테이블의 후보 키는 {제조사, 모델}이고, "전동 칫솔 제조사" 테이블의 후보 키는 {제조사}이다.
4. 1. 예제 1: 직원 정보
"종업원의 기술" 테이블은 제2정규형을 만족하지 않는다. 이 테이블의 후보 키는 {종업원, 기술}인데, {근무지}는 후보 키의 일부인 {종업원}에만 종속되기 때문이다.
이러한 구조는 갱신 이상을 일으킬 수 있다. 예를 들어, Jones의 근무지를 변경할 때, Jones의 모든 기술 레코드({Typing, Shorthand, Whittling})에 대해 근무지를 일일이 변경해야 한다. 만약 하나의 레코드라도 변경하지 않으면, "Jones의 근무지는 어디인가?"라는 질의에 혼동된 답을 얻게 된다.
이 테이블을 제2정규형으로 변환하려면, 데이터를 두 개의 테이블로 분해해야 한다. 하나는 {종업원}을 후보 키로 갖는 "종업원" 테이블이고, 다른 하나는 {종업원, 기술}을 후보 키로 갖는 "종업원의 기술" 테이블이다.
분해된 테이블들은 더 이상 갱신 이상이 발생하지 않는다.
4. 2. 예제 2: 전동 칫솔 모델
다음은 제2정규형을 만족하지 않는 "전동 칫솔 모델" 테이블의 예시이다.
{제조사, 모델}은 후보 키이지만, {제조사 국가}는 {제조사}에만 종속된다. 따라서 이 관계는 2NF를 위반한다.
다음은 분해된 테이블들이다.
"전동 칫솔 모델" 테이블의 후보 키는 {제조사, 모델}이고, "전동 칫솔 제조사" 테이블의 후보 키는 {제조사}이다.
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