제2정규형

**제2 정규형(2NF)**는 데이터베이스 정규화에서 사용하는 정규형중 하나로, 에드거 F. 커드가 1971년에 정의하였다.Codd, E.F. "Further Normalization of the Data Base Relational Model." (Presented at Courant Computer Science Symposia Series 6, "Data Base Systems," New York City, May 24th-25th, 1971.) IBM Research Report RJ909 (August 31st, 1971). Republished in Randall J. Rustin (ed.), *Data Base Systems: Courant Computer Science Symposia Series 6*. Prentice-Hall, 1972. 제 1 정규형(1NF)인 테이블이 제2 정규형을 충족시키는 필요충분조건은 다음과 같다: 후보 키 K와 K에 속하지 않는 속성 A가 있을 때, A를 결정하기 위해 K의 일부가 아닌 K 전체를 참조해야만 하는 경우 1NF 테이블은 2NF이다. 약간 어려운(정확한) 정의로 얘기하자면 : 모든 비기본 속성(non-prime attribute; 후보 키에 속하지 않은 속성)들이 후보 키에 속한 속성들 전체에 함수 종속인 경우에 한해서 1NF 테이블은 2NF이다. 1NF 테이블은 복합 후보 키(한 개 이상의 속성들로 구성된 후보 키)가 없으면 자동으로 2NF이다.
# 예제
종업원들의 기술을 나타내는 테이블을 가정하자: {| class="wikitable" |+ 종업원의 기술 ! _종업원_ !! _기술_ !! 근무지 |- |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 |} {종업원} 이나 {기술}은 둘다 이 테이블의 후보키는 아니다. {종업원}은 다수의 기술을 가지고 있으면 테이블에 한 차례 이상 나타나기 때문이고, {기술} 또한 다수의 종업원이 같은 기술을 보유하고 있을 때 테이블에 한 차례 이상 나타나기 때문이다. 오직 복합 키 {종업원, 기술} 이 이 테이블의 후보 키이다. 그런데 남은 속성인 {근무지}는 후보 키의 일부분인 {종업원}에만 영향을 받는다. 그래서 이 테이블은 2NF가 아니다. {근무지}에 중복이 있다는 점을 주목하자. Jones는 114 Main Street에 3번, Ellis는 73 Industrial Way에 2번의 중복이 있다. 이 중복은 테이블을 취약하게 만들며 **갱신이상**의 원인이 된다. 예를 들어 Jones의 근무지를 변경시에 "Typing" 과 "Shorthand" 레코드는 변경했는데 "Whittling" 레코드는 변경하지 않았다고 하자. 이럴 경우 "Jones 의 근무지는 어디인가" 질의에 혼동된 답을 얻게 될 것이다. 이 디자인을 2NF로 표현하는 방법은 같은 데이터를 2개의 테이블로 표현하는 것이다: {종업원} 후보 키를 갖는 "종업원" 테이블과 {종업원,기술} 후보 키를 갖는 "종업원의 기술" 테이블이다. {| class="wikitable" |+ 종업원 ! _종업원_ ! 근무지 |- | Jones | 114 Main Street |- | Bravo | 73 Industrial Way |- | Ellis | 73 Industrial Way |- | Harrison | 73 Industrial Way |} {| class="wikitable" |+ 종업원의 기술 ! _종업원_ !! _기술_ |- |Jones||Typing |- |Jones||Shorthand |- |Jones||Whittling |- |Bravo||Light Cleaning |- |Ellis||Alchemy |- |Ellis||Flying |- |Harrison||Light Cleaning |} - 위의 테이블들은 더 이상 **갱신 이상**이 없다. 그러나 모든 2NF 테이블이 **갱신 이상**이 없는 것은 아니다. **갱신 이상**이 있는 2NF 테이블의 예제는 아래와 같다: {| class="wikitable" |+ 대회 우승자 ! _대회_ !! _연도_ !! 우승자!! 우승자 생년 월일 |- |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정규형(3NF)에서 설명한다.
# 2NF 와 후보키
어떤 후보키에 부분함수 종속은 제2정규형에 위배된다. 2NF는 후보키가 아닌 속성값들이 어떤 후보키에도 부분키종속이 아닌 것이 설립을 위해 필수적이다.
# 참고 자료
* 데이터베이스 정규화 * 제1정규형 * 제3정규형 * 보이스-코드 정규형
# 인용 자료
각주
# 더 읽을거리
* Litt's Tips: Normalization * Date, C. J., & Lorentzos, N., & Darwen, H. (2002). *Temporal Data & the Relational Model 날짜=2012-12-09* (1st ed.). Morgan Kaufmann. . * isbn = 9780321197849 * Kent, W. (1983) *A Simple Guide to Five Normal Forms in Relational Database Theory*, Communications of the ACM, vol. 26, pp. 120–125 * Date, C.J., & Darwen, H., & Pascal, F. *Database Debunkings*