Пример проектированияРассмотрим этапы проектирования базы данных, которые должны обеспечить необходимую независимость данных и выполнение эксплуатационных требований (пожеланий пользователей). В качестве примера рассмотрим
проектирование базы данных по продажам, которая включает информацию о товарах,
покупателях, заказах и сотрудниках.
Первый этап нормализации заключается в образовании двумерной таблицы, содержащей все необходимые атрибуты информационной модели, и в выделении ключевых атрибутов. Очевидно, что полученная весьма внушительная таблица будет содержать очень разнородную информацию. В этом случае будут наблюдаться аномалии включения, обновления и удаления данных, так как при выполнении этих действий нам придется уделить внимание данным (вводить или заботиться о том, чтобы они не были стерты), которые не имеют к текущим действиям никакого отношения. Например, может наблюдаться такая парадоксальная ситуация: при включении в каталог продаж нового товара нам сразу придется указать купившего ее клиента. В нашем примере определим атрибуты: код_клиента, компания, фамилия, имя, отчество, должность, телефон, почтовый_индекс, страна, область, город, адрес, дополнительные_сведения; номер заказа, дата заказа, количество_заказанного товара, дата_ продажи, количество_проданного товара; код_сотрудника; имя_сотрудника; группа_товара, код_товара, наименование_товара, цена, примечания Для устранения повторяющихся групп создадим уникальный индекс, содержащий код_клиента. Так как каждый клиент может сделать несколько заказов, в каждый из которых могут быть включены несколько товаров, разобъем нашу таблицу на три, содержащие: 1. сведения о клиентах; 2. номер и дата заказа, данные о сотруднике; 3. код, наименование, количество заказанных и проданных товаров.
Если ключи состоят более чем из одного атрибута, отношение, заданное в первой нормальной форме, может не быть отношением во второй нормальной форме. Приведение отношений ко второй нормальной форме заключается в обеспечении полной функциональной зависимости всех атрибутов от ключа за счет разбиения таблицы на несколько, в которых все имеющиеся атрибуты будут иметь полную функциональную зависимость от ключа этой таблицы. В нашем примере в таблице ЗАКАЗЫ использован составной ключ. Поля название_товара, цена, группа_товаров однозначно определяются одним из ключевых полей. Для приведения этой таблице ко второй нормальной форме, выделим эти поля в отдельную таблицу ТОВАРЫ.
В процессе приведения модели
ко второй нормальной форме в основном исключаются аномалии дублирования
данных.
Преобразование в третью нормальную форму происходит за счет разделения исходного отношения на два. Иначе можно сформулировать так: для третьей нормальной формы требуется, чтобы все неключевые столбцы зависели от первичного ключа, но были независимы друг от друга. В нашем примере выделим из таблицы ЗАКАЗАНО информацию о продавце.
На практике довольно редко встречаются случаи, когда таблица в четвертой нормальной форме не соответствует пятой нормальной форме. |