Модели и проектирование баз данных

Нормальная форма Бойса – Кодда


(НФБК). Предположим, что в нашей ПО не может быть двух поставщиков с одинаковыми именами, и представим себе, что «учебную» БД проектировал малоопытный проектировщик, создавший отношение со схемой SSPJ(S#, Sn, P#,  J#, Dt, Qt). Оно имеет два потенциальных ключа: {S#, P#, J#, Dt}  и  {Sn, P#, J#, Dt} и находится в 3НФ, так как единственный неключевой атрибут  неприводимо зависит от каждого из них. Тем не менее, возможно избыточное дублирование данных.

S#

Sn

P#

J#

Dt



Qt

S1

Иван

P1

J1

...

1000

S1

Иван

P2

J1

...

1000

S1

Иван

P3

J1

...

2000

S2

Петр

P8

J4

...

1000

Для того чтобы изменить имя поставщика S1

нужно перебрать все кортежи со значением S# = S1. Если мы удалим кортеж S2, то потеряем информацию об имени поставщика. Это следствие наличия ФЗ S# ® Sn между атрибутами, входящими в состав различных потенциальных ключей. Отношение имеет детерминанты, не являющиеся потенциальными ключами. Для устранения аномалий следует декомпозировать отношение SSPJ. Возможны два варианта декомпозиции без потерь информации:

1) SS(S#, Sn)       SPJ(S#, P#, J#, Dt, Qt);

2) SS(S#, Sn)       SNPJ(Sn, P#, J#, Dt, Qt).

Отметим, что отношение SS в обоих вариантах имеет два возможных ключа, но при его обновлении не могут возникать аномалии.

 

Говорят, что отношение находится в нормальной форме Бойса – Кодда, если и только если каждый его детерминант является потенциальным ключом[30].

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

Пример.

Пусть в отношении СДП(студент, дисциплина, профессор) существуют следующие ФЗ:

профессор ® дисциплина,

{студент, дисциплина} ® профессор,

{студент, профессор} ® дисциплина.

Отношение находится в 3НФ, но не в НФБК, так как имеет три детерминанта: {студент, дисциплина}, {студент, профессор}, {профессор}, а потенциальными ключами являются только два первых.


Возможны три варианта декомпозиции отношения СДП.

Вариант 1.

СП(студент, профессор);           ПД(профессор, дисциплина).

Первичными ключами проекций являются подмножества {студент, профессор} и {профессор}. Существует ФЗ профессор ® дисциплина и выводимая из нее ФЗ {студент, профессор} ® дисциплина. Тело естественного соединения проекций СП

и ПД всегда будет эквивалентно исходному отношению СДП, т.к. общий атрибут проекций является первичным ключом отношения ПД. Однако существующая в исходном отношении ФЗ {студент, дисциплина} ® профессор не следует из существующих в этой декомпозиции. Поэтому независимое обновление проекций невозможно. В самом деле, пусть имеется следующее значение отношения СДП:

СДП

студент

дисциплина

профессор

Иванов

математика

Комов

Иванов

физика

Липов

Петров

математика

Комов

Петров

физика

Дубов

Его проекции таковы:

СП

ПД

студент

профессор

 

профессор

дисциплина

Иванов

Комов

Комов

математика

Иванов

Липов

Липов

физика

Петров

Комов

Дубов

физика

Петров

Дубов

Если мы попытаемся добавить в СП кортеж {Петров, Липов}, то будет нарушено требование целостности сущности для отношения СПД. Петров уже изучает физику у Комова. Таким образом, при обновлении СП мы должны выяснить, что преподает новый (для Петрова) профессор Липов, а что преподают Дубов и Комов, встречающиеся в СП

вместе с Петровым. Если Липов преподает одну из дисциплин, преподаваемых Дубовым или Комовым, то новый кортеж должен быть отвергнут.

Вариант 2.

СД(студент, дисциплина);            ПД(профессор, дисциплина).

Вариант 3.

СП(студент, профессор);            СД(студент, дисциплина).

В каждой декомпозиции утеряна одна из ФЗ, существующих в исходном отношении. Кроме того, восстановить исходное отношение посредством естественного соединения проекций невозможно.Убедитесь в этом сами.


Содержание раздела