20

У меня возникли проблемы с установлением, когда отношение находится в нормальной форме Boyce-Codd и как разложить его информацию BCNF, если это не так. Учитывая этот пример:Разложение отношения в BCNF

R (A, C, B, D, E) с функциональными зависимостями: A -> B, C -> D

Как я могу идти о разлагая его?

Шаги, которые я взял являются:

A+ = AB 
C+ = CD 
R1 = A+ = **AB** 
R2 = ACDE (since elements of C+ still exist, continue decomposing) 
R3 = C+ = **CD** 

R4 = ACE (нет FD укупорочные находятся в этом отношении)

Так что теперь я знаю, что ACE будет составлять все отношения, но ответ на разложение: AB, CD, ACE.

Я полагаю, что я борюсь с тем, как правильно разложить отношение в форме BCNF и как сказать, когда вы закончите. Был бы действительно оценен любой, кто может пройти меня через их мыслительный процесс при решении этих проблем. Благодаря!

+0

Вы прочитали все эти вопросы о BCNF на боковой панели? –

+0

Я прочитал один пример, который, кажется, помогает с разложением. Думаю, я понимаю, что эта часть в порядке, но я все еще немного смущен, когда вы полностью разложились. Это когда ваши отношения больше не включают все атрибуты в закрытие одной из ваших функциональных зависимостей? – raphnguyen

+0

Отношение находится в BCNF, когда каждая «стрелка» в каждой функциональной зависимости является «стрелкой» из ключа-кандидата. –

ответ

83

Хотя вопрос старен, другие вопросы/ответы, похоже, не дают очень четкого поэтапного общего ответа на определение и разложение отношений с BCNF.

1. Определить BCNF:
Для отношения R быть в НФБК, все функциональные зависимости (FDS), которые держат в R должны удовлетворять свойством, что детерминанты X являются все superkeys из R. т.е. если Х- > Y выполняется в R, то X должно быть суперклейкой R в BCNF.

В вашем случае может быть показано, что единственным ключом кандидата (минимальный суперкласс) является ACE. Таким образом, оба ФД: А-> В и С-> D нарушают НФБК, как и А и С не являются superkeys или Р.

2. Разобрать R в виде НФБК:
Если R не находится в НФБК , мы разложим R на множество отношений S, которые находятся в BCNF.
Это может быть достигнуто с помощью очень простого алгоритма:

Initialize S = {R} 
While S has a relation R' that is not in BCNF do: 
    Pick a FD: X->Y that holds in R' and violates BCNF 
    Add the relation XY to S 
    Update R' = R'-Y 
Return S 

В вашем случае итеративные шаги заключаются в следующем:

S = {ABCDE}  // Intialization S = {R} 
S = {ACDE, AB} // Pick FD: A->B which violates BCNF 
S = {ACE, AB, CD} // Pick FD: C->D which violates BCNF 
// Return S as all relations are in BCNF 

Таким образом, R (А, В, С, D, Е) разлагается в набор соотношений: R1 (A, C, E), R2 (A, B) и R3 (C, D), который удовлетворяет BCNF.

Обратите также внимание, что в этом случае функциональная зависимость сохраняется, но нормализация BCNF не гарантирует этого.

Надеюсь, это поможет.

+3

Ваше объяснение и пошаговая итерация были идеальными. Спасибо –

+0

Помните, что вам нужно сохранить функциональные зависимости вдоль 'R', потому что вам нужно проанализировать кортеж' (R ', Σ') 'на каждой итерации. Итак, 'S' должен выглядеть так:' S = [(R_1, Σ_1); (R_2, Σ_2); ...; (R_n, Σ_n)} '. Я также рекомендую обновить 'R'' таким образом, что« R »= X (R '- Y)'. – Pengxer

1

1NF -> 2НФ -> 3NF -> BCNF

Согласно данным FD набор "ACE" формы ключа. Очевидно, что R (A, B, C, D, E) не находится в 2NF. Разложение 2NF дает R1 (A, B), R2 (C, D) и R3 (A, C, E). Эти разложения разложили отношения в 3NF, а также в BCNF.

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