Вы правы на деньги с возможными ключами-кандидатами, vikkyhacks. Перекрывающиеся ключи-кандидаты представляют собой составные (состоят из более чем одного атрибута) ключи-кандидаты, имеющие как минимум один общий атрибут. Таким образом, ваши перекрывающиеся ключи-кандидаты - это NM и NO (они разделяют N).
Дополнительные пояснения к вышесказанному, изначально оставленные в комментариях:
Все перекрывающиеся ключи-кандидаты являются группами (например, двух или более) ключей-кандидатов. Это означает, что первым критерием является то, что ваше отношение R
должно иметь более одного ключа-кандидата (минимальные супер-ключи). Чтобы любой из возможных ключей перекрывался, каждый из них (опять же два или более) должен удовлетворять нескольким дополнительным условиям. 1) Они оба должны быть составными ключами-кандидатами. Они должны состоять из более чем одного атрибута, поэтому такой ключ A
никогда не будет перекрываться, но AB
может перекрываться с другим ключом. 2) Составные ключи должны иметь общий атрибут. AB
перекрывается AC
и, BD
но не CD
или EF
.
Подводя итог: два или более наборов атрибутов, где 1) каждый набор является ключом-кандидатом (минимальный суперключ) для отношения, 2) каждый набор является составным ключом (состоит из более чем одного атрибута), и 3) один или несколько из атрибуты составных ключей перекрываются с атрибутом другого ключа в наборе. Таким образом, вы можете исключить MNOP
и NOPL
на основании того, что они не минимальные суперключи. Вы можете исключить P
и L
на основании того, что они не являются составными ключами (они состоят из одного атрибута). Вы остались с двумя ключами, NO
и NM
, которые разделяют атрибут N
, так что вы закончили.
пример
Это также может помочь иметь пример, который вы действительно можете обернуть вокруг. Единственный раз, когда я видел, где у вас будут перекрывающиеся ключи-кандидаты, это когда у вас есть 1) два атрибута, которые функционально определяют друг друга (например, отношение один-к-одному между A
и B
где A
есть один B
и B
имеет один A
) и 2) эти атрибуты являются частью составных ключей-кандидатов.
Например, в некоторой системе a Customer
имеет один CreditCard
, а a CreditCard
принадлежит одному Customer
. В таблице Rentals вы однозначно определяете Rental
по EquipmentId
, Date
и CustomerId
. Для удобства вы также сохранили CreditCard
эту таблицу.
Это означает, что выполняются следующие FD:
{CustomerId, EquipmentId, Date} -> {CreditCard}
{CustomerId} -> {CreditCard}
Но поскольку ассоциация является взаимно-однозначной, также выполняются следующие FD:
{CreditCard} -> {CustomerId}
{CreditCard, EquipmentId, Date} -> {CustomerId}
Так как CustomerId
и CreditCard
могут быть использованы взаимозаменяемо для однозначной идентификации вашего клиента.
В приведенном выше сценарии у вас есть перекрывающиеся ключи-кандидаты:
{CreditCard, EquipmentId, Date}
{CustomerId, EquipmentId, Date}
Они перекрываются, потому что они являются составными ключами (они состоят из более чем одного атрибута) и потому, что по крайней мере один из их атрибутов является общим (в этом случае они совместно используют оба EquipmentId
и Date
.
Вы сказали, что BCNF
на данный момент вас это не волнует , но чтобы полностью привезти это домой, сценарий, приведенный выше, является причиной, по которой вы иногда будете видеть стол, в котором есть, 3NF
но нет BCNF
. Таблица выше есть 3NF
, но нет BCNF
.
3NF
разрешает FD, где 1) FD тривиален 2) левая сторона FD является ключом-кандидатом или 3) правая сторона FD является атрибутом ключа (атрибут, используемый для создания любого ключа). Поскольку CreditCard
и CustomerId
оба являются ключевыми атрибутами, все FD либо соответствуют 2 или 3.
BCNF
очень похож, но он допускает только условия 1 и 2, разрешенные 3NF
. Поскольку 3-е условие не разрешено BCNF
, и оба CID -> CC
и CC -> CID
используют условие 3, эта таблица не является BCNF
, но это так 3NF
.
В практических целях случай довольно редок, и эта информация педантична. Отказ в том, что у вашей таблицы есть проблема, состоит в том, что CreditCard/CustomerId
пары повторяются по всей таблице. Вы также можете признать, что таблица даже не будет присутствовать 2NF
без этого редкого условия, когда правая сторона FD может быть ключевым атрибутом, потому что CreditCard
это частичная зависимость от первичного ключа (зависит, CustomerId
но не от EquipmentId
или Date
.
P
,L
,NO
, иNM
супер ключ квалифицируется как ключ кандидата , только если не имеет минимальное подмножество. Взять ваш примерMNOP
- это супер ключ, потому что минимальное подмножествоP
в нем может извлечь все остальные атрибуты в отношенииЧтобы проверить, имеет ли отношение перекрывающуюся зависимость ключа-кандидата:
Проверьте, есть ли какая-либо зависимость, когда ключ «Полный кандидат» определяет ключ «Часть кандидата». Тогда зависимость OCK имеет место
источник