ключи-кандидаты от функциональных зависимостей - PullRequest
26 голосов
/ 27 апреля 2010

Учитывая отношение R с атрибутами ABCDE. Вам даны следующие зависимости: A -> B, BC -> E и ED -> A. У меня уже есть ответ CDE, ACD и BCD. Мне просто нужно знать, как это сделать. Благодарю.

Ответы [ 4 ]

67 голосов
/ 30 января 2013

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

Поскольку у нас есть функциональные зависимости: A -> B, BC -> E и ED -> A, у нас есть следующие суперключи:

  • ABCDE (все атрибуты всегда супер-ключ)
  • BCED (Мы можем получить атрибут A через ED -> A)
  • ACDE (просто добавьте от B до A -> B)
  • ABCD (просто добавьте E через BC -> E)
  • ACD (Мы можем получить B через A -> B, а затем мы можем получить E через BC -> E)
  • BCD (Мы можем получить E через BC -> E, а затем A из ED -> A)
  • CDE (мы можем получить A через ED -> A и затем B из A -> B)

(Здесь нужно понять, что C и D никогда не появляются в правой части функциональной зависимости, каждый ключ должен включать в себя как C, так и D)

Теперь, когда у нас есть все наши супер-ключи, мы можем видеть, что только последние три являются ключами-кандидатами. Так как первые четыре все можно урезать. Но мы не можем отобрать какие-либо атрибуты у последних трех суперключей и все же оставить их в качестве суперключей.

Таким образом, ключи-кандидаты: ACD, BCD и CDE.

Надеюсь, это поможет,

10 голосов
/ 01 мая 2014

Чтобы найти ключ-кандидат, вам нужно разделить FD по атрибутам на Left, Middle, Right - Левый содержит атрибуты, которые отображаются только в левой части (CD) - Средняя включает атрибуты, которые отображаются как слева, так и справа (АБЕ) - Право включает в себя атрибуты, которые отображаются только в правой части (нет)

Теперь найдите закрытие атрибутов слева: * CD + -> CD Поскольку мы не получаем все атрибуты отношения, нам нужно добавлять атрибуты Middle (ABE) по одному и пытаться снова найти замыкание.

Итак: * CDA + -> CDABE (CDA является ключом-кандидатом) * CDB + -> CDBEA (CDB - ключ-кандидат) * CDE + -> CDEAB (CDE - ключ-кандидат)

0 голосов
/ 28 марта 2018

Использовать алгоритм;

1. Возьмите любой атрибут или набор атрибутов

Например: ACD

2. Возьмите первую упомянутую функциональную зависимость

Например: A -> B

3. Является ли L.H.S зависимости подмножеством атрибутов, выбранных вами на шаге 1?

Если да, добавьте R.H.S функциональной зависимости к атрибуту. Если нет, игнорируйте эту функциональную зависимость.

Например: A является подмножеством ACD. Поэтому добавьте B в ACD. ACD теперь ABCD

4. Теперь перейдите к следующей функциональной зависимости. Повторите шаг 3.

Например: BC -> E BC является подмножеством ABCD. Итак, ABCD теперь ABCDE

5. Если у вас есть все атрибуты сейчас, вы можете остановиться.

Если у вас нет всех атрибутов, продолжайте переходить к следующей функциональной зависимости и повторите шаг 3. Если вы достигли последней функциональной зависимости и не имеете всех атрибутов, вернитесь к первой функциональной зависимости и повторите шаги 3 и 4. Продолжайте цикл в этом цикле, пока набор ваших атрибутов не изменится, независимо от функциональной зависимости, с которой вы повторяете шаг 3.

Например: поскольку у меня есть ABCDE для набора атрибутов ACD, я могу остановиться.

Если у вас есть все атрибуты, у вас есть суперключ. Например: ACD - это суперключ, потому что у меня есть ABCDE.

0 голосов
/ 24 декабря 2010

CD является ключом-кандидатом, поэтому ACD, BCD, CDE могут быть ключами-кандидатами. C, D не появляются в правой части каких-либо функциональных зависимостей, поэтому CD является ключом-кандидатом.

Это поможет вам понять.

...