38

誰か3NFとBCNFの違いを説明してくれませんか? また、いくつか例を挙げていただければ幸いです。ありがとう。

4

1 に答える 1

47

3NF と BCNF の違いは微妙です。

3NF

意味

関係が 2NF にあり、主キーに推移的に依存する非素数属性がない場合、関係は 3NF にあります。言い換えると、R の各関数依存関係 X ⟶ A について、次の条件の少なくとも 1 つが満たされる場合、関係 R は 3NF にあります。

  1. X は R のキーまたはスーパーキーです
  2. A は R の基本属性です

次の関係があるとします。

EMP_DEPT(名、従業員番号、生年月日、住所、部門番号、部門名)

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

候補キーはemployeeNumberです。

次の機能依存関係を考慮してください。

  1. employeeNumber ⟶ firstName, dateOfBirth, address, departmentNumber
  2. 部門番号 ⟶ 部門名

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

  1. departmentNumber は EMP_DEPT のキーまたはスーパーキーではありません
  2. departmentName は EMP_DEPT の基本属性ではありません

BCNF

意味

リレーション R は、それが 3NF にあり、R の各機能依存関係 X ⟶ A について、X が R のキーまたはスーパーキーである場合、BCNF にあります。つまり、3NF と BCNF の唯一の違いは、BCNF に存在しないことです。 3NFの第二条件。これにより、BCNF にあるすべての関係が 3NF になるため、BCNF は 3NF よりも厳密になりますが、必ずしも 3NF にあるすべての関係が BCNF になるとは限りません。

次の関係があるとします。

STUDENT_COURSE(学生番号、社会保障番号、コース番号)

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

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

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

次の機能依存関係を考慮してください。

  1. 学生番号 ⟶ socialSecurityNumber
  2. socialSecurityNumber ⟶ 学生番号

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

于 2013-11-03T06:29:53.683 に答える