Ответ 1
Хотя вопрос старый, другие вопросы/ответы, похоже, не дают очень четкого поэтапного общего ответа на определение и разложение отношений с BCNF.
1. Определение BCNF:
Для того чтобы отношение R находилось в BCNF, все функциональные зависимости (FD), которые содержатся в R, должны удовлетворять свойству, что детерминанты X являются суперклюками R. т.е. Если X- > Y имеет место в R, то X должен быть суперключем R находится в BCNF.
В вашем случае можно показать, что единственным ключом-кандидатом (минимальный суперкласс) является ACE. Таким образом, оба FD: A- > B и C- > D нарушают BCNF, так как и A, и C не являются суперклассами или R.
2. Разложить R в форме BCNF:
Если R не находится в BCNF, мы разлагаем 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 (A, B, C, D, E) разбивается на множество отношений: R1 (A, C, E), R2 (A, B) и R3 (C, D), которые удовлетворяют BCNF.
Заметим также, что в этом случае функциональная зависимость сохраняется, но нормализация BCNF не гарантирует этого.
Надеюсь, это поможет.