Как разложить схему в 3NF?

Схема R = (A,B,C,D,E)

Функциональная зависимость F1 = {A->BC , CD->E, B->D, E->A}
Функциональная зависимость F2 = {A->D, A->E, DE->BC, B- >А, Г->В}

По F1, ключи-кандидаты - A, E, BC, CD
По F2, ключи-кандидаты - A, B, DE

Условие нахождения схемы в 3НФ:
Для всех X->Y верно хотя бы одно из следующего:
1. X является суперключом
2. X->Y тривиально (что is,Y принадлежит X)
3. Каждый атрибут YX содержится в ключе-кандидате

Я знаю, что R находится в 3NF в соответствии с F1, но не в 3NF в соответствии с F2.

R не находится в 3NF в соответствии с F2, потому что в функциональной зависимости D->C,
1. D не является суперключом
2. D->C не является тривиальным
3. CD, который является C, не является содержится в любых ключах-кандидатах.
Таким образом, R не находится в 3NF согласно F2.

Теперь, как я могу преобразовать его в 3NF?

Я попробовал следующее:
Разложить R на (A,B,D,E) (C,D) (B,C,D,E) таким образом, чтобы зависимость также сохранялась.

Правильно ли это и есть ли другой способ разложения?


person mukund    schedule 13.11.2015    source источник


Ответы (2)


Разложение в третьей нормальной форме вашего примера выглядит следующим образом (после каждой схемы я поставил на нее проекцию функциональных зависимостей):

R1 <(A D E), {A → DE, DE → A}>    
R2 <(B D E), {DE → B, B → DE}> 
R3 <(A B), {B → A, B → A}>     
R4 <(C D), {D → C}> 

Используемый алгоритм представляет собой классический алгоритм Бернштейна. Набросок алгоритма следующий:

  1. Преобразуйте зависимости в каноническую форму: в этом случае результат {A → D, A → E, DE → B, B → A, D → C}
  2. Сгруппируйте зависимости с одинаковой левой частью, в данном случае: {A → DE, DE → B, B → A, D → C}
  3. Из каждой группы произвести разложение, в данном случае: (ADE, DEB, BA, DC)
  4. Проверить, содержится ли отношение в другом (в данном случае этого не происходит)
  5. Проверить, содержится ли хотя бы ключ в подсхеме (правда, так как ключи {DE, B, A})

Обратите внимание, что ваше разложение неверно.

person Renzo    schedule 14.11.2015

  1. После декомпозиции исходное отношение исчезает, а новые компоненты имеют свои собственные FD (функциональные зависимости) и CK (ключи-кандидаты), поэтому вам, возможно, придется продолжать декомпозицию.
  2. Простое разложение по проблемному FD не означает, что проблемных FD больше нет.
  3. Согласно аксиомам Армстронга, когда выполняются одни FD, выполняются и другие. Таким образом, могут быть проблемные FD, которые вам явно не дали.
  4. Декомпозиция может не «сохранить» FD, т. е. ни один компонент не содержит всех атрибутов FD, так что вы можете не правильно декомпозировать, если этот FD проблематичен.

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

person philipxy    schedule 25.05.2017