Подтвердить что ты не робот

В чем разница между 3NF и BCNF?

Может кто-нибудь объяснить мне разницу между 3NF и BCNF? Было бы здорово, если бы вы также могли привести несколько примеров. Спасибо.

4b9b3361

Ответ 1

Разница между 3NF и BCNF тонкая.

3NF

Определение

Отношение находится в 3NF, если оно находится в 2NF, и никакой атрибут non-prime транзитивно зависит от первичного ключа. Другими словами, отношение R находится в 3NF, если для каждой функциональной зависимости X ⟶ A в R выполняется хотя бы одно из следующих условий:

  • X - это ключ или суперкласс в R
  • A является основным атрибутом в R

Пример

Учитывая следующее соотношение:

EMP_DEPT (firstName, employeeNumber, dateOfBirth, адрес, departmentNumber, departmentName)

Сотрудник может работать только в одном отделе, и каждый отдел имеет много сотрудников.

Ключ-кандидат employeeNumber.

Рассмотрим следующие функциональные зависимости:

  • employeeNumber ⟶ firstName, dateOfBirth, address, departmentNumber
  • departmentNumber ⟶ departmentName

Учитывая вышеизложенное определение, можно сделать вывод, что отношение EMP_DEPT не находится в 3NF, потому что вторая функциональная зависимость не соответствует ни одному из двух условий 3NF:

  • departmentNumber не является ключом или суперключем в EMP_DEPT
  • departmentName не является основным атрибутом в EMP_DEPT

BCNF

Определение

Отношение R находится в BCNF, если оно находится в 3NF, и для каждой функциональной зависимости X ⟶ A в R, X является ключом или суперклюком в R. Другими словами, единственная разница между 3NF и BCNF заключается в том, что в BCNF это нет второго условия 3NF. Это делает BCNF более строгим, чем 3NF, поскольку любое отношение, которое находится в BCNF, будет в 3NF, но не обязательно каждое отношение, которое находится в 3NF, будет в BCNF.

Пример

Учитывая следующее соотношение:

STUDENT_COURSE (studentNumber, socialSecurityNumber, courseNumber)

Студент может помочь во многих курсах, и в курсе может быть много учеников.

Ключами-кандидатами являются:

  • socialSecurityNumber, CourseNumber
  • studentNumber, номер курса

Рассмотрим следующие функциональные зависимости:

  • studentNumber ⟶ socialSecurityNumber
  • socialSecurityNumber ⟶ studentNumber

Учитывая вышеизложенное, можно сделать вывод о том, что STUDENT_COURSE не находится в BCNF, поскольку по меньшей мере studentNumber не является ключом или суперключем в STUDENT_COURSE.