3

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

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

  • Canonical крышку
  • Закрытие
  • Посторонние атрибут

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

Существует довольно обширный ответ на database refinement - minimal cover of F (extraneous attributes), но мне было трудно прочитать все установленные определения и алгебру, и я бы предпочел иметь определения на простом английском языке.

Например, имея схему U = {А, В, С, D, Е, F, G} и функциональных зависимостей

AB → C

В → Е

CF → D

C → A

B → F

CE → F

→ B, CD-

В → С

Являются замыкания А +, В +, С +, D +, Е + Ж + рассчитывается таким образом?

А + = А

В + = BCDEF

С + = А

D + = D

Е + = Е

F + = F

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

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

I lösningen до detta tal så har BCDEFG зародыши som "prima attribut" och A som "ickeprima" атрибут мужчин resonemanget saknas.

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

ответ

11

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

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

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

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

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

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

Для superkeys: см this SO answer

+0

У меня не было второго пункта в канонических формах :(почему вы сбросили B → F, чтобы быть B → ∅ G → ∅, а также –

+1

Хорошо, я приведу вам пример правильной редукции. для уменьшения FD 'B → F' вы можете видеть, что существуют FD' B → E', 'B → C' и' CE → F'. Поскольку последние три подразумевают 'B → CEF', говорят, что 'F' является посторонним в' B → F'. Что касается 'G → G', атрибут всегда подразумевает сам (' G + 'is' G'), поэтому вы можете удалить правую сторону. –

0

да Canonical покров такой же, как минимальной крышкой. и все затворы являются правильными

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

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

Не все замыкания верны, как указано Лукасом выше. – gtr32x

1

Являются замыкания А +, В +, С +, D +, Е + Ж + рассчитывается таким образом?

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

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

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

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

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

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

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

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

1

Мой ответ получен из алгоритма, приведенной в System Database Concepts по Корт.

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

  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

Как проверить атрибут является постороннее: Атрибут является постороннее в зависимости от альфа (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}) и что верно. Таким образом, 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. Compute 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 'изменен как предыдущий. Если изменить goto step 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

Le Я знаю, если есть некоторая ошибка в логике, предложенная выше.

Смежные вопросы