- 2차 정규화 (2NF): 테이블이 1차 정규화를 만족하면서, 모든 비기본 키 속성이 기본 키의 전체에 대해 완전히 종속되어야 한다. 부분 종속성을 제거하는 단계이다.
- 3차 정규화 (3NF): 테이블이 2차 정규화를 만족하면서, 비기본 키 속성 간의 이행적 종속성을 제거해야 한다. 즉, 비기본 키 속성이 다른 비기본 키 속성에 종속되지 않도록 하는 것이다.
- 보이스-코드 정규형 (BCNF): 테이블이 BCNF를 만족하려면, 모든 결정자(determinant)가 후보 키(candidate key)이어야 한다. 결정자란 특정 속성 집합이 다른 속성 집합을 유일하게 결정하는 것을 의미한다. 즉, A -> B의 관계에서 A가 결정자이다.
3NF와 BCNF의 차이점은 3NF는 모든 비(非)기본 속성이 기본 키에만 종속되도록 보장하지만, BCNF는 모든 결정자가 후보 키가 되도록 요구한다. 즉, 결정자가 후보 키가 아니면 BCNF를 만족하지 않는다.
StudentID | StudentName | CourseID | CourseName | InstructorID | InstructorName
----------------------------------------------------------------------------
1 | John Doe | 1001 | Math | 5001 | Dr. Smith
2 | Jane Smith | 1002 | English | 5002 | Prof. Johnson
3 | Jim Brown | 1001 | Math | 5001 | Dr. Smith
2차 정규화는 부분 종속성을 제거하는 단계이다. 이 예시에서 CourseName
과 InstructorID
는 CourseID
에 종속되어 있다. 따라서 이를 별도의 테이블로 분리한다.
Student-Course 테이블 (2NF)
StudentID (PK) | StudentName | CourseID (PK)
-------------------------------------------
1 | John Doe | 1001
2 | Jane Smith | 1002
3 | Jim Brown | 1001
Course 테이블 (2NF)
CourseID (PK) | CourseName | InstructorID
------------------------------------------
1001 | Math | 5001
1002 | English | 5002
Instructor 테이블 (2NF)
InstructorID (PK) | InstructorName
----------------------------------
5001 | Dr. Smith
5002 | Prof. Johnson
3차 정규화는 이행적 종속성을 제거하는 단계이다. 예를 들어, CourseID는 InstructorID를 통해 InstructorName에 종속된다. 따라서 이를 분리하여 이행적 종속성을 제거한다.
Student-Course 테이블 (3NF)
StudentID (PK) | StudentName | CourseID (FK)
-------------------------------------------
1 | John Doe | 1001
2 | Jane Smith | 1002
3 | Jim Brown | 1001
Course 테이블 (3NF)
CourseID (PK) | CourseName | InstructorID (FK)
---------------------------------------------
1001 | Math | 5001
1002 | English | 5002
Instructor 테이블 (3NF)
InstructorID (PK) | InstructorName
----------------------------------
5001 | Dr. Smith
5002 | Prof. Johnson
StudentID | StudentName | BookID | BookTitle | AuthorID | AuthorName
----------------------------------------------------------------------------
1 | John Doe | 101 | Database Design | 201 | Alice Smith
2 | Jane Smith | 102 | Network Basics | 202 | Bob Johnson
3 | Jim Brown | 101 | Database Design | 201 | Alice Smith
4 | Jim Brown | 103 | AI Fundamentals | 203 | Carol White
Student-Book 테이블 (2NF)
StudentID (PK) | StudentName | BookID (PK)
------------------------------------------
1 | John Doe | 101
2 | Jane Smith | 102
3 | Jim Brown | 101
4 | Jim Brown | 103
Book 테이블 (2NF)
BookID (PK) | BookTitle | AuthorID
-------------------------------------------
101 | Database Design | 201
102 | Network Basics | 202
103 | AI Fundamentals | 203
Author 테이블 (2NF)
AuthorID (PK) | AuthorName
--------------------------
201 | Alice Smith
202 | Bob Johnson
203 | Carol White
Student-Book 테이블 (3NF)
StudentID (PK) | StudentName | BookID (FK)
------------------------------------------
1 | John Doe | 101
2 | Jane Smith | 102
3 | Jim Brown | 101
4 | Jim Brown | 103
Book 테이블 (3NF)
BookID (PK) | BookTitle | AuthorID (FK)
----------------------------------------------
101 | Database Design | 201
102 | Network Basics | 202
103 | AI Fundamentals | 203
Author 테이블 (3NF)
AuthorID (PK) | AuthorName
--------------------------
201 | Alice Smith
202 | Bob Johnson
203 | Carol White
요약하면, 3NF와 BCNF의 차이는 모든 결정자가 후보 키여야 한다는 점이다. 위 예제의 테이블들은 이 조건을 충족하므로 3NF이자 BCNF입니다.