Достижение BCNF путем разложения
Вот две функциональные зависимости, которые справедливы для R.
R (A, B, C, D, E) {ABCD-> E, E-> A}
Ответ моего друга заключается в том, что он может быть разложен на BCNF.
R1 (B, C, D, E) {BCD-> E}
R2 (A, E) {E-> A}
Однако я думаю, что это не может быть правдой, потому что исходная функциональная зависимость ABCD-> E не сохранилась. Поэтому, на мой взгляд, R нельзя разложить на BCNF, поскольку исходная функциональная зависимость ABCD-> E не сохранилась. Я прав или нет?
2 ответа
(В первой версии этого вопроса вы говорите: "Первичный первичный ключ был сломан". Вы, вероятно, имеете в виду, что исходная FD (функциональная зависимость) была "сломана". (В противном случае ваше утверждение не имеет смысла. Вместо того, чтобы писать / думать нечеткие вещи, такие как "сломанный", приложите усилия, чтобы написать / подумать что-то ясное и точное, используя соответствующие технические термины. Например, когда компоненты удовлетворяют своим FD, их объединение не обязательно удовлетворяет этому первоначальному FD. случается, более специализированная фраза: FD не сохранился.)
Мы всегда можем нормализовать до BCNF. Но не обязательно сохранение всех FD.
Если кто-то утверждает, что декомпозиция относится к BCNF, и что определенные FD хранятся в компонентах, то они должны подтвердить это, показав, как они получили это из алгоритма декомпозиции BCNF. (Есть другие способы доказать это из определений, и именно так алгоритмы были доказаны для работы.) Вы можете разложить на эти компоненты, и A->E выполняется в R2, но BCD->E не выполняется в R1. И ABCD->E не сохранился. Нет способа сохранить его при разложении на более мелкие компоненты, потому что ни у одного меньшего компонента нет всех этих атрибутов.
Вы также можете показать, что {R1,R2} является разложением R без потерь с помощью теоремы, которая говорит, что двоичное разложение без потерь, если (если и только если) общие столбцы включают CK (ключ-кандидат) одного из них. Здесь общим набором столбцов является {E}, который включает себя, который является CK R2, поэтому декомпозиция без потерь. Вы можете показать, что они оба в BCNF через определение BCNF. Здесь в каждом компоненте все детерминанты нетривиальных FD являются надмножеством CK, поэтому каждый находится в BCNF.
Компоненты всегда являются проекциями оригинала, которые присоединяются к нему. Таким образом, в любой бизнес-ситуации, в которой оригинал был бы установлен на определенное значение, компоненты будут настроены на проекции и будут присоединены к оригиналу. Таким образом, ФД будет держать в соединении. Но если FD не сохраняется, тогда, если мы ограничиваем (проверка ошибок) попытки обновления компонентов по их FD, тогда мы не заканчиваем тем, что ограничиваем (проверка ошибок) оригинал по этому FD. Поэтому, чтобы предотвратить ошибочные обновления компонентов и присоединения, нам нужно добавить другое ограничение.
PS Теперь вы можете спросить себя, почему вы думаете, что у вас есть мнение о том, что FDs сохраняются в BCNF? По математике у нас нет мнений, у нас есть доказательства теорем. Если вы считаете, что можете показать или указать, что это неправильно, спросите, правильно ли это обоснование. Если у вас нет доказательств или справки, не думайте, что у вас есть мнение. Если вы на самом деле не имеете в виду, что у вас есть мнение, то не говорите, что делаете, говорите, что имеете в виду. Также на будущее - как ты мог ответить на это? Вам, должно быть, дали ссылку, и многие из них доступны, в том числе бесплатно онлайн. Вы узнали кое-что о BCNF. Если бы вы прочитали весь раздел о BCNF, он бы сказал, что FD не всегда могут быть сохранены. Поэтому, пожалуйста, сделайте должное исследование, прежде чем задать вопрос.
R может быть разложен в BCNF. Используя алгоритм классического анализа, получается:
R1(A, E) {E → A}
а также
R2 (B, C, D, E) {}
Но разложение вызывает потерю зависимости A B C D → E
, Обратите внимание, что декомпозиция в вашем вопросе все еще находится в BCNF, но все же эта декомпозиция приводит к потере той же зависимости (и в R1 зависимость B C D → E
не держит).