본문 바로가기

computer science

cs - BCNF(Boyce-Codd Normal Form)와 제3정규형의 차이 설명

3NF(제3정규형)와 BCNF(Boyce-Codd 정규형) 모두 데이터베이스 테이블 내의 이행적 종속을 제거하는 것을 목표로 합니다. 그러나 BCNF는 3NF보다 더 엄격한 정규형으로, 특히 복합 키를 가진 테이블에서 발생할 수 있는 함수적 종속성 문제를 해결합니다.

3NF의 조건:

  • 모든 비기본 키 속성이 기본 키에만 종속되어야 하며(함수적 종속성),
  • 어떤 비기본 키 속성도 기본 키의 일부분에 대해서만 종속되어서는 안 되며(부분적 종속성),
  • 비기본 키 속성이 다른 비기본 키 속성에 종속되어서는 안 됩니다(이행적 종속성).

BCNF의 조건:

  • 3NF를 만족하며,
  • 모든 결정자가 후보 키여야 합니다. 즉, 어떤 속성도 후보 키가 아닌 속성에 의해 결정되어서는 안 됩니다.

차이점:

3NF는 비기본 키 속성에 초점을 맞춘 반면, BCNF는 모든 종류의 속성(기본 키를 포함한)에 적용되는 함수적 종속성을 다룹니다. BCNF는 기본 키가 복합 키인 경우, 모든 컬럼이 그 복합 키에 함수적으로 종속되어야 하며, 복합 키의 일부가 아닌 다른 어떤 컬럼에 의해서도 종속될 수 없다는 더 엄격한 요구 사항을 제시합니다.

실제 테이블 예시:

3NF를 만족하지만 BCNF를 만족하지 않는 예시를 제시하겠습니다. 이런 상황은 일반적으로 테이블에 복합 키가 있고, 테이블의 일부 속성이 이 복합 키의 전체가 아닌 일부에만 함수적으로 종속될 때 발생합니다.

예시 테이블: 학생과 강의

고려할 수 있는 테이블은 학생들이 수강하는 강의에 대한 정보를 담고 있습니다:

 

StudentID                               CourseID                                                                    Instructor

101 CSE101 Prof. A
101 MTH101 Prof. B
102 CSE101 Prof. A
103 PHY101 Prof. C

이 테이블에서:

  • StudentID와 CourseID의 조합이 각 행을 유일하게 식별하는 복합 키입니다.
  • Instructor는 CourseID에 의해 결정됩니다 (CourseID → Instructor).

3NF 조건:

  • 모든 비기본 키 속성이 기본 키에만 종속되어야 합니다. 위 테이블에서 Instructor는 복합 키가 아닌 CourseID에만 종속되므로, 이는 3NF를 만족합니다.

BCNF 조건:

  • 모든 결정자는 후보 키여야 합니다. 위 테이블에서 CourseID는 Instructor를 결정하지만, CourseID는 복합 키의 일부에 불과합니다. 따라서, CourseID는 테이블의 후보 키가 아니며, 이 테이블은 BCNF를 위반합니다.

이 예시는 3NF를 만족하지만 BCNF를 만족하지 않습니다. 이러한 상황은 특히 복합 키를 사용하는 테이블에서 종종 발생합니다. BCNF는 모든 결정자가 테이블의 후보 키이어야 한다는 보다 엄격한 요구 사항을 가지고 있기 때문입니다.

 

그렇다면 후보키는 정확히 무엇인가?

 

후보 키(Candidate Key)는 데이터베이스에서 각 행을 유일하게 식별할 수 있는 속성(또는 속성들의 조합)입니다. 후보 키는 다음과 같은 특성을 만족해야 합니다:

  1. 유일성(Uniqueness): 후보 키로 선택된 속성(들)은 테이블 내의 모든 행을 유일하게 식별해야 합니다.
  2. 최소성(Minimality): 후보 키를 구성하는 어떠한 속성도 제거할 수 없으며, 그렇게 하면 유일성이 손상됩니다.

하나의 테이블에는 여러 개의 후보 키가 존재할 수 있으며, 이 중에서 주로 사용되는 키를 기본 키(Primary Key)로 선정합니다. 나머지 후보 키들은 대체 키(Alternate Key)로 여겨집니다.

 

예를 들어, 학생 테이블에서 학생ID와 학생 이메일이 모두 유일성을 가지고 있다면, 이 두 속성은 각각 후보 키가 될 수 있습니다. 만약 학생ID를 기본 키로 선택한다면, 학생 이메일은 대체 키가 됩니다.

 

그렇다면 결정자는 무엇인가? 그리고 해당 테이블에서 만약, 한명의 교수가 두명의 코스를 맡게된다면, 유일성이 깨지니까 후보키가 아니게 되는가?

 

결정자(Determinant)는 데이터베이스 테이블에서 어떤 속성의 값이 다른 하나 이상의 속성들의 값을 유일하게 결정할 수 있는 속성 또는 속성의 조합입니다. 결정자는 함수적 종속성에서 중요한 역할을 합니다. 즉, 어떤 속성 A가 속성 B에 대한 결정자라면, A의 값이 주어졌을 때 B의 값이 유일하게 결정됩니다.

 

후보 키가 되기 위해서는 그 키가 테이블 내 모든 행에 대해 유일해야 하며, 어떤 하위 집합도 그 유일성을 유지해야 합니다.