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

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

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

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

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

Существует довольно обширный ответ на уточнение базы данных - минимальное покрытие 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)?

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


comment
Причина, по которой вы не понимаете, заключается в том, что перефразирование того, что это такое, неадекватно, нужно найти, запомнить и использовать точные определения. Они неизбежны. (И когда-то заниматься этой алгеброй легче, чем простым английским языком.) PS Это просто просьба к нам переписать учебник / руководство с индивидуальным учебником.   -  person philipxy    schedule 08.06.2019


Ответы (4)


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

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

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

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

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

  1. Сокращение слева: попробуйте удалить все атрибуты левой стороны стрелки, которые не нужны для создания такого же замыкания. Чтобы сделать первый пример, AB → C, вы можете вычислить замыкание ABs, что будет 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}.

Для суперключей: см. этот ответ SO

person Lukas_Skywalker    schedule 31.05.2013
comment
Я не получил вторую точку в канонических формах :( почему вы отбросили B → F, чтобы быть B → ∅ и G → ∅, а также - person F 505; 27.03.2016
comment
Хорошо, я приведу пример правильного сокращения. Если вы попытаетесь уменьшить FD B → F, вы увидите, что существуют FD B → E, B → C и C E → F. Поскольку последние три подразумевают B → C E F, говорят, что F является посторонним в B → F. Что касается G → G, то атрибут всегда подразумевает сам себя (G+ это G), поэтому правую часть можно убрать. - person Lukas_Skywalker; 27.03.2016

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

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

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

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

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

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

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

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

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

person Mike Sherrill 'Cat Recall'    schedule 25.10.2012

Мой ответ основан на алгоритме, приведенном в книге Корта «Концепции системы баз данных».

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

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

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

В+ = АВСДЕФ

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

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

Алгоритм:

  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-> 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

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

person Sanjeev    schedule 29.11.2015

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

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

  1. просто найди каноническую обложку
  2. сделать отношения каждого отдельного fds. т.е.. если Fc={AB->C,C->D}, тогда сделайте R1(ABC) и R2(CD).
  3. Теперь проверьте, содержится ли ключ-кандидат в каком-либо отношении. если да, то в 3NF, а если нет, то добавьте еще одно отношение, которое содержит только этот ключ-кандидат. и готово..!!
person Shreya    schedule 03.06.2012
comment
Не все замыкания верны, как указано Лукасом выше. - person gtr32x; 14.04.2014