誰か3NFとBCNFの違いを説明してくれませんか? また、いくつか例を挙げていただければ幸いです。ありがとう。
1 に答える
3NF と BCNF の違いは微妙です。
3NF
意味
関係が 2NF にあり、主キーに推移的に依存する非素数属性がない場合、関係は 3NF にあります。言い換えると、R の各関数依存関係 X ⟶ A について、次の条件の少なくとも 1 つが満たされる場合、関係 R は 3NF にあります。
- X は R のキーまたはスーパーキーです
- A は R の基本属性です
例
次の関係があるとします。
EMP_DEPT(名、従業員番号、生年月日、住所、部門番号、部門名)
従業員は 1 つの部門でのみ働くことができ、各部門には多くの従業員がいます。
候補キーはemployeeNumberです。
次の機能依存関係を考慮してください。
- employeeNumber ⟶ firstName, dateOfBirth, address, departmentNumber
- 部門番号 ⟶ 部門名
上記の定義を考えると、2 番目の機能依存関係が 3NF の 2 つの条件のいずれも満たさないため、関係 EMP_DEPT は 3NF にないと結論付けることができます。
- departmentNumber は EMP_DEPT のキーまたはスーパーキーではありません
- departmentName は EMP_DEPT の基本属性ではありません
BCNF
意味
リレーション R は、それが 3NF にあり、R の各機能依存関係 X ⟶ A について、X が R のキーまたはスーパーキーである場合、BCNF にあります。つまり、3NF と BCNF の唯一の違いは、BCNF に存在しないことです。 3NFの第二条件。これにより、BCNF にあるすべての関係が 3NF になるため、BCNF は 3NF よりも厳密になりますが、必ずしも 3NF にあるすべての関係が BCNF になるとは限りません。
例
次の関係があるとします。
STUDENT_COURSE(学生番号、社会保障番号、コース番号)
学生は多くのコースを支援することができ、コースには多くの学生がいる可能性があります。
候補キーは次のとおりです。
- socialSecurityNumber、コース番号
- 学生番号、コース番号
次の機能依存関係を考慮してください。
- 学生番号 ⟶ socialSecurityNumber
- socialSecurityNumber ⟶ 学生番号
上記の定義を考えると、少なくとも StudentNumber は STUDENT_COURSE のキーまたはスーパーキーではないため、STUDENT_COURSE は BCNF にないと結論付けることができます。