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

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


person cactusboat    schedule 03.11.2013    source источник


Ответы (1)


Разница между 3NF и BCNF невелика.

3NF

Определение

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

  1. X - это ключ или супер-ключ в R
  2. A - первичный атрибут в R

Пример

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

EMP_DEPT (имя, номер сотрудника, дата рождения, адрес, номер отдела, имя отдела)

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

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

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

  1. employeeNumber ⟶ firstName, dateOfBirth, address, DepartmentNumber
  2. DepartmentNumber ⟶ DepartmentName

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

  1. DepartmentNumber не является ключом или суперключом в EMP_DEPT
  2. 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)

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

Ключи-кандидаты:

  1. socialSecurityNumber, courseNumber
  2. studentNumber, courseNumber

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

  1. studentNumber ⟶ socialSecurityNumber
  2. socialSecurityNumber ⟶ studentNumber

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

person Mosty Mostacho    schedule 03.11.2013
comment
Спасибо!! отличное объяснение. - person cactusboat; 03.11.2013
comment
как вы можете изменить два примера так, чтобы они были 3NF и BCNF соответственно? - person Alic; 01.12.2015
comment
Удалите (разделите на другую таблицу) departmentNumber ⟶ departmentName из первой, что сделает ее 3NF и BCNF. Во втором они эквивалентны, поэтому удалите любой атрибут studentNumber или sSnumber, он будет в BCNF. - person Ritwik; 16.01.2016
comment
Вот где я всегда путаюсь - когда упоминается только ключ, это первичный ключ, или все ключи-кандидаты, или один из ключей-кандидатов? - person user; 25.02.2016
comment
PK @user и Mosty Mostacho не имеют отношения к нормализации. В этом ответе ключ означает СК. Первое предложение относительно 3NF, в котором упоминается ПК, неверно. В противном случае ответ очевиден о рассмотрении возможности учета всех СК. - person philipxy; 14.05.2016
comment
Можно ли сказать, что последний пример относится к 3NF, потому что обе функциональные зависимости имеют главный атрибут отношения с правой стороны? - person brainplot; 06.07.2018
comment
@brainplot Таблица находится в 3NF, потому что она соответствует критерию для 3NF. Это включает в себя набор всех имеющихся FD. Мы можем разумно сказать, что конкретный ФД нарушает или не нарушает конкретное условие определенного определения. Но если мы удовлетворяем только некоторым условиям для некоторых ФД по отдельности, то мы не вправе говорить, что у нас есть 3НФ только из-за этого. - person philipxy; 15.01.2019