[SQLD] 정규화 예시

Shy·2024년 5월 18일
0

SQLD

목록 보기
8/23
  • 2차 정규화 (2NF): 테이블이 1차 정규화를 만족하면서, 모든 비기본 키 속성이 기본 키의 전체에 대해 완전히 종속되어야 한다. 부분 종속성을 제거하는 단계이다.
  • 3차 정규화 (3NF): 테이블이 2차 정규화를 만족하면서, 비기본 키 속성 간의 이행적 종속성을 제거해야 한다. 즉, 비기본 키 속성이 다른 비기본 키 속성에 종속되지 않도록 하는 것이다.
  • 보이스-코드 정규형 (BCNF): 테이블이 BCNF를 만족하려면, 모든 결정자(determinant)가 후보 키(candidate key)이어야 한다. 결정자란 특정 속성 집합이 다른 속성 집합을 유일하게 결정하는 것을 의미한다. 즉, A -> B의 관계에서 A가 결정자이다.

3NF와 BCNF의 차이점은 3NF는 모든 비(非)기본 속성이 기본 키에만 종속되도록 보장하지만, BCNF는 모든 결정자가 후보 키가 되도록 요구한다. 즉, 결정자가 후보 키가 아니면 BCNF를 만족하지 않는다.

예시1

초기 테이블(1NF)

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차 정규화(2NF)

2차 정규화는 부분 종속성을 제거하는 단계이다. 이 예시에서 CourseNameInstructorIDCourseID에 종속되어 있다. 따라서 이를 별도의 테이블로 분리한다.

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차 정규화(3NF)

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

예시2

초기 테이블(1NF)

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

2차 정규화(2NF)

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

3차 정규화(3NF)

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

3차 정규화의 BCNF검증

  • Student-Book 테이블 (3NF)
    • 결정자: StudentID, BookID
    • StudentID와 BookID 모두 후보 키이며, 다른 속성들은 기본 키에만 종속되어 있다.
    • StudentID는 학생을 고유하게 식별하고, BookID는 학생이 대여한 책을 고유하게 식별한다.
      • 따라서, StudentID와 BookID의 조합이 기본 키이다.
  • Book 테이블 (3NF)
    • 결정자: BookID
    • BookID는 후보 키이며, 다른 속성들은 기본 키에만 종속되어 있다.
  • Author 테이블 (3NF)
    • 결정자: AuthorID
    • AuthorID는 후보 키이며, 다른 속성들은 기본 키에만 종속되어 있다.
    위에서 제시된 각 테이블은 모든 결정자가 후보 키인 상태이다. 따라서, 3차 정규형(3NF)을 만족하는 동시에 BCNF도 만족한다.

요약하면, 3NF와 BCNF의 차이는 모든 결정자가 후보 키여야 한다는 점이다. 위 예제의 테이블들은 이 조건을 충족하므로 3NF이자 BCNF입니다.

profile
신입사원...

0개의 댓글