Как разложить таблицу на 3NF и BCNF
Я нашел отношение таким образом - CUSTOMER (NAME, STREET, CITY, STATE, ZIP)
Которые используют аббревиатуру для каждого следующего способа,
Name - N
STREET - R
CITY - C
STATE - T
ZIP - Z
И учитывая F = {N->RCT, RCT->Z, Z->CT}
И вопрос разлагается на 3NF
а также BCNF
,
Я разлагаю это на 3NF
Здесь я рассмотрел практический способ,
R1(N,R,Z)
R2(Z,C,T)
Это правильно?
Или я должен учитывать только данные функциональные зависимости для декомпозиции. Если я так думаю и разлагаю на 3NF
тогда ответ будет
R1(N,R,C,T)
R2(R,C,T,Z)
Пожалуйста, кто-то посоветуете мне, какой путь правильный.
1 ответ
Ваше первое разложение не правильно, в то время как второе. Для декомпозиции в 3NF на первом этапе алгоритма "синтеза" необходимо найти каноническое покрытие набора зависимостей, а затем сгруппировать зависимости, найденные в группах с одинаковой левой частью.
Поскольку в ваших зависимостях нет избыточных зависимостей или лишних атрибутов, мы можем начать с трех зависимостей, которые имеют различную левую часть, создавая три отношения:
from N → RCT, R1 (N, R, C, T), with key N
from RCT → Z, R2 (R, C, T, Z), with key RCT
from Z → CT, R3 (C, T, Z), with key Z
затем, отметив, что третье отношение полностью содержится во втором, мы можем устранить его. Последний формальный шаг алгоритма требует, чтобы мы проверяли, присутствует ли в некотором разложенном отношении ключ исходного отношения (в противном случае следует добавить новое отношение с ключом). Это правда, так как Z
это такой ключ, который присутствует во втором отношении. Итак, окончательное разложение:
R1 (N, R, C, T), with key N
R2 (R, C, T, Z), with key RCT
Обратите внимание, что, применяя алгоритмы "анализа", чтобы найти BCNF, мы получаем другое решение:
R1 <(N, R, C, T),
{ N → RCT }>
R2 <(C, T, Z),
{ Z → CT } >
R3 <(R, Z),
{ } >
но в этом разложении функциональная зависимость CRT → Z
потерян.