Что такое каноническое покрытие, замыкание и посторонний атрибут?

Я изучаю понятия базы данных, и есть 3 понятия, которые я не понимаю. Каноническая обложка, посторонняя функциональная зависимость и замыкание. Я прочитал определение о каноническом покрытии, но я не понимаю, как оно относится к 3NF и BCNF. Кажется, что определение канонического покрытия состоит в том, что нет никаких посторонних атрибутов, а посторонние атрибуты означают атрибуты, которые не изменяют закрытие набора функциональных зависимостей, а закрытие - это набор всех функциональных зависимостей, подразумеваемых F, набор функциональных зависимостей,

Но все это немного нечетко, и я хотел бы как интуитивное определение и как рассчитать

  • Каноническая обложка
  • закрытие
  • Посторонний атрибут

Функциональные зависимости. Мне кажется, я понимаю, что это такое, как если бы у нас были эти атрибуты в таблице.

Существует довольно обширный ответ при уточнении базы данных - минимальное покрытие F (посторонние атрибуты), но мне было трудно читать все определения множеств и алгебру, и я бы предпочел иметь определения на простом английском языке.

Например, имея схему U={A,B,C,D,E,F,G} и функциональные зависимости

AB → C

B → E

CF → D

C → A

B → F

CE → F

CD → B

B → C

Рассчитываются ли таким образом замыкания A+,B+,C+,D+,E+,F+?

A + = A

B + = BCDEF

C + = A

D + = D

E + = E

F + = F

? Если я не ошибаюсь, BCDEFG - это супер-ключ ("весь ключ") в 1NF/2NF, но минимален ли он (3NF)?

Что еще нужно сделать, чтобы нормализовать этот пример для 1NF, 2NF и 3NF с помощью замыканий и канонического покрытия? Является ли каноническое покрытие таким же, как минимальное?

Я люблю до детства, когда BCDEFG приписывает сом ”prima attribut” och som ”ickeprima” attribut men resonemanget saknas.

Спасибо за любую помощь

4 ответа

Решение

Я знаю, что опаздываю, но, может быть, кто-нибудь когда-нибудь заскочит.

Я думаю, что вы сделали несколько ошибок:

Для закрытий:

  • B+ должно быть ABCDEF скорее, чем BCDEF из-за ФД C → A
  • C+ должно быть AC (закрытие атрибута всегда содержит себя)
  • G+ является Gсм. причину второй пули

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

  1. Уменьшение влево: попробуйте удалить все атрибуты левой стороны стрелки, которые не нужны для создания одинакового замыкания. Чтобы сделать первый пример, AB → CВы можете рассчитать ABзакрытие, которое будет ABCDEF, Затем вы пытаетесь удалить Aзаканчивая B → C, Теперь вы рассчитываете закрытие B только, который до сих пор ABCDEF -> вы можете удалить A. В конце этого шага ваш FD должен выглядеть следующим образом {B → C, B → E, C F → D, C → A, B → F, C E → F, C D → B, B → C, G → G},
  2. Теперь вы делаете то же самое для правой стороны. Обратите внимание, что вы можете удалить все атрибуты здесь, если хотите, заканчивая пустым набором. Как пример, посмотрите на B → F: закрытие B является ABCDEF, Если вы удалите F от функциональной зависимости, заканчивая B → ∅Вы все еще получили такое же закрытие для B как прежде. Повторите это для других FD. Вы должны в конечном итоге {B →∅, B → E, C F → D, C → A, B →∅, C E → F, C D → B, B → C, G →∅},
  3. Удалить все FD формы X → ∅, Вы в конечном итоге {B → E, C F → D, C → A, C E → F, C D → B, B → C},
  4. Объедините все FD, которые имеют одинаковую левую сторону стрелки, что приводит к каноническому покрытию {B → C E, C F → D, C → A, C E → F, C D → B},

Для суперключей: посмотрите этот ТАК ответ

Мой ответ получен из алгоритма, приведенного в "Концепциях системы баз данных" Корта.

Рассчитываются ли таким образом замыкания A+,B+,C+,D+,E+,F+? Шаги для вычисления замыкания (A,B,C,D,E,F) под F, скажем, принять для B

  1. результат = {B}
  2. повторение
  3. для каждой функциональной зависимости (например, B -> E) в F делать
  4. начать
  5. если B является подмножеством результата
  6. затем result(i.e B) = result(i.e B) U {E}
  7. конец
  8. до (результат перестает меняться)

Таким образом, замыкания следующего будут: A + = A

B + = ABCDEF

C + = AC

D + = D

E + = E

F + = F

Как проверить атрибут является посторонним: атрибут A является посторонним в зависимости альфа (AB) -> бета (C), если

1) A принадлежит бета-версии (чего нет в текущем случае), затем создайте новый FD F' = (F-{alpha -> beta}) U {alpha -> (beta - alpha)}и проверьте, если alpha+ under F'(**not F**) includes A, затем A посторонний в beta,

2) А принадлежит альфе (что правильно), затем создайте новый gamma{B} = alpha({AB}) - {A} и проверьте, если gamma+(i.e B+) под **F** i.e ABCDEF включает в себя все атрибуты в beta({C}) и что это правда. Так что А посторонний в AB->C,

аналогичным образом проверьте, если C посторонний в AB->C, Таким образом, предложенный выше алгоритм

  1. F' : AB -> NULL; B →E; CF →D; C →A; B →F; CE →F; CD →B; B →C
  2. вычисление AB+ под F' т.е. ABCDEF который включает в себя C, Так Cпосторонний в AB-> C,

Как вычислить каноническое покрытие?

Algo:

  1. F' = F
  2. Если есть какой-либо FD, как A->B and A->C затем заменить на A->BC(по правилам объединения) Здесь F'становятся: AB -> C; B-> CEF; C -> A; CD-> B; CE-> F; CF-> D
  3. Найти постороннее (влево / вправо) в F'т.е. A is extraneous in AB->C так удали A from AB->C так, чтобы это стало B->C и обновить F',
  4. Теперь проверьте, не изменился ли F'как предыдущий. Если изменено, переходите к шагу 2 и повторяйте, пока F не перестанет меняться.

(Объясняя дальнейшие итерации, как показано ниже: itr2:F' : B -> C; B-> CEF; C -> A; CD-> B; CE-> F; CF-> DF' : B-> CEF; C -> A; CD-> B; CE-> F; CF-> DСейчас проверю C in B-> CEF, который не является посторонним Проверьте E, который также не является посторонним. проверьте F, который является посторонним. Так новый F' : B-> CE; C -> A; CD-> B; CE-> F; CF-> D

itr3:F' : B-> CE; C -> A; CD-> B; CE-> F; CF-> Dпосле этого больше никаких посторонних признаков не найдено.

Итак, каноническое покрытие F:

B-> CE

C -> A

CD-> B

CE-> F

CF-> D

Дайте мне знать, если есть ошибки в логике, предложенной выше.

Рассчитываются ли таким образом замыкания A+,B+,C+,D+,E+,F+?

Что случилось с "G"? Его отсутствие здесь значимо. Ты знаешь почему?

Если я не ошибаюсь, BCDEFG - это супер-ключ ("весь ключ") в 1NF/2NF, но минимален ли он (3NF)?

Суперключ (одно слово, без пробелов) не означает весь ключ; это просто означает ключ. Набор всех атрибутов является тривиальным суперключем, поэтому {ABCDEFG} является тривиальным суперключем.

Поскольку B->C и C->A (транзитивная зависимость), вы можете уменьшить тривиальный суперключ до {BCDEFG}. Возможно еще несколько сокращений, поэтому {BCDEFG} не является минимальным суперключем. {BCDEFG} - приводимый суперключ.

Один из минимальных суперключей - {BG}. (Я мог бы сказать: "{BG} - неприводимый суперключ".) Есть и другие минимальные суперключи.

Что еще нужно сделать, чтобы нормализовать этот пример для 1NF, 2NF и 3NF с помощью замыканий и канонического покрытия?

На случай, если у вас есть общее недопонимание этого, обычно невозможно нормализовать до 2NF и не выше, или нормализовать до 3NF и не выше. Устранение зависимостей частичного ключа ("нормализация до 2NF") может оставить все ваши отношения в 5NF.

Следующим шагом является определение всех возможных ключей (всех неприводимых суперключей).

Да каноническая обложка такая же, как минимальная обложка. и все замыкания правильные

сделать пример в 3NF..

  1. просто найдите каноническое покрытие
  2. сделать отношения каждого отдельного FDS. т.е. если Fc={AB->C,C->D}, тогда сделать R1(ABC) и R2(CD).
  3. Теперь проверьте, содержится ли ключ-кандидат в каком-либо одном отношении. если да, то в 3NF, а если нет, то добавьте еще одно отношение, которое содержит только этот ключ-кандидат. и это сделано..!!