Databases. Part XV «О ненормальных отношениях»

Databases. Part XV «О ненормальных отношениях»

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

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

Испытание простотой: Первая нормальная форма.

Здесь отношения проверяют на неделимость и простоту данных в столбцах. Короче говоря, если один столбец можно разбить на два, три, и т. д., то это нужно сделать. Например, такие столбцы как адрес, Ф. И.О, расписание, нужно обязательно разбивать на более простые:

Когда данные в столбцах не нужно делить, это во многом облегчает доступ к ним. Для того чтобы получить имя сотрудника, вместо того, чтобы выбирать посимвольно из поля Ф. И.О, или определять когда закончилась фамилия и началось отчество, нужно просто обратиться к полю Имя.

Для отношений с составным первичным ключом: Вторая нормальна форма.

Цель второй нормальной формы, определить функциональные зависимости между столбцами таблицы (атрибутами) и не допустить, чтобы какой либо атрибут зависел не от первичного ключа. Понятие функциональной зависимости следующее: предположим, есть атрибуты A и B, можно сказать, что B функционально зависит от A, если для каждого значения атрибута B есть конкретное значение атрибута A.

А теперь еще раз :whistle: Заменим термин «B функционально зависит от A» выражением «A определяет B». Тогда первичный ключ должен определять все остальные атрибуты отношения. Смотрим пример:

Аттестация (Код учащегося, Фамилия, Имя, Отчество, Предмет, Оценка)

Ищем функциональные зависимости:

Расшифровывая функциональную зависимость Код учащегося + Предмет -> Оценка, видно, что для каждой оценки существует конкретная пара значений Предмет, Учащийся. Или учащийся и сдаваемый им предмет определяют оценку.

Однако атрибуты Фамилия, Имя и Отчество от предмета совершенно не зависят, и функциональная зависимость наблюдается только от части ключа (Код учащегося). Поэтому отношение придется нормализовать, разбив на два самостоятельных отношение:

Учащиеся (Код учащегося, Фамилия, Имя, Отчество)

Аттестация (Код учащегося, Предмет, Оценка)

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

Если в отношении завелся транзитив: Третья нормальная форма.

Цель третьей нормальной формы – исключить транзитивные зависимости. Предположим в отношении три атрибута A, B и С, атрибут B функционально зависит от А, а атрибут С – от B, тогда функциональная зависимость C от A является транзитивной. Все понятно?? :D

Короче говоря, если функциональная зависимость устанавливается не напрямую, а через какой-то другой атрибут – это транзитив!! Посмотрим действие третьей нормальной формы на примере:

Сотрудники (Код сотрудника, Фамилия, Номер отдела, Должность, Оклад)

Предположим, что в одном отделе у сотрудников одного отдела для каждой должности определен конкретный оклад. Тогда зарплата зависит не только от конкретного сотрудника, но и отдела, в котором он работает, и от занимаемой должности:

Получается следующая транзитивная зависимость:

Устраняется транзитивная зависимость также как и в предыдущем примере, нужно разбить отношение на два самостоятельных отношения:

Сотрудники (Код сотрудника, Фамилия, Номер отдела, Должность)

Зарплата (Номер отдела, Должность, Оклад)

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


Карта сайта


Информационный сайт Webavtocat.ru