Полная версия

Главная arrow Информатика arrow Базы данных: проектирование

  • Увеличить шрифт
  • Уменьшить шрифт


<<   СОДЕРЖАНИЕ   >>

Вторая нормальная форма (211Ф)

Преобразование отношения, находящегося в первой нормальной форме путем разделения функциональных зависимостей, которые не являются неприводимыми, основывается на анализе предметной области и понимании сути функциональных зависимостей в отношении (рис. 2.73). В рассматриваемом примере есть отношение "Товары заказа", описываемое первичным сцепленным ключом и атрибутом "Количество товара", а также отношение "Товары", содержащее атрибуты "Товар", "Поставщик" и "Ценовой сегмент".

image113

Рис. 2.73. Разделение отношения по правилу перехода к 2НФ


Теперь указанные выше аномалии обновления разрешены и указанные проблемы возникать не будут.

Аномалия добавления. Теперь сведения о товаре "А6" от поставщика "П2" можно добавить в отношение "Товары", не требуя обязательного указания этого товара в заказе. Таким образом, товар будет размещен в базе данных, но нс будет указан в заказах.

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

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

 
Рис. 2.74. Функциональные зависимости после перехода к 2НФ

Как теперь очевидно из схемы функциональных зависимостей, сведения о поставщиках товаров и ценовым сегментах не являются составляющими отношения "Товары заказа" (табл. 2.24), что с точки зрения предметной области вполне логично, поскольку заказ клиента не может характеризоваться поставщиками, а ценовой сегмент может относиться к товарам поставщика, а не к заказу.

Таблица 2.24

Това ры заказа
Заказ Товар Количество товара
31 А1 10
31 А2 25
31 АЗ 2
32 А1 5
32 А4 1
33 А4 5

Товары
Товар Поставщик Ценовой сегмент
А1 П1 Эконом
А2 П1 
АЗ П2 Люкс
А4 ПЗ Эконом
А6 П5 Люкс

Пример данных отношения "Товары заказа" в 2НФ


В отношении "Товары" появился товар "А6", которого ранее не было. Однако в заказах этот товар не присутствует. Такое стало возможным из-за выделения в отдельное отношение набора атрибутов, которые назначены по правилу исключения зависимостей, не являющихся неприводимыми, приводя исходное отношение к 2НФ, облегчая, тем самым, работу с базой данных и делая се более эффективной.

Отношение находится во второй нормальной форме тогда и только тогда, когда оно находится в первой нормальной форме и каждый неключевой атрибут неприводимо зависит от его первичного ключа[1].

По сути, переход к 211Ф заключается в выявлении атрибутов, функционально зависимых от части первичного ключа исходного отношения, и выделении этих атрибутов с первичным ключом в отдельное отношение, что и было сделано в рассматриваемом примере. Атрибуты "Поставщик" и "Ценовой диапазон" функционально зависят от части первичного ключа, представленного атрибутом "Товар", и функционально не зависят от сцепленного первичного ключа исходного отношения "Товары заказа". В таком случае вполне логичным является выделение атрибутов "Товар" (первичный ключ), "Поставщик" и "Ценовой диапазон" в отдельное отношение. При этом атрибут "Товар", являющийся частью сцепленного первичного ключа отношения "Товары заказа", остается в этом отношении, поскольку отражает функциональную зависимость атрибута "Количество товара" от совокупности атрибутов в сцепленном первичном ключе.

Правило перехода 1НФ -" 2НФ

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

Оба полученных отношения находятся в 2НФ, поскольку все находящиеся в них функциональные зависимости связаны с единственным первичным ключом отношения: в отношении "Товары заказа" все атрибуты функционально зависят от сцепленного ключа "Заказ" — "Товар", в отношении "Товары" все атрибуты функционально зависят от единственного первичного ключа "Товар".

Однако отношение "Товары" содержит некоторые проблемы, заключающиеся в том, что не ключевые атрибуты все еще не являются взаимно независимыми, а именно атрибут "Ценовой диапазон" является функционально зависимым от атрибута "Поставщик". Это приводит к определенным аномалиям обновления, которые необходимо разрешать.

Аномалия добавления. В отношении "Товары" атрибуты "Поставщик" и "Ценовой сегмент" имеют функциональную зависимость, которая приводит к ситуации, что невозможно содержать в базе данных сведения о ценовом сегменте поставщика, пока этот поставщик нс появится в отношении.

Аномалия изменения. Аналогично аномалии для первой нормальной формы любое изменение ценового сегмента для поставщика в одном из экземпляров отношения требует повторения этой операции по всех остальным экземплярам отношения, где товары предоставляются соответствующим поставщиком. Если этого не сделать, то смысл атрибута "Ценовой сегмент" будет нарушен. При рассмотрении атрибута "Ценовой сегмент" в виде рыночного сегмента, на который ориентирован поставщик, при изменении значения этого атрибута для одного экземпляра (считаем, что в отношении существует несколько экземпляров товаров от изменяемого поставщика) атрибут перестает характеризовать поставщика, а становится характеристикой товара - ценовым сегментом товара, что является некорректным по сути разработки базы данных, где изменение смысловой нагрузки атрибутов в результате нормализации происходить не должно.

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

Аномалия удаления. Если в отношении "Товары" существует только один экземпляр по определенному поставщику, то удаление этого экземпляра приведет к потере сведений о самом поставщике и его ценовом сегменте.

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

  • [1] Дейт К. Дж. Введение в системы баз данных.
 
<<   СОДЕРЖАНИЕ   >>