Что такое каноническое покрытие, замыкание и посторонний атрибут?
Я изучаю понятия базы данных, и есть 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
см. причину второй пули
Чтобы рассчитать каноническое покрытие, следуйте этому алгоритму. Вам нужно взглянуть на свой список функциональных зависимостей:
- Уменьшение влево: попробуйте удалить все атрибуты левой стороны стрелки, которые не нужны для создания одинакового замыкания. Чтобы сделать первый пример,
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}
, - Теперь вы делаете то же самое для правой стороны. Обратите внимание, что вы можете удалить все атрибуты здесь, если хотите, заканчивая пустым набором. Как пример, посмотрите на
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 →∅}
, - Удалить все FD формы
X → ∅
, Вы в конечном итоге{B → E, C F → D, C → A, C E → F, C D → B, B → C}
, - Объедините все 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
- результат = {B}
- повторение
- для каждой функциональной зависимости (например,
B -> E
) вF
делать - начать
- если
B
является подмножеством результата - затем
result(i.e B) = result(i.e B) U {E}
- конец
- до (результат перестает меняться)
Таким образом, замыкания следующего будут: 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
, Таким образом, предложенный выше алгоритм
F' : AB -> NULL; B →E; CF →D; C →A; B →F; CE →F; CD →B; B →C
- вычисление
AB+
подF'
т.е.ABCDEF
который включает в себяC
, ТакC
посторонний вAB-> C
,
Как вычислить каноническое покрытие?
Algo:
F' = F
- Если есть какой-либо FD, как
A->B and A->C
затем заменить наA->BC
(по правилам объединения) Здесь F'становятся:AB -> C; B-> CEF; C -> A; CD-> B; CE-> F; CF-> D
- Найти постороннее (влево / вправо) в F'т.е.
A is extraneous in AB->C
так удалиA from AB->C
так, чтобы это сталоB->C
и обновитьF'
, - Теперь проверьте, не изменился ли F'как предыдущий. Если изменено, переходите к шагу 2 и повторяйте, пока F не перестанет меняться.
(Объясняя дальнейшие итерации, как показано ниже:
itr2:F' : B -> C; B-> CEF; C -> A; CD-> B; CE-> F; CF-> D
F' : 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..
- просто найдите каноническое покрытие
- сделать отношения каждого отдельного FDS. т.е. если Fc={AB->C,C->D}, тогда сделать R1(ABC) и R2(CD).
- Теперь проверьте, содержится ли ключ-кандидат в каком-либо одном отношении. если да, то в 3NF, а если нет, то добавьте еще одно отношение, которое содержит только этот ключ-кандидат. и это сделано..!!