Нормализация

Оценить
(0 голоса)

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

На практике многие пользователи делают выбор хранения данных в пользу 3NF (Third Normal Form - третьей нормальной формы). Таблица организована в 3NF, если:

•             Пересечение каждой строки и столбца в таблице (или "реляции") содержит одно и только одно значение (First Normal Form - первая нормальная форма).

•             Каждый не первичный ключевой атрибут полностью функционально зависим от первичного ключа (Second Normal Form - вторая нормальная форма при условии, что первая нормальная форма также верна).

•             Никакой из непервичных ключевых атрибутов не зависит транзитивно от первичного ключа.

Рассмотрим, например, что произойдет, если мы разместим в базе данных сведения о семье.

В 5-1 показана семья, данные которой сохранены в виде одной таблицы.

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

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

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

Последний этап, третья нормальная форма, приводит к окончательным таблицам .супругов и детей, как показано в таблицах 5-6 и 5-7.

Нормализация приводит к тому, что для ответа на вопросы возникает необходимость в табличных объединениях. Например, для нахождения имен (name) и дат рождений детей (birth_date) Джона Смита (John Smith) необходимо объединение таблицы детей и таблицы данных о семье. В SQL это может выглядеть следующим образом:

select a.name, a.birth_date

from family a, child b, family с

where c.name = John Smith and c.id = father_id

and a.id = b.id;

Иногда, исходя из соображений производительности, пользователи выбирают частичную денормализацию некоторых таблиц. Например, таблица детей второй нормальной формы допускает возможность нахождения имен детей Джона Смита без объединения. Базы данных OLTP обычно нормализированы; базы данных DSS иногда бывают денормализированы, жертвуя при этом возможностями обслуживания в пользу устойчивой производительности.

Механизм базы данных
Оптимизатор запросов
Базы данных
Dynamic ISM
Регистратор

Добавить комментарий


Защитный код
Обновить