Как разложить таблицу на 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 потерян.

Другие вопросы по тегам