Может кто-нибудь объяснить мне разницу между 3NF и BCNF? Было бы здорово, если бы вы могли также привести несколько примеров. Спасибо.
В чем разница между 3NF и BCNF?
Ответы (1)
Разница между 3NF и BCNF невелика.
3NF
Определение
Отношение находится в 3NF, если оно находится в 2NF и ни один из непервичных атрибутов транзитивно не зависит от первичного ключа. Другими словами, отношение R находится в 3НФ, если для каждой функциональной зависимости X ⟶ A в R выполняется хотя бы одно из следующих условий:
- X - это ключ или супер-ключ в R
- A - первичный атрибут в R
Пример
Учитывая следующее соотношение:
EMP_DEPT (имя, номер сотрудника, дата рождения, адрес, номер отдела, имя отдела)
Сотрудник может работать только в одном отделе, и в каждом отделе много сотрудников.
Ключ кандидата - employeeNumber.
Учтите следующие функциональные зависимости:
- employeeNumber ⟶ firstName, dateOfBirth, address, DepartmentNumber
- DepartmentNumber ⟶ DepartmentName
Учитывая приведенное выше определение, можно сделать вывод, что отношение EMP_DEPT не входит в 3NF, потому что вторая функциональная зависимость не удовлетворяет ни одному из 2 условий 3NF:
- DepartmentNumber не является ключом или суперключом в EMP_DEPT
- DepartmentName не является основным атрибутом в EMP_DEPT
BCNF
Определение
Отношение R находится в BCNF, если оно находится в 3NF и для каждой функциональной зависимости X ⟶ A в R, X является ключом или суперключом в R. Другими словами, единственная разница между 3NF и BCNF заключается в том, что в BCNF его нет. второе условие 3НФ. Это делает BCNF более строгим, чем 3NF, поскольку любое отношение, которое находится в BCNF, будет в 3NF, но не обязательно каждое отношение, которое находится в 3NF, будет в BCNF.
Пример
Учитывая следующее соотношение:
STUDENT_COURSE (studentNumber, socialSecurityNumber, courseNumber)
Студент может участвовать во многих курсах, и на курсе может быть много студентов.
Ключи-кандидаты:
- socialSecurityNumber, courseNumber
- studentNumber, courseNumber
Учтите следующие функциональные зависимости:
- studentNumber ⟶ socialSecurityNumber
- socialSecurityNumber ⟶ studentNumber
Учитывая приведенное выше определение, можно сделать вывод, что STUDENT_COURSE не входит в BCNF, поскольку, по крайней мере, studentNumber не является ключом или суперключом в STUDENT_COURSE.
departmentNumber ⟶ departmentName
из первой, что сделает ее 3NF и BCNF. Во втором они эквивалентны, поэтому удалите любой атрибут studentNumber или sSnumber, он будет в BCNF.
- person Ritwik; 16.01.2016