Проектирование схемы БД в среде ERwin. Проблема избыточности данных. Проблема обновления данных. Проблема удаления данных., страница 3

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

-  все, не входящие в первичный ключ поля, должны однозначно определяться этим ключом (другими словами, зависеть от него).

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

Те таблицы БД, у которых первичный ключ состоит лишь из одного столбца, автоматически оказались в 2НФ.

Таблиц с составным  первичным ключом всего две – TARIF_SRV(услуги в тарифном плане) и USER_ROLE (роли пользователей).

Таблица TARIF_SRV

TARIFID – код тарифа

SERVICE – код услуги

PRICE – цена услуги

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

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

Третья нормальная форма

Понятие третьей нормальной формы (ЗНФ) основывается на понятии нетранзитивной зависимости.

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

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

Рассмотрим таблицу  CONTRACT. В ней есть поле ADDRESS, которое наследуется из  таблицы CONTACTS (CONTACTID), а эта таблица в свою очередь наследует поле CITYID из таблицы CITIES и STREET из таблицы STREETS. Если бы таблица CONTRACTS содержала два поля  - город и улица, то нарушилось бы требование 3НФ, так как поле “улица” зависит от поля “город”. Для устранения этой зависимости и были созданы еще три таблицы – CITIES, STREETS и CONTACTS. Создание таблицы STREETS оправдывается тем фактом, что часто одна улица встречается в нескольких городах. Аналогично таблица CONTACTS используется при задании адреса в таблице PROVIDER. 

В других таблицах БД нетранзитивные зависимости отсутствовали изначально.

ПРИМЕЧАНИЕ:

В таблице CONTRACT поле HOUSE зависит от поля ADDRESS, однако создание новой таблицы, содержащей ADDRESS, HOUSE и код записи, который мог бы наследоваться в поле ADDRESS таблицы CONTRACT ,было признано нерациональным. В этом случае мы получили бы огромное количество полных адресов (включая номер дома), причем каждый адрес, как правило, использовался бы лишь один раз.   

Четвертая нормальная форма

Определение четвертой нормальной формы основано на определении многозначной зависимости. Пусть в таблице есть 3 атрибута – А, Б и С. Ключ состоит из всех 3-х атрибутов. Каждому значению атрибута А соответствует определенное количество значений атрибута Б, а каждому значению атрибута Б соответствует определенное количество значений атрибута С. Это и есть многозначная зависимость. При ней наблюдается избыточность данных. Избежать этого можно путем разбиения таблицы на две более мелкие.