Как указать нарушения для BCNF?

На этой неделе у меня промежуточный экзамен по базам данных, и у меня возникли проблемы с выявлением нарушений BCNF. Я знаю, как декомпозировать отношения и найти, где ключ, а где суперключ. Я также могу выписать подразумеваемые FD. Я смотрел следующее видео: https://www.youtube.com/watch?v=hTFyG5o8-EA.

Подводя итог, дама, объясняющая, начинает применять алгоритм НФБК к следующему отношению (она использует пример студента, но я преобразовал его в буквы для упрощения):

R(A, B, C, D, E, F, G, H) с ФД: A -> BCG, G -> H, D -> EF.

Я знаю, что ключ AD, потому что его замыкание AD+ = ABCDEFGH. Она говорит, что все представленные ФД являются нарушениями, и начинает применять алгоритм:

Попытка BCNF №1:

R1 = D -> EF (D+ = DEF) // нарушения нет, но почему? Разве это не было просто нарушением?

R2 = ABCDEFG - (DEF - D) = ABCDGH // нарушение, тоже непонятно почему? Он содержит оба ключа.


Попытка BCNF №2 на R2:

R3 = G -> H (G+ = GH) // нарушения нет, потому что только два атрибута GH, я полагаю

R4 = ABCDG // нарушение, но я не знаю почему.


Попытка BCNF №3 на R4:

R5 = A -> BCG // нет нарушения (?)

R6 = AD // нарушений нет (?)

Последние отношения: R1, R2, R5, R6.


person mamajava    schedule 26.02.2017    source источник


Ответы (1)


Нарушения в R являются частичными и транзитивными функциональными зависимостями. Когда эти FD извлекаются как отдельные отношения, они больше не являются частичными или транзитивными. Это причина, по которой мы нормализуем, поэтому неудивительно, что они перестают быть нарушениями, когда изолированы.

R1/R2: в R EF зависит от D, подмножества ключа-кандидата AD, поэтому это частичная зависимость. При извлечении в R1, который имеет только D в качестве ключа-кандидата, зависимость больше не является частичной. Оставшаяся часть R становится R2, которая все еще содержит частичный FD (A -> BCG) и транзитивный FD (A -> G -> H).

R3/R4: в R2, A -> G -> H, поэтому G -> H является транзитивным FD. При извлечении в R3 он уже не является переходным. Оставшаяся часть R2 становится R4, но все еще содержит частичный FD (A -> BCG).

R5/R6: в R4 BCG зависит от A, который является подмножеством ключа-кандидата AD. При извлечении в R5, который имеет только A в качестве ключа-кандидата, зависимость больше не является частичной. Остаток от R4 становится R6, у которого нет нетривиальных FD.

Ваш окончательный ответ должен быть R1, R3, R5 и R6.

PS. Обратите внимание, что не все нарушения BCNF можно классифицировать как частичные или транзитивные функциональные зависимости.

person reaanb    schedule 26.02.2017
comment
Спасибо за объяснение и за исправление моего окончательного ответа. - person mamajava; 27.02.2017
comment
@philipxy Нетрудно показать, что частичные и транзитивные FD нарушают BCNF. Моя цель заключалась не в том, чтобы классифицировать нарушения BCNF, а в том, чтобы дать действительное (и знакомое) объяснение нарушений в проблеме OP, которые просто поддаются описанию в этих терминах. Для полноты я добавил PS. - person reaanb; 27.02.2017
comment
@reaanb Легко показать, что частичные зависимости непростых атрибутов от CK нарушают BCNF, поскольку они нарушают 2NF, но тогда они являются FD, а не SK. Нелегко показать, какие именно частичные, транзитивные и другие зависимости нарушают BCNF без ссылки на FD, не входящие в SK. И поскольку последнее имеет значение, зачем беспокоиться? Частичные и транзитивные, знакомые понятия из 3НФ, здесь бесполезны, если только вы не используете определение, в котором используется 3НФ плюс каждый элемент разности множеств между детерминированным и детерминантным множествами, являющийся первичным атрибутом, что, опять же, не является частичным или частичным. переходный. - person philipxy; 28.02.2017