Нормализация реляционных баз данных - 1НФ
ОГЛАВЛЕНИЕ
Страница 5 из 8
1НФ
Схема отношения R находится в 1НФ, если значения в dom(A) являются атомарными для каждого атрибута A в R.
Другими словами, каждый атрибут отношения должен хранить одно-единственное значение и не являться ни списком, ни множеством значений.
Следует заметить, что, несмотря на внешнюю строгость данного определения, однозначно определить понятие атомарности зачастую оказывается довольно затруднительно, если заранее неизвестны семантика атрибута и его роль в обработке хранимых данных. Атрибут, который является атомарным в одном приложении, может оказаться составным в другом.
Простейший пример: в БД отдела кадров предприятия в таблице, хранящей личные сведения о сотрудниках, имеется атрибут "домашний-адрес", в котором адрес хранится в формате: город, улица, дом[/корпус], [квартира] (следуя общепринятой нотации, здесь в квадратных скобках указаны опциональные фрагменты адреса, которые могут отсутствовать). В данном случае адрес хранится в виде единой текстовой строки, поскольку маловероятно, чтобы потребовалось выбрать сотрудников, скажем, по номеру квартиры. Таким образом, в контексте БД отдела кадров адрес является атомарным понятием, и его деление на составные части не имеет смысла, т.к. только внесет в БД излишнюю громоздкость.
Однако тот же адрес для приложения, предназначенного для сортировки почты в почтовом отделении, атомарным не является, поскольку желательно сгруппировать конверты в отдельные стопки по улицам, так как каждую улицу обслуживает свой почтальон. Кроме того, с целью оптимизации перемещений почтальона в пределах улицы, каждую стопку желательно отсортировать по номерам домов, чтобы сделать возможным разнести почту за один проход по улице без возврата.
Итак, очевидно, что в отрыве от контекста затруднительно дать строгое определение атомарности, за исключением самых простых случаев (например, домен натуральных чисел). В большинстве случаев необходимо располагать сведениями о предметной области, а также о том, каким образом планируется обрабатывать хранимые в БД данные.
Приведение отношения к 1НФ - довольно простая операция. Мы должны просмотреть схему отношения и разделить составные атрибуты на различные строки/столбцы. Возможно, эту операцию придется повторить несколько раз до тех пор, пока каждый из атрибутов не станет атомарным (с учетом сказанного в предыдущем абзаце).
Приведу небольшой пример. (Этот пример, как и остальные в данной статье, любезно предоставила мне Never, за что я ей сердечно благодарен, поскольку это позволило мне сэкономить массу времени и избежать выдумывания достаточно правдоподобных примеров).
В БД имеется таблица контрагентов, в которой хранятся следующие сведения:
- наименование агента;
- город;
- адрес;
- электронный адрес;
- веб-страница;
- вид агента (поставщик или клиент);
- контактные лица (может быть несколько), должность контактного лица, телефон контактного лица.
Табл. 2
Наим. | Город | Адрес | Эл. почта | WWW | Вид | Конт. лица |
Поршневой з-д | Владимир | Ул. 2-я Кольцевая, 17 | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | www.plunger.ru | Поставщик | Иванов И.И., зам. дир., тел (3254)76-15-95 Петров П.П., нач. отд. сбыта, тел (3254)76-15-35 |
ООО Вымпел | Курск | Ул. Гоголя, 25 | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | Клиент | Сидоров С.С., директор, тел. (7634)66-65-38 | |
ИЧП Альфа | Владимир | Ул. Пушкинская, 37, оф. 565 | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | Клиент | Васильев В.В., директор, тел (3254)74-57-45 |
Очевидно, что в данном случае атрибут "конт-лица" не является атомарным, поскольку в нем попадаются списки из нескольких лиц. Разделим эти кортежи таким образом, чтобы каждый кортеж содержал данные только об одном лице:
Табл.3
Наим. | Город | Адрес | Эл. почта | WWW | Вид | Конт. лица |
Поршневой з-д | Владимир | Ул. 2-я Кольцевая, 17 | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | www.plunger.ru | Поставщик | Иванов И.И., зам. дир., тел (3254)76-15-95 |
Поршневой з-д | Владимир | Ул. 2-я Кольцевая, 17 | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | www.plunger.ru | Поставщик | Петров П.П., нач. отд. сбыта, тел (3254)76-15-35 |
ООО Вымпел | Курск | Ул. Гоголя, 25 | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | Клиент | Сидоров С.С., директор, тел. (7634)66-65-38 | |
ИЧП Альфа | Владимир | Ул. Пушкинская, 37, оф. 565 | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | Клиент | Васильев В.В., директор, тел (3254)74-57-45 |
Несколько лучше, хотя при ближайшем рассмотрении оказывается, что атрибут "конт-лица" снова может быть назван атомарным лишь с натяжкой, поскольку содержит разнородные данные, хотя и об одном лице.
Разобьем его на несколько атрибутов:
Табл. 4
Наим. | Город | Адрес | Эл. почта | WWW | Вид | Должность | Ф.И.О. | Код города | Тел. |
Поршневой з-д | Владимир | Ул. 2-я Кольцевая, 17 | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | www.pler.ru | Поставщик | зам. дир. | Иванов И.И. | 3254 | 76-1595 |
Поршневой з-д | Владимир | Ул. 2-я Кольцевая, 17 | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | www.pler.ru | Поставщик | нач. отд. сбыта | Петров П.П., | 3254 | 7615-35 |
ООО Вымпел | Курск | Ул. Гоголя, 25 | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | Клиент | директор | Сидоров С.С. | 7634 | 6665-38 | |
ИЧП Альфа | Владимир | Ул. Пушкинская, 37, оф. 565 | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | Клиент | директор | Васильев В.В. | 3254 | 745745 |
Теперь можем считать, что каждое значение каждого из атрибутов нашего отношения является атомарным. Следовательно, отношение находится в 1НФ.