BCNF, 3NF и возможные ключи

У меня возникают проблемы с пониманием того, как определить, находятся ли отношения в BCNF, 3NF, и вообще с идентификацией ключей-кандидатов отношения.

Рассмотрим отношение R = (A, B, C, D) с функциональными зависимостями:

AB -> C
C -> D
D -> A

Вопросы включали:

а. перечислить возможные ключи R
b. определить, находится ли R в BCNF или 3NF.

Решение решает

а. 3 возможных ключа для R: AB, BC и BD.
b. R находится в 3NF, но не в BCNF.

Я прочитал В чем разница между 3NF и BCNF? и может понять разницу между 3NF и BCNF при обращении к неарбитуарным словам в схеме базы данных. В конечном итоге я теряюсь, пытаясь определить отношения с редуцированным отношением, как указано в задаче.

Может ли кто-нибудь объяснить, как ключи-кандидаты были определены выше и почему R находится в 3NF, а не в BCNF?


person sudo_coffee    schedule 31.10.2016    source источник


Ответы (1)


Вы задаете несколько вопросов одновременно.

  1. Как вычислить ключи отношения. В общем, самый простой способ — вычислить замыкание каждой отдельной комбинации атрибутов и определить, какие из них являются суперключами. Из этого набора суперключей найдите минимальные: это ключи-кандидаты.

  2. Как определить, является ли отношение НФБК.

Для этого вам не нужны ключи. Все, что вам нужно сделать, это проверить, что каждая нетривиальная функциональная зависимость в левой части является суперключом отношения.

Как вы определяете это для FD? Просто вычислите замыкание левой части FD. Если результатом являются все атрибуты отношения, то это суперключ.

  1. Как определить, является ли отношение 3NF?

FD должны быть в канонической форме: один атрибут в правой части.

Для каждого нетривиального FD либо левая часть является суперключом (как в BCNF), либо правая часть является частью ключа (любого ключа).

Это очень хорошее видео, объясняющее различия:

BCNF против 3NF

person dmg    schedule 31.10.2016
comment
Шаг за шагом... Я изо всех сил пытаюсь понять, как закрытие определяется с помощью абстрактного R=(A,B,C,D) и дальнейшего извлечения суперключей для идентификации ключей-кандидатов. Для BCNF, как объекты A, B, C, D R используются для определения нетривиальной функциональной зависимости? Я отредактировал исходный вопрос, если это поможет. - person sudo_coffee; 31.10.2016
comment
Дальнейший поиск, чтобы определить, является ли отношение BCNF, я нашел stackoverflow.com/questions/23591784/, который использует ключи-кандидаты, чтобы определить, находится ли отношение в BCNF - person sudo_coffee; 31.10.2016