{{위키데이터 속성 추적}}
'''제2 정규형(2NF)'''는 [[데이터베이스 정규화]]에서 사용하는 정규형중 하나로, [[에드거 F. 커드]]가 1971년에 정의하였다.<ref name="Codd">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.</ref> [[제 1 정규형]](1NF)인 테이블이 제2 정규형을 충족시키는 필요충분조건은 다음과 같다: [[후보 키]] K와 K에 속하지 않는 속성 A가 있을 때, A를 결정하기 위해 K의 일부가 아닌 K 전체를 참조해야만 하는 경우 1NF 테이블은 2NF이다.

약간 어려운(정확한) 정의로 얘기하자면 : 모든 비기본 속성(non-prime attribute; 후보 키에 속하지 않은 속성)들이 [[후보 키]]에 속한 속성들 전체에 [[함수 종속성|함수 종속]]인 경우에 한해서 1NF 테이블은 2NF이다.

1NF 테이블은 복합 후보 키(한 개 이상의 속성들로 구성된 후보 키)가 없으면 자동으로 2NF이다.

== 예제 ==
종업원들의 기술을 나타내는 테이블을 가정하자:

{| class="wikitable"
|+ 종업원의 기술
! <u>종업원</u> !! <u>기술</u> !! 근무지
|-
|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" style="float:left;"
|+ 종업원
! <u>종업원</u>
! 근무지
|-
| Jones
| 114 Main Street
|-
| Bravo
| 73 Industrial Way
|-
| Ellis
| 73 Industrial Way
|-
| Harrison
| 73 Industrial Way
|}
{| class="wikitable" style="float:left;"
|+ 종업원의 기술
! <u>종업원</u> !! <u>기술</u>
|-
|Jones||Typing
|-
|Jones||Shorthand
|-
|Jones||Whittling
|-
|Bravo||Light Cleaning
|-
|Ellis||Alchemy
|-
|Ellis||Flying
|-
|Harrison||Light Cleaning
|}
{{-}}

위의 테이블들은 더 이상 '''갱신 이상'''이 없다.

그러나 모든 2NF 테이블이 '''갱신 이상'''이 없는 것은 아니다. '''갱신 이상'''이 있는 2NF 테이블의 예제는 아래와 같다:

{| class="wikitable"
|+ 대회 우승자
! <u>대회</u> !! <u>연도</u> !! 우승자!! 우승자 생년 월일
|-
|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정규형]]
* [[보이스-코드 정규형]]

== 인용 자료 ==
{{각주}}

== 더 읽을거리 ==
* [http://www.troubleshooters.com/littstip/ltnorm.html Litt's Tips: Normalization]
* Date, C. J., & Lorentzos, N., & Darwen, H. (2002). ''[http://www.elsevier.com/wps/product/cws_home/680662 Temporal Data & the Relational Model] {{웹아카이브|url=https://archive.today/20121209052842/http://www.elsevier.com/wps/product/cws_home/680662 |날짜=2012-12-09 }}'' (1st ed.). Morgan Kaufmann. {{ISBN|1-55860-855-9}}.
* {{서적 인용| author = C.J.Date | authorlink = Christopher J. Date | title = Introduction to Database Systems | edition = 8th | year=2004 | publisher = Addison-Wesley | location = Boston | isbn = 9780321197849 }}
* Kent, W. (1983) ''[http://www.bkent.net/Doc/simple5.htm A Simple Guide to Five Normal Forms in Relational Database Theory]'', Communications of the ACM, vol. 26, pp.&nbsp;120–125
* Date, C.J., & Darwen, H., & Pascal, F. ''[http://www.dbdebunk.com Database Debunkings]''

== 외부 링크 ==
* [http://databases.about.com/od/specificproducts/a/normalization.htm Database Normalization Basics] {{웨이백|url=http://databases.about.com/od/specificproducts/a/normalization.htm |date=20070205184226 }} by Mike Chapple (About.com)
* [https://web.archive.org/web/20110606025027/http://dev.mysql.com/tech-resources/articles/intro-to-normalization.html An Introduction to Database Normalization] by Mike Hillyer.
* [https://web.archive.org/web/20100106115112/http://www.utexas.edu/its/archive/windows/database/datamodeling/rm/rm7.html Normalization] by ITS, University of Texas.
* [https://web.archive.org/web/20110715075109/http://phlonx.com/resources/nf3/ A tutorial on the first 3 normal forms] by Fred Coulson
* [http://support.microsoft.com/kb/283878 Description of the database normalization basics] by Microsoft

{{전거 통제}}

[[분류:데이터베이스 정규화]]