Базы данных

Выявление функциональных зависимостей


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

Читатели, вероятно, уже знакомы с логическим выводом логических выражений. В процессе вывода применяются правила вывода, т.е. из множества истинных утверждений можно вывести другие утверждения, которые также являются истинными.

Обычно при разработке схем используются шесть правил вывода для определения функциональных зависимостей. Предположим, что W, X, Y и Z — это множества, участвующие в функциональных зависимостях, a XY — это объединение множеств X и Y.

Первые три правила называются аксиомами Армстронга (Armstrong) и были впервые предложены в его статье в 1974 году [Агш74]. Армстронг показал, что с помощью этих трех правил можно вывести правила 4 и 5.

Эти правила можно объяснить на примере схемы и функциональных зависимостей, представленных на 5.5. Схема Purchaselnfo хранит информацию о заказах на приобретение видеокассет.

Purchaselnfo: (purchaseOrderId, supplierld, supplierName, street, city, state, zipcode, movield, title, quantity,

dateOrdered)

FD1: purchaseOrderld —> {supplierld, dateOrdered }

FD2: supplierld —> supplierName FD3: supplierld — {street, zipcode}

FD4: zipcode —> {city, state}

FD5: {street, city, state} —> zipcode FD6: movield —> title FD7:{title, dateOrdered} —> quantity FD8: title —> movield

На 5.6 показаны шесть функциональных зависимостей, которые можно вывести из множества функциональных зависимостей 5.5 с помощью применения правил вывода. Правило рефлексивности означает, что множество атрибутов X функционально определяет любое свое подмножество Y; функциональная зависимость FD9 является следствием применения правила рефлексивности, которое позволяет удалить атрибут purchaseOrderld из левой части. Правило расширения означает, что можно добавить атрибуты к обеим частям функциональной зависимости; атрибут dateOrdered был добавлен к обеим частям зависимости FD4, в результате получилась зависимость FD10. Для вывода зависимости FD11 использовалось правило транзитивности, так как supplierld функционально зависит от purchaseOrderld, a supplierName функционально зависит от supplierld.

Комментарии закрыты