Определение. Отношение находится в 1НФ тогда и только тогда, когда все используемые домены содержат только скалярные (атомарные

Отношение находится в 1НФ тогда и только тогда, когда все используемые домены содержат только скалярные (атомарные, простые) значения.

Рассмотрим следующий пример. Пусть необходимо хранить информацию о поставщиках и поставляемых ими товарах. Информация о поставщиках включает в себя:

– номер поставщика S#, определенный на домене НОМЕР,

– имя поставщика SName, определенное на домене ИМЯ,

– город City, в котором размещается поставщик, определенный на домене ГОРОД,

– код города Code, определенный на домене КОД.

Информация о поставляемых товарах включает в себя:

. код товара P#, определенный на домене НОМЕР,

. название товара PName, определенное на домене НАЗВАНИЕ,

. стоимость товара Price, определенная на домене ДЕНЬГИ,

. количество поставляемых товаров QTY, определенное на домене КОЛИЧЕСТВО.

Информация о поставляемых товарах PS может быть задана на составном домене ПОСТАВКА: ПОСТАВКА (НОМЕР, НАЗВАНИЕ, ДЕНЬГИ, КОЛИЧЕСТВО).

Тогда можно определить следующее ненормализованное отношение ПОСТАВКА ТОВАРОВ:

ПОСТАВКА ТОВАРОВ (S#: НОМЕР, SName: ИМЯ, City: ГОРОД, Code: КОД, PS: ПОСТАВКА)

Исходя из анализа семантики атрибутов, определим функциональные зависимости между ними:

S#  SName, S#  City, City  Code, S#  PS.

Применяя правило транзитивности, получим функциональную зависимость S#  Code. Кроме того, из правила рефлексивности следует: S#  S#.

Отсюда, применив правило аддитивности, получим: S#  (S#, SName, City, Code, PS); следовательно, S# является первичным ключом данного отношения.

Возможная реализация такого отношения:

Домен НОМЕР ИМЯ ГОРОД КОД ПОСТАВКА (НОМЕР, НАЗВАНИЕ, ДЕНЬГИ, КОЛИЧЕСТВО)
Атрибут S# SName City Code PS (P#, PName, Price, QTY)
  S1 Smith London   P1, Nut, 12, 200 P2, Bolt, 17, 100 P3, Screw, 17, 100
  S2 Jones Paris   P1, Nut, 12, 150 P2, Bolt, 17, 200

Это – не нормализованное отношение, так как значениями атрибута PS являются множества.

Данное отношение легко преобразовать в 1НФ. Для этого достаточно вместо составного домена ввести составляющие его простые домены, вместо одного атрибута PS ввести необходимые атрибуты, определенные на простых доменах, и повторить значения атрибутов S#, SName, City, Code для каждой строки атрибута PS:

Домен НОМЕР ИМЯ ГОРОД КОД НОМЕР НАЗВАНИЕ ДЕНЬГИ КОЛИЧЕСТВО
Атрибут S# SName City Code P# PName Price QTY
  S1 Smith London   P1 Nut    
  S1 Smith London   P2 Bolt    
  S1 Smith London   P3 Screw    
  S2 Jones Paris   P1 Nut    
  S2 Jones Paris   P2 Bolt    

Определим функциональные зависимости данного отношения. Для поставщика сохраняются рассмотренные выше функциональные зависимости: S#  SName, S#  City, City  Code, и из правила транзитивности следует S#  Code. Из анализа семантики атрибутов, определяющих товар, определяем следующие функциональные зависимости: P#  PName, P#  Price. Значение атрибута QTY не является собственным свойством ни товара, ни поставщика, и зависит от совокупности атрибутов: (S#, P#)  QTY.

Докажем, что если есть функциональная зависимость X  Y, то существует и функциональная зависимость XZ  Y. Так как есть X  Y, то, применяя правило пополнения, получим XZ  YZ. Из правила рефлексивности следует, что YZ  Y. Отсюда, имея XZ  YZ и YZ  Y и применяя правило транзитивности, получим XZ  Y, что и требовалось доказать. Применяя выведенное соотношение к функциональным зависимостям, определенным для отношения ПОСТАВКА, получим:

(S#, P#)  SName, (S#, P#)  City, (S#, P#)  Code, (S#, P#)  PName, (S#, P#)  Price, (S#, P#)  QTY (задано), (S#, P#)  S#, (S#, P#)  P# (правила рефлексивности). Отсюда, применив правило аддитивности, получим: (S#, P#)  (S#, SName, City, Code, P#, Price, QTY), т.е. атрибуты S#, P# образуют первичный ключ данного отношения.

В чем неудобства 1НФ: для нее существуют определенные аномалии.

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

Вернемся к нашему примеру и рассмотрим проблемы, которые могут возникнуть при манипулировании данными в таком отношении, находящемся в 1НФ.

Проблема обновления. Если поставщик S1 поставляет несколько товаров, в каждом кортеже отношения повторяются его имя, город и код города. Если, например, поставщик переезжает в другой город, для него изменяются значения атрибутов City и Code. Следовательно, необходимо изменить информацию во всех кортежах, где упоминается данный поставщик. Если хотя бы в одном кортеже информация не будет обновлена, это приведет к нарушению достоверности данных.

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

Проблема удаления. Если некоторый товар изымается из поставок, как быть с поставщиками, которые в данный момент поставляют только этот товар? Удаляя весь кортеж, мы теряем информацию о поставщике.

Почему это так? Причиной таких аномалий является то, что в отношении, находящемся в 1НФ, все не ключевые атрибуты функционально (а не функционально полно) зависят от атрибутов первичного ключа.

Вторая нормальная форма


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: