2.2 Логическое проектирование реляционных баз данных

 

Отношения реляционной базы данных содержат как структурную, так и семантическую (смысловую) информацию. Структурная информация задается схемой отношения, а семантическая выражается функциональными связями между атрибутами схемы. Группировка атрибутов должна быть рациональной и удовлетворять следующим требованиям:

•  выбранные для отношения первичные ключи должны быть минимальными;

•  выбранный состав отношений должен отличаться минимальной избыточностью атрибутов;

•  между атрибутами не должно быть нежелательных функциональных зависимостей и они должны обеспечивать минимальное дублирование данных;

•  не должно быть трудностей при выполнении операций включения, удаления и модификации (аномалии);

•  перестройка набора отношений при введении новых типов должна быть минимальной.

Пример.

Отношение: Поставка (Название_фирмы, Адрес, Товар, Кол-во, Цена) Избыточность: кортежи отношения многократно дублируют название и адрес фирмы, если она поставляет несколько видов товара, а тем более плохо, если имеется несколько поставок одного вида товара. Аномалии модификации: вследствие избыточности при обновлении необходимо просматривать все отношение для нахождения и изменения всех подходящих строк; изменение адреса фирмы, выполненное не во всех кортежах, относящихся к некоторой конкретной фирме, ведет к нарушению целостности. Аномалии удаления: удаление всех кортежей с поставками от некоторого поставщика приведет к потере адреса и других реквизитов фирмы. Аномалии включения: предположим, что заключен договор, но еще нет поставок от некоторой фирмы: следует ли включать кортежи с пустым (NULL) значением количества? А не забудем ли мы впоследствии удалить строку с неопределенным значением? Таким образом, основная цель логического проектирования базы данных - сокращение избыточности хранимых данных и устранение возможных потенциальных аномалий работы с базами данных.

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

Функциональная зависимость. В отношении R атрибут Y функционально зависит от атрибута X (X и Y могут быть составными) в том и только в том случае, если каждому значению X соответствует в точности одно значение Y: R.X ->R.Y. Например, Табельный номер ->Фамилия; Должность ->Зарплата. Определение 2. Полная функциональная зависимость.

Функциональная зависимость R.X -> R.Y называется полной , если атрибут Y не зависит функционально от любого точного подмножества X.

Неключевой атрибут. Неключевым атрибутом называется любой атрибут отношения, не входящий в состав ключа (в частности, первичного).

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

Взаимно независимые атрибуты. Два или более атрибута взаимно независимы, если ни один из этих атрибутов не является функционально зависимым от других.

Отношение находится в 1NF тогда и только тогда, когда все входящие в него атрибуты являются атомарными (неделимыми). Пример. Сотрудник ( ТабНомер , Фамилия, Имя, Отчество, Дети); Дети имеет внутреннюю структуру.

Отношение находится в 2NF , если оно находится в 1NF и каждый неключевой атрибут функционально полно зависит от первичного ключа. Пример Сотрудник ( ТабНомер , Фамилия, Имя, Отчество, Ребенок); Ребенок не зависит функционально полно от первичного ключа (у одного сотрудника может быть несколько Детей и каждый из них не определяется табельным номером сотрудника).

Действия:

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

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

Отношение находится в 3NF в том и только в том случае, если оно находится в 2NF и каждый неключевой атрибут нетранзитивно зависит от первичного ключа. Пример. Сотрудник ( ТабНомер , Фамилия, Имя, Отчество, Кабинет, ВнутрТелефон). В данном случае ВнутрТелефон зависит не от ТабНомер, а от Кабинет.

Действия:

•  исключаем транзитивно зависимые атрибуты. В данном случае получаем Сотрудник ( ТабНомер , Фамилия, Имя, Отчество, Кабинет);

•  строим одно или несколько дополнительных отношений в которое войдут транзитивно зависимые атрибуты. В данном случае РабочееМесто (Кабинет, ВнутрТелефон).

Отношение находится в нормальной форме Бойса-Кодда (BCNF), если оно находится в 3NF и в нем отсутствуют зависимости ключей или их частей от неключевых атрибутов.

На практике третья нормальная форма схем отношений достаточна в большинстве случаев, и приведением к третьей нормальной форме процесс проектирования реляционной базы данных обычно заканчивается. Существуют также четвертая и пятая нормальные формы. Однако в силу сложности процедур приведения к ним, они на практике широко не используются.

Внешний ключ – это атрибут, который используется для связи с ругой сущностью. Он принимает значение первичного ключа сущности, на которую он ссылается.

Целостность (integrity) понимается как правильность данных в любой момент времени. Поддержание целостности базы данных может рассматриваться как защита данных от неверных изменений или разрушений.

Не допускается, чтобы какой-либо атрибут, участвующий в первичном ключе, принимал неопределенное значение.

Значение внешнего ключа должно либо быть равным значению первичного ключа отношения, с которым он связан, либо быть полностью неопределенным ( NULL ).

Что должно случиться при попытке УДАЛЕНИЯ или ОБНОВЛЕНИЯ экземпляра целевой сущности, на которую ссылается внешний ключ? Существует три возможности:

•  Операция каскадируется – сущности ссылающиеся на данную тоже удаляются (обновляются);

•  Операция ограничивается – разрешается применять операцию только для тех сущностей, на которые нет ссылок;

•  Устанавливается неопределенное значение всех внешних ключей

<<Предыдущий

Содержание

Следующий>>