Нормальная форма Бойса – Кодда
(НФБК). Предположим, что в нашей ПО не может быть двух поставщиков с одинаковыми именами, и представим себе, что «учебную» БД проектировал малоопытный проектировщик, создавший отношение со схемой 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.
СП(студент, профессор); СД(студент, дисциплина).
В каждой декомпозиции утеряна одна из ФЗ, существующих в исходном отношении. Кроме того, восстановить исходное отношение посредством естественного соединения проекций невозможно.Убедитесь в этом сами.