Предположим, мы хотим выполнить декомпозицию без потерь, чтобы 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
- Найдите C, каноническое покрытие для F
- Для каждого FD X -> Y в C создайте связь со схемой XY
- Исключите отношение, если его схема является подмножеством другого
- Если ни одна из созданных до сих пор схем не содержит CK R, добавьте схему отношения, содержащую CK R.
Поскольку это сохраняет FD, а 3NF подразумевает 2NF, его вывод также является схемой 2NF с сохраненными FD. (Его выход на самом деле находится в EKNF, немного сильнее, чем 3NF.)
person
philipxy
schedule
22.01.2018