web-dev-qa-db-ja.com

3NFとBCNFの違いは何ですか?

誰かが3NFとBCNFの違いを説明してもらえますか?いくつかの例を提供することもできれば素晴らしいことです。ありがとう。

33
cactusboat

3NFとBCNFの違いはわずかです。

3NF

定義

リレーションは、2NFにあり、主キーに推移的に依存する非プライム属性がない場合、3NFにあります。言い換えれば、Rの各機能依存性X⟶Aについて、次の条件の少なくとも1つが満たされる場合、関係Rは3NFにあります。

  1. XはRのキーまたはスーパーキーです
  2. AはRの主要な属性です

次の関係を考えます:

EMP_DEPT(firstName、employeeNumber、dateOfBirth、address、departmentNumber、departmentName)

従業員は1つの部門でのみ働くことができ、各部門には多くの従業員がいます。

候補キーはemployeeNumberです。

以下の機能的な依存関係を考慮してください。

  1. employeeNumber⟶firstName、dateOfBirth、住所、departmentNumber
  2. departmentNumber⟶departmentName

上記の定義を考えると、2番目の機能依存関係が3NFの2つの条件のいずれも満たさないため、関係EMP_DEPTは3NFにないと結論付けることができます。

  1. departmentNumberは、EMP_DEPTのキーまたはスーパーキーではありません
  2. departmentNameはEMP_DEPTの主要な属性ではありません

BCNF

定義

リレーションRは、3NFにあり、Rの各機能依存関係X⟶Aの場合、BCNFにあり、XはRのキーまたはスーパーキーです。言い換えると、3NFとBCNFの唯一の違いは、BCNFに存在しないことです。 3NFの2番目の条件。これにより、BCNFにある関係はすべて3NFになりますが、3NFにあるすべての関係がBCNFになるとは限らないため、BCNFは3NFよりも厳密になります。

次の関係を考えます:

STUDENT_COURSE(studentNumber、socialSecurityNumber、courseNumber)

学生は多くのコースを支援することができ、コースには多くの学生がいます。

候補キーは次のとおりです。

  1. socialSecurityNumbercourseNumber
  2. 学生番号コース番号

以下の機能的な依存関係を考慮してください。

  1. studentNumber⟶socialSecurityNumber
  2. socialSecurityNumber⟶studentNumber

上記の定義があれば、少なくともstudentNumberはSTUDENT_COURSEのキーまたはスーパーキーではないため、STUDENT_COURSEはBCNFにないと結論付けることができます。

45
Mosty Mostacho