Условия первой нормальной формы (1НФ)
Нормализация отношений
Нормализация отношений – это процесс создания оптимальной структуры базы данных за счет удаления излишней, повторяющейся информации. Хорошо разработанная «идеальная» база данных не содержит дублирующей информации, благодаря этому отпадает необходимость отслеживать достоверность данных, размещенных в разных таблицах (отношениях). Такой подход упрощает администрирование базы данных, но приводит к большому количеству таблиц и при извлечении данных приходится составлять громоздкие запросы, которые выполняются в течение длительного времени.
Основы теории нормализации таблиц разработал Э.Ф. Кодд. В общем случае необходимо использовать пять нормальных форм таблиц.
Пример
Рассмотрим БД «Товар».
Наименование товара | Количество | Цена за ед. | Дата поставки | Поставщик | Срок хранения | Емкость (вес) одной упаковки | Вид упаковки | Тип упаковки | Номер накладной |
Нарзан | 24,5 | 01.03.2007 | ООО «Лира» | 6 мес. | 0,5 | Бутылка | Стекло | ||
Пшено | 03.03.2007 | ОАО «Нива» | 12 мес. | 0,5 | Пакет | Бумага | |||
Горчица | 10.03.2007 | ОАО «Восток» | 12 мес. | 0,1 | Банка | Стекло | |||
Тархун | 01.03.2007 | ООО «Лира» | 4 мес. | 1,0 | Бутылка | Пластик | |||
Сокяблочный | 26,5 | 01.03.2007 | ООО «Лира» | 6 мес. | 1,0 | Пакет | Тетра- пак | ||
Рис | 03.03.2007 | ОАО «Нива» | 12 мес. | 1,0 | Пакет | Пластик | |||
Горох | 03.03.2007 | ОАО «Нива» | 12 мес. | 1,0 | Пакет | Бумага | |||
Паста томатная | 10.03.2007 | ОАО «Восток» | 12 мес. | 0,2 | Банка | Жесть |
ER-диаграмму можно представить в следующем виде:
ПРЯМОУГОЛЬНИК – стержневая сущность;
РОМБ – ассоциативная сущность;
ТРАПЕЦИЯ – характеристическая сущность;
ПАРАЛЛЕЛОГРАММ – обозначающая сущность.
В теории БД многие авторы понимают под сущностью не только отображение материального или идеального объекта, но и тип связи, причем сама связь может быть наделена одним или несколькими атрибутами. Таким образом, выделяют три вида сущностей: стержневую, ассоциативную и характеристическую.
Стержневая сущность. Независимая, самодостаточная сущность, которая внутри себя содержит необходимое количество атрибутов, но может также подключать к себе характеристическую сущность (или сущности) и ассоциативную сущность. Стержневая сущность в полной мере соответствует узкому (первому) определению.
Ассоциативная сущность. Интерпретируется как две сущности (в узком понимании), между которыми установлена связь «многие-ко-многим» или связь «многие-ко-многим» с добавленными атрибутами двух сущностей (т.е. ассоциация). Так как ассоциации наделяются атрибутами (а некоторые атрибуты являются ключами), то они могут вступать в связи с другими сущностями и ассоциациями.
Характеристическая сущность. Сущность, которая уточняет своими атрибутами главную стержневую сущность (или ассоциативную сущность). Между характеристической сущностью и стержневой сущностью устанавливается связь «один-к-одному» или «многие-к-одному». Один (или много) экземпляр стержневой сущности получает (получают) от характеристической сущности один или несколько уточняющих атрибутов. В общем случае характеристическая сущность является подчиненной по отношению к стержневой сущности. Самостоятельное существование характеристической сущности, как правило, лишено смысла. Но из всякого правила есть исключения. Существует небольшая группа самостоятельных характеристических сущностей, т.е. есть некоторые универсальные характеристики, которые могут принадлежать нескольким стержневым сущностям. В этом случае можно говорить об обозначающей сущности, т.е. универсальной характеристической сущности. Обозначающая сущность может существовать автономно (не зависеть от стержневой сущности) и представлять собой некоторый справочник.
Следует отметить, что если обозначающая сущность будет определена как стержневая сущность, то большой ошибки не будет.
Пример
Исходная не нормализованная (то есть не являющаяся правильным представлением некоторого отношения) таблица:
ФИО | Данные |
Иванов Иван Иванович | ПП-119 АСУ Муж. 19.01.1990 |
Петров Петр Петрович | Э-119 Электронщики Муж. 1991 |
Васильева Катерина Ильинична | Прикладная Информатика 1990 Жен ПК-129 |
Таблица, приведеннаяк 1NF (являющаяся правильным представлением некоторого отношения):
Фамилия | Имя | Отчество | Пол | Дата рождения | Группа | Специальность |
Иванов | Иван | Иванович | Муж. | 19.01.1990 | ПП-119 | АСУ |
Петров | Петр | Петрович | Муж. | 20.03.1991 | Э-119 | Электронщики |
Васильева | Катерина | Ильинична | Жен. | 17.04.1990 | ПК-129 | Прикладная Информатика |
Примерприведения отношения ко второй нормальной форме
Исходная таблица (1NF):
Фамилия | Имя | Отчество | Пол | Дата рождения | Группа | Специальность |
Иванов | Иван | Иванович | Муж. | 19.01.1990 | ПП-119 | АСУ |
Петров | Петр | Петрович | Муж. | 20.03.1991 | Э-119 | Электронщики |
Васильева | Катерина | Ильинична | Жен. | 17.04.1990 | ПК-129 | Прикладная Информатика |
Петров | Илья | Петрович | Муж. | 20.05.1991 | Э-119 | Электронщики |
Данные, находящиеся в столбцах «Группа» и «Специальность» могут повторяться в процессе заполнения много раз, что вызовет избыточность данных в таблице. Следовательно, данную таблицу можно разделить на 3 сущности, имеющие отношения между собой.
В результате приведения к 2NF получаются три отношения:
1) Таблица с данными о студенте:
Фамилия | Имя | Отчество | Пол | Дата рождения |
Иванов | Иван | Иванович | Муж. | 19.01.1990 |
Петров | Петр | Петрович | Муж. | 20.03.1991 |
Васильева | Катерина | Ильинична | Жен. | 17.04.1990 |
Петров | Илья | Петрович | Муж. | 20.05.1991 |
2) Список групп:
Группа |
ПП-119 |
Э-119 |
ПК-129 |
Э-119 |
3) Список специальностей:
Специальность |
АСУ |
Электронщики |
Прикладная Информатика |
Электронщики |
Целостность данных
Одно из основных требований к проектируемой базе данных – в любой момент времени данные должны быть достоверными, полными и непротиворечивыми. На уровне целостности данных обеспечивается полнота данных. То есть каждая стержневая (или ассоциативная) сущность должна обладать полным комплектом атрибутов, хранящихся в экземплярах характеристических и обозначающих сущностей. Полнота данных или целостность (integrity) в базах данных обеспечивается специальными механизмами, суть которых будет рассмотрена ниже.
Ссылочная целостность – это обеспечение непротиворечивого соответствия между значением первичного ключа характеристической сущности и значением внешнего ключа стержневой сущности.
Целостность данных может быть обеспечена по трем направлениям:
- целостность по сущностям. Здесь имеется в виду целостность атрибутов внутри каждого экземпляра сущности. В данном случае более корректно говорить о достоверности и непротиворечивости атрибутов внутри экземпляра сущности;
- целостность по ссылкам. В этом случае контролируется правильность установления связей между сущностями в соответствии с приведенным выше определением. Здесь решается вопрос о возможности выполнения каскадных операций удаления экземпляров сущностей (или редактирования значения внешних ключей), о запрете каскадных воздействий, о назначении пустых (null) значений внешним ключам;
- целостность, определяемая пользователем. Для каждого приложения базы данных могут определяться (и они определяются) конкретные правила определения условий ссылочной целостности.
По любому из указанных направлений ссылочная целостность может контролироваться при всех операциях, изменяющих информацию в базе данных, при этом возможны следующие варианты обработки событий:
- отсутствие проверки;
- проверка допустимости;
- запрет операции;
- каскадное выполнение операций обновления или удаления данных одновременно в нескольких связанных сущностях;
- установка пустого (null) значения по умолчанию.
Нормализация отношений
Нормализация отношений – это процесс создания оптимальной структуры базы данных за счет удаления излишней, повторяющейся информации. Хорошо разработанная «идеальная» база данных не содержит дублирующей информации, благодаря этому отпадает необходимость отслеживать достоверность данных, размещенных в разных таблицах (отношениях). Такой подход упрощает администрирование базы данных, но приводит к большому количеству таблиц и при извлечении данных приходится составлять громоздкие запросы, которые выполняются в течение длительного времени.
Основы теории нормализации таблиц разработал Э.Ф. Кодд. В общем случае необходимо использовать пять нормальных форм таблиц.
Пример
Рассмотрим БД «Товар».
Наименование товара | Количество | Цена за ед. | Дата поставки | Поставщик | Срок хранения | Емкость (вес) одной упаковки | Вид упаковки | Тип упаковки | Номер накладной |
Нарзан | 24,5 | 01.03.2007 | ООО «Лира» | 6 мес. | 0,5 | Бутылка | Стекло | ||
Пшено | 03.03.2007 | ОАО «Нива» | 12 мес. | 0,5 | Пакет | Бумага | |||
Горчица | 10.03.2007 | ОАО «Восток» | 12 мес. | 0,1 | Банка | Стекло | |||
Тархун | 01.03.2007 | ООО «Лира» | 4 мес. | 1,0 | Бутылка | Пластик | |||
Сокяблочный | 26,5 | 01.03.2007 | ООО «Лира» | 6 мес. | 1,0 | Пакет | Тетра- пак | ||
Рис | 03.03.2007 | ОАО «Нива» | 12 мес. | 1,0 | Пакет | Пластик | |||
Горох | 03.03.2007 | ОАО «Нива» | 12 мес. | 1,0 | Пакет | Бумага | |||
Паста томатная | 10.03.2007 | ОАО «Восток» | 12 мес. | 0,2 | Банка | Жесть |
ER-диаграмму можно представить в следующем виде:
ПРЯМОУГОЛЬНИК – стержневая сущность;
РОМБ – ассоциативная сущность;
ТРАПЕЦИЯ – характеристическая сущность;
ПАРАЛЛЕЛОГРАММ – обозначающая сущность.
В теории БД многие авторы понимают под сущностью не только отображение материального или идеального объекта, но и тип связи, причем сама связь может быть наделена одним или несколькими атрибутами. Таким образом, выделяют три вида сущностей: стержневую, ассоциативную и характеристическую.
Стержневая сущность. Независимая, самодостаточная сущность, которая внутри себя содержит необходимое количество атрибутов, но может также подключать к себе характеристическую сущность (или сущности) и ассоциативную сущность. Стержневая сущность в полной мере соответствует узкому (первому) определению.
Ассоциативная сущность. Интерпретируется как две сущности (в узком понимании), между которыми установлена связь «многие-ко-многим» или связь «многие-ко-многим» с добавленными атрибутами двух сущностей (т.е. ассоциация). Так как ассоциации наделяются атрибутами (а некоторые атрибуты являются ключами), то они могут вступать в связи с другими сущностями и ассоциациями.
Характеристическая сущность. Сущность, которая уточняет своими атрибутами главную стержневую сущность (или ассоциативную сущность). Между характеристической сущностью и стержневой сущностью устанавливается связь «один-к-одному» или «многие-к-одному». Один (или много) экземпляр стержневой сущности получает (получают) от характеристической сущности один или несколько уточняющих атрибутов. В общем случае характеристическая сущность является подчиненной по отношению к стержневой сущности. Самостоятельное существование характеристической сущности, как правило, лишено смысла. Но из всякого правила есть исключения. Существует небольшая группа самостоятельных характеристических сущностей, т.е. есть некоторые универсальные характеристики, которые могут принадлежать нескольким стержневым сущностям. В этом случае можно говорить об обозначающей сущности, т.е. универсальной характеристической сущности. Обозначающая сущность может существовать автономно (не зависеть от стержневой сущности) и представлять собой некоторый справочник.
Следует отметить, что если обозначающая сущность будет определена как стержневая сущность, то большой ошибки не будет.
Условия первой нормальной формы (1НФ)
Таблица находится в первой нормальной форме, если:
- каждое поле таблицы содержит неделимое значение;
- ни одно ключевое поле не пусто;
- отсутствуют повторяющиеся поля и группы полей;
- строки таблицы не упорядочены.
В простейшем случае база данных состоит из одной таблицы, в которой хранятся все данные. Такая таблица называется универсальной, т.е. содержащей всю информацию.На первый взгляд первичным ключом можно назначить поле «Наименование товара». Но как только один и тот же товар будет поступать от одного поставщика в разные дни и разные даты, то уникальность этого поля будет нарушена. А если один и тот же товар будет поступать от разных поставщиков? По разным или одинаковым ценам? Поэтому для данной таблицы первичный ключ будет сложным, состоящим из трех полей. В состав первичного ключа будут ходить поля «Наименование товара», «Поставщик» и «Номернакладной». При таком первичном ключе будет возможно решитьотмеченные выше проблемы. Но следует иметь в виду, что индекс, который автоматически будет построен по полям первичного ключа, на диске займет много места.Также следует отметить, что домены (столбцы) «Дата поставки», «Поставщик», «Срок хранения», «Емкость одной упаковки», «Вид упаковки», «Тип упаковки» и «Номер накладной» содержат повторяющиеся значения атрибутов. При работе с универсальными таблицами возникнуть много проблем.
Часто встречающиеся проблемы:
- Избыточность, т.е. один домен (столбец) может содержать большое количество одинаковых значений. Например, тип упаковки.
- Противоречивость. При изменении значения атрибута необходимо досмотреть все значения данного домена и при необходимости внести необходимые изменения. Например, изменить емкость одной упаковки с 0,5 на 0,33. Задача многократно усложняется, если Таблица (отношение) содержит несколько столбцов (доменов) с полностью или частично повторяющейся информацией.
- Аномалии при добавлении записи. Нельзя добавить новую ёмкость одной упаковки 0,33 до тех пор, пока не появится Новый товар в такой упаковке. Можно, конечно, добавить фиктивную запись, содержащую емкость одной упаковки 0,33. но при появлении товара в такой упаковке эту фиктивную запись надо будет удалить. Аналогичные проблемы могут возникнуть и при увеличении ассортимента поставляемых товаров как существующим поставщиком, так и новым поставщиком.
- Аномалии при удалении записи. Как удалять записи, если товары больше не поставляются конкретным поставщиком? Или часть Товаров старого поставщика поставляет новый поставщик?
Поэтому имеет смысл преобразовать (нормализовать) таблицу, выделить из нее другие таблицы (отношения).