데이터베이스 일반 양식은 무엇이며 예제를 제공 할 수 있습니까? [닫은]


277

관계형 데이터베이스 디자인에는 데이터 중복성을 줄이고 데이터 무결성을 향상시키기 위해 열 (속성) 및 테이블 (관계)을 구성하는 프로세스 인 데이터베이스 정규화 또는 단순 정규화 개념이 있습니다. ( Wikipedia에 작성 ).

대부분의 기사는 다소 기술적이고 이해하기 어렵 기 때문에 누군가 1NF, 2NF, 3NF, 심지어 3.5NF (Boyce-Codd)의 의미에 대한 예를 기반으로 설명을 이해하기 쉽게 작성하도록 요청하고 있습니다.

답변:


435

1NF는 가장 기본적인 정규 양식입니다. 표의 각 셀에는 정보가 하나만 포함되어야하며 중복 된 행은 없어야합니다.

2NF와 3NF는 모두 기본 키에 의존하는 것입니다. 기본 키는 여러 열로 구성 될 수 있습니다. Chris가 자신의 답변에서 다음과 같이 말했습니다.

데이터는 키 [1NF], 전체 키 [2NF] 및 키 [3NF] 외에는 다릅니다 (따라서 Codd 도와주세요 ).

2NF

특정 학기 동안 수강하는 과정이 포함 된 테이블이 있고 다음 데이터가 있다고 가정합니다.

|-----Primary Key----|               uh oh |
                                           V
CourseID | SemesterID | #Places  | Course Name  |
------------------------------------------------|
IT101    |   2009-1   | 100      | Programming  |
IT101    |   2009-2   | 100      | Programming  |
IT102    |   2009-1   | 200      | Databases    |
IT102    |   2010-1   | 150      | Databases    |
IT103    |   2009-2   | 120      | Web Design   |

이다 2NF에없는 네 번째 열이에 의존하지 않기 때문에, 전체 만의 일부만 - 키를 누릅니다. 코스 이름은 코스의 ID에 따라 다르지만 어느 학기와 관계가 없습니다. 따라서 알 수 있듯이 IT101이 프로그래밍 중이고 IT102가 데이터베이스임을 알려주는 여러 행이 있습니다. 따라서 코스 이름을 다른 테이블로 이동하여 문제를 해결합니다. 여기서 CourseID는 ENTIRE 키입니다.

Primary Key |

CourseID    |  Course Name |
---------------------------|
IT101       | Programming  |
IT102       | Databases    |
IT103       | Web Design   |

중복성이 없습니다!

3NF

자, 코스의 교사 이름과 그에 대한 세부 사항을 RDBMS에 추가한다고 가정 해 봅시다.

|-----Primary Key----|                           uh oh |
                                                       V
Course  |  Semester  |  #Places   |  TeacherID  | TeacherName  |
---------------------------------------------------------------|
IT101   |   2009-1   |  100       |  332        |  Mr Jones    |
IT101   |   2009-2   |  100       |  332        |  Mr Jones    |
IT102   |   2009-1   |  200       |  495        |  Mr Bentley  |
IT102   |   2010-1   |  150       |  332        |  Mr Jones    |
IT103   |   2009-2   |  120       |  242        |  Mrs Smith   |

이제 TeacherName이 TeacherID에 종속되어 있기 때문에 3NF아닙니다 . 이 문제를 해결하기 위해 2NF에서했던 것과 똑같은 작업을 수행합니다.이 테이블에서 TeacherName 필드를 가져 와서이를 TeacherID를 키로하는 자체 필드에 넣습니다.

 Primary Key |

 TeacherID   | TeacherName  |
 ---------------------------|
 332         |  Mr Jones    |
 495         |  Mr Bentley  |
 242         |  Mrs Smith   |

중복 없음!

1NF에없는 것이 2NF 또는 3NF에 있지 않다는 것을 기억해야합니다. 따라서 각 추가 정규 양식에는 하위 정규 양식에 포함 된 모든 항목 과 추가 조건이 모두 충족 되어야합니다 .


9
사물 간의 관계 측면에서 생각하십시오. "ID101로 수강 한 코스의 이름은 무엇입니까?"라고 물으면 답변을 드릴 수 있습니다. 마찬가지로, "당신에게 ID가 332 인 교사는 무엇입니까?" 선생님이 무엇인지 말해 주실 수 있습니다. 따라서 코스 이름은 ID에 따라 다릅니다.
Smashery 2009

9
그러나 다른 방법으로는 갈 수 없습니다. "존스 씨의 ID는 무엇입니까?" Mr Jones Jones가 두 명있을 수 있으므로 고유 한 답변을 제공하지 못할 수도 있습니다. 따라서 ID는 이름에 의존하지 않습니다. ID에 의존하는 이름입니다.
Smashery 2009

2
당신은 또한 이런 식으로 생각할 수 있습니다-세 번째 테이블을 살펴보십시오 (TeacherName이있는 첫 번째 테이블). 첫 번째 행에 "Mr Jones"가 있지만 두 번째 행에 "Mr Bloggs"를 두는 것은 무엇입니까? 나는 그들이했습니다 있기 때문에 모두 (332)의 ID 가지고, 그렇게하도록 허용
Smashery을

30
@instantsetsuna-전체 설명 : 일부 법정에서는 증인에게 "진리, 온전한 진실, 그리고 진실 만 말하면 나에게 하나님을 도와주세요"라고 말할 것인지 묻습니다. 당신이 진실을 말하고 있는지 알 때 하나님은 권위를 가진 사람으로 간주됩니다. 데이터베이스의 경우 "데이터는 키, 전체 키 및 키에만 의존하므로 Codd를 도와주세요"라고 말할 수 있습니다. 테드 코드 (Ted Codd)는 관계형 데이터베이스에 대한 아이디어, 즉 키에 의존하는 것들을 생각 해낸 사람이기 때문에 관계형 데이터베이스의 경우 갈 수있는 권한이 될 것입니다.
Smashery

5
@Smashery 2NF와 3NF의 차이점은 무엇입니까?
Zo

119

나는 정확한 단어 표현에 대해 좋은 기억을 가지고 있지는 않지만 데이터베이스 클래스에서 교수는 항상 다음과 같이 말했다고 생각합니다.

데이터는 키 [1NF], 전체 키 [2NF] 및 키 [3NF]에만 의존합니다.


72
... 나를 도와주세요. en.wikipedia.org/wiki/Ted_Codd
Smashery 2009

6
그렇다면 차이점은 The data depends on the key [1NF], nothing but the key [3NF]무엇입니까? 1 개의 문장 답변이 답변을 명확하게하지는 않지만 방문자를 혼란스럽게하므로 혼동하지 마십시오!
Pratik

2
"테이블의 각 셀은 하나의 정보 만 포함해야하며 중복 된 행은있을 수 없습니다." - "키에 의존하는 데이터"가이 모든 것과 어떻게 일치하는지 알 수 없습니다.
Simon Forsberg

46

다음은 신속하고도 정직한 답변이지만 한 문장입니다.

1NF : 테이블이 정렬되지 않은 데이터 세트 로 구성되며 반복되는 열이 없습니다.

2NF : 다른 열로 인해 테이블의 한 열에서 데이터를 반복하지 않습니다.

3NF : 테이블의 모든 열은 테이블의 키와 만 관련이 있습니다. 테이블에는 키가 아닌 다른 열을 설명하는 열이 없습니다.

자세한 내용은 Wikipedia ...를 참조하십시오.


1
내가 알 수있는 한, 반복 그룹에 대한 1NF의 회피는 반복 열을 의미하는 것이 아니라 동일한 속성에 대해 임의의 수의 반복되는 값을 나타내는 단일 열을 의미합니다. 즉 원자가 아닙니다. 예를 들어 (1) stackoverflow.com/questions/23194292/… / (2) stackoverflow.com/questions/26357276/…
underscore_d

34

1NF : 열당 하나의 값만

2NF : 테이블의 모든 기본 키가 아닌 열은 전체 기본 키에 의존해야합니다.

3NF : 테이블의 모든 비 기본 키 열은 전체 기본 키에 직접적으로 의존해야합니다.

여기 에 더 자세히 기사를 썼습니다


귀속을 제공하지 않았기 때문입니다. 귀속을 제공하기 위해 답변을 편집했습니다.
Robert Harvey

가능할 때마다 답변 자체에 예제를 포함 시키십시오. 일반 사용자는 블로그 링크를 클릭하지 않고도 답변을 읽고 가치를 얻을 수 있어야합니다. 다시 말해, 그 대답은 스스로 포함되어야합니다.
Robert Harvey

나는 그것을 명심할 것이다. 감사합니다 :)
Arcturus

3
또한이 질문은 2 살이며 OP에 의해 승인 된 것으로 높은 찬성 답변을 받았습니다. 커뮤니티는 최근 답변을 면밀히 조사하여 OP에 진정한 부가 가치를 부여하는지 여부를 평가합니다.
Robert Harvey

3
@ Arcturus는이 기사를 읽었으며 거기에서 표준화에 대한 더 나은 설명 중 하나입니다.
Olian04
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.