Функциональные зависимости после нормализации

Я изо всех сил пытаюсь понять один аспект процесса нормализации, я не совсем понимаю, что делать с функциональными зависимостями после того, как я нормализую отношение к 2NF (или 3NF). Позвольте мне описать это на примере.

В упражнении из моего школьного учебника предлагается нормализовать отношение к 2НФ, а затем к 3НФ. Нам дано отношение

R=(ABCDEF), F={AD->FE, BC->E, FEA->D, AC->DE, F->E, BD->A, F->C, ABC->AEF, B ->F}

Следуя книге, я минимизировал функциональные зависимости до

F = {AD->F, AC->D, BD->A, F->E, F->C, B->F}

Что должно быть правильно, так как я проверял это несколько раз. Теперь мы можем найти ключи:

{АВ} и {БД}

Далее я вижу, что

B->F

Нарушает 2NF, так как неключевой атрибут зависит от части ключа. Итак, нам нужно «разделить» наше отношение на две новые таблицы:

R1 = (БФЭК) и R2 = (АБД)

Вот где я теряюсь. Эти новые таблицы должны «наследовать» функциональные зависимости, поэтому моя идея состояла в том, чтобы сделать это следующим образом:

F1 = {F->E, F->C, B->F} и F2 = {BD->A}

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

AD->F, AC->D

Что я понятия не имею, куда пристроиться. Я пытался найти какую-то теорию, стоящую за этим, но пока безуспешно.

Может ли кто-нибудь объяснить мне, как мне выяснить новые функциональные зависимости для каждой новой таблицы, которую я создаю в процессе нормализации?

Спасибо.


person kubope    schedule 22.01.2018    source источник
comment
Этот вопрос, вероятно, слишком теоретический для переполнения стека.   -  person tadman    schedule 22.01.2018
comment
Вот где я заблудился. Я думаю, что это было немного раньше. Чтобы решить проблему с B->F, используйте проекцию для формирования нового отношения. Это дает вам {ABCDE} (ключи-кандидаты — AB и BD) и {BF} (ключ-кандидат — B).   -  person Mike Sherrill 'Cat Recall'    schedule 22.01.2018


Ответы (1)


Предположим, мы хотим выполнить декомпозицию без потерь, чтобы FD (функциональная зависимость), которая сохраняется в исходном отношении, также сохранялась в одном из компонентов и, таким образом, сохранялась в их соединении. Мы можем сделать это, используя атрибуты FD для одного компонента, получая при этом другой компонент, отбрасывая определенные атрибуты из оригинала, если компоненты имеют общие атрибуты CK (ключа-кандидата) одного из них. Вам сказали, что это так. Здесь для проблемных ФД B -> F, что предполагает декомпозицию {ABCDE} & {BF}, так как набор общих атрибутов {B} является CK последнего.

Итак, нам нужно разделить наше отношение на две новые таблицы: R1 = (BFEC) и R2 = (ABD).

Это не разложение без потерь с учетом этих FD, и неясно, почему вы так думаете. (Общие столбцы {B} не содержат CK одного из этих компонентов.)

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

Вы не можете просто взять подмножество FD в обложке, которые удерживают компонент, в качестве обложки для компонента. Вам нужно увидеть, какие из всех исходных FD, которые хранятся, имеют атрибуты компонента и, следовательно, хранятся в компоненте. Почему? Покрытие — это набор FD, которые подразумевают все FD, которые содержат, и никакие другие. В компоненте может быть FD, которого нет на крышке, но который подразумевается наборами FD, которые есть. Если все эти наборы включают в себя FD, атрибуты которых отсутствуют в компоненте, то этот FD не будет подразумеваться подмножеством FD покрытия, имеющим атрибуты в компоненте. Таким образом, это подмножество не будет покрытием для компонента.

Декомпозиция путем отделения некоторой FD, как описано выше, может означать, что некоторая нетривиальная FD, которая выполняется в оригинале, не имеет всех своих атрибутов ни в одном компоненте и, следовательно, не выполняется в них. (Обратите также внимание, что верные ФЗ включают все те, которые вытекают из перечисленных, заданных аксиомами Армстронга, а не только перечисленные.) Тогда, хотя у нас было бы разложение без потерь, мы не могли проверить, что последнее ФЗ выполняется в соединение компонентов, проверив, что оно выполняется в компонентах. Это называется не сохранять этот FD. Но оказывается, что мы всегда можем нормализовать до 3NF, сохраняя FD. Вот почему мы не нормализуем NF (нормальную форму), проходя через более низкие NF или случайным образом выбирая FD, а вместо этого используем алгоритм, специально разработанный для достижения этой NF при сохранении FD.

Найдите и следуйте учебнику по информационному моделированию и реляционным базам данных. (Десятки бесплатных онлайн, а также академические слайды и курсы.)

Вот алгоритм синтеза 3NF Берштейна, сохраняющий FD, из некоторых слайдов Ульмана:

Дано: отношение R и покрытие F для ФЗ, выполненных в R

  1. Найдите C, каноническое покрытие для F
  2. Для каждого FD X -> Y в C создайте связь со схемой XY
  3. Исключите отношение, если его схема является подмножеством другого
  4. Если ни одна из созданных до сих пор схем не содержит CK R, добавьте схему отношения, содержащую CK R.

Поскольку это сохраняет FD, а 3NF подразумевает 2NF, его вывод также является схемой 2NF с сохраненными FD. (Его выход на самом деле находится в EKNF, немного сильнее, чем 3NF.)

person philipxy    schedule 22.01.2018