2008 г.
Базы данных. Вводный курс
Сергей Кузнецов
Назад Содержание Вперёд
Лекция 8. Проектирование реляционных баз данных на основе принципов нормализации: первые шаги нормализации
8.1. Введение
Эта лекция открывает серию из четырех лекций, посвященных проектированию реляционных баз данных. В данной лекции речь пойдет о нормализации схем отношений с учетом только функциональных зависимостей между атрибутами отношений. Эти «первые шаги» нормализации позволяют получить схему базы данных, в которых все переменные отношений находятся в нормальной форме Бойса-Кодда, обычно расцениваемой удовлетворительной для большей части приложений.
При проектировании базы данных решаются две основные проблемы.
- Каким образом отобразить объекты предметной области в абстрактные объекты модели данных, чтобы это отображение не противоречило семантике предметной области и было, по возможности, лучшим (эффективным, удобным и т. д.)? Часто эту проблему называют проблемой логического проектирования баз данных.
- Как обеспечить эффективность выполнения запросов к базе данных, т. е. каким образом, имея в виду особенности конкретной СУБД, расположить данные во внешней памяти, создания каких дополнительных структур (например, индексов) потребовать и т. д.? Эту проблему обычно называют проблемой физического проектирования баз данных.
В случае реляционных баз данных трудно предложить какие-либо общие рецепты по части физического проектирования. Здесь слишком многое зависит от используемой СУБД. Поэтому мы ограничимся вопросами логического проектирования реляционных баз данных, которые существенны при использовании любой реляционной СУБД.
Более того, мы не будем касаться очень важного аспекта проектирования – определения ограничений целостности общего вида (за исключением ограничений, задаваемых функциональными и многозначными зависимостями, а также зависимостями проекции/соединения). Дело в том, что при использовании СУБД с развитыми механизмами ограничений целостности (например, SQL-ориентированных систем) трудно предложить какой-либо универсальный подход к определению ограничений целостности. Эти ограничения могут иметь произвольно сложную форму, и их формулировка пока относится скорее к области искусства, чем инженерного мастерства. Самое большее, что предлагается по этому поводу в литературе, это автоматическая проверка непротиворечивости набора ограничений целостности.
Так что в этой и следующей лекциях мы будем считать, что проблема проектирования реляционной базы данных состоит в обоснованном принятии решений о том, из каких отношений должна состоять БД и какие атрибуты должны быть у этих отношений.
В этой и следующей лекциях будет рассмотрен классический подход, при котором весь процесс проектирования базы данных осуществляется в терминах реляционной модели данных методом последовательных приближений к удовлетворительному набору схем отношений. Исходной точкой является представление предметной области в виде одного или нескольких отношений, и на каждом шаге проектирования производится некоторый набор схем отношений, обладающих «улучшенными» свойствами. Процесс проектирования представляет собой процесс нормализации схем отношений, причем каждая следующая нормальная форма обладает свойствами, в некотором смысле, лучшими, чем предыдущая.
Каждой нормальной форме соответствует определенный набор ограничений, и отношение находится в некоторой нормальной форме, если удовлетворяет свойственному ей набору ограничений. Примером может служить ограничение первой нормальной формы – значения всех атрибутов отношения атомарны31). Поскольку требование первой нормальной формы является базовым требованием классической реляционной модели данных, мы будем считать, что исходный набор отношений уже соответствует этому требованию.
В теории реляционных баз данных обычно выделяется следующая последовательность нормальных форм:
- первая нормальная форма (1NF);
- вторая нормальная форма (2NF);
- третья нормальная форма (3NF);
- нормальная форма Бойса-Кодда (BCNF);
- четвертая нормальная форма (4NF);
- пятая нормальная форма, или нормальная форма проекции-соединения (5NF или PJ/NF).
Основные свойства нормальных форм состоят в следующем:
- каждая следующая нормальная форма в некотором смысле лучше предыдущей нормальной формы;
- при переходе к следующей нормальной форме свойства предыдущих нормальных форм сохраняются.
В основе процесса проектирования лежит метод нормализации, т. е. декомпозиции отношения, находящегося в предыдущей нормальной форме, на два или более отношений, которые удовлетворяют требованиям следующей нормальной формы.
В этой лекции мы обсудим первые шаги процесса нормализации, в которых учитываются функциональные зависимости между атрибутами отношений. Хотя мы и называем эти шаги первыми, именно они имеют основную практическую важность, поскольку позволяют получить схему реляционной базы данных, в большинстве случаев удовлетворяющую потребности приложений.
8.2. Минимальные функциональные зависимости и вторая нормальная форма
Пусть имеется переменная отношения СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ {СЛУ_НОМ, СЛУ_УРОВ, СЛУ_ЗАРП, ПРО_НОМ, СЛУ_ЗАДАН}
. Новые атрибуты СЛУ_УРОВ
и СЛУ_ЗАДАН
содержат, соответственно, данные о разряде служащего и о задании, которое выполняет служащий в данном проекте. Будем считать, что разряд служащего определяет размер его заработной платы и что каждый служащий может участвовать в нескольких проектах, но в каждом проекте он выполняет только одно задание. Тогда очевидно, что единственно возможным ключом отношения СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
является составной атрибут {СЛУ_НОМ, ПРО_НОМ}
. Диаграмма минимального множества FD показана на рис. 8.1, а возможное тело значения отношения – на рис. 8.2.
Рис. 8.1. Диаграмма множества FD отношения СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
Рис. 8.2. Возможное значение переменной отношения СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
8.2.1. Аномалии обновления, возникающие из-за наличия неминимальных функциональных зависимостей
Во множество FD отношения СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
входит много FD, в которых детерминантом является не возможный ключ отношения (соответствующие стрелки в диаграмме начинаются не с {СЛУ_НОМ, ПРО_НОМ}
, т. е. некоторые функциональные зависимости атрибутов от возможного ключа не являются минимальными). Это приводит к так называемым аномалиям обновления. Под аномалиями обновления понимаются трудности, с которыми приходится сталкиваться при выполнении операций добавления кортежей в отношение (INSERT
), удаления кортежей (DELETE
) и модификации кортежей (UPDATE
). Обсудим сначала аномалии обновления, вызываемые наличием FD СЛУ_НОМСЛУ_УРОВ
(эти аномалии связаны с избыточностью хранения значений атрибутов СЛУ_УРОВ
и СЛУ_ЗАРП
в каждом кортеже, описывающем задание служащего в некотором проекте).
- Добавление кортежей. Мы не можем дополнить отношение
СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
данными о служащем, который в данное время еще не участвует ни в одном проекте (ПРО_НОМ
является частью первичного ключа и не может содержать неопределенных значений). Между тем часто бывает, что сначала служащего принимают на работу, устанавливают его разряд и размер зарплаты, а лишь потом назначают для него проект. - Удаление кортежей. Мы не можем сохранить в отношении
СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
данные о служащем, завершившем участие в своем последнем проекте (по той причине, что значение атрибута ПРО_НОМ
для этого служащего становится неопределенным). Между тем характерна ситуация, когда между проектами возникают перерывы, не приводящие к увольнению служащих. - Модификация кортежей. Чтобы изменить разряд служащего, мы будем вынуждены модифицировать все кортежи с соответствующим значением атрибута
СЛУ_НОМ
. В противном случае будет нарушена естественная FD СЛУ_НОМСЛУ_УРОВ
(у одного служащего имеется только один разряд).
8.2.2. Возможная декомпозиция
Для преодоления этих трудностей можно произвести декомпозицию переменной отношения СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
на две переменных отношений – СЛУЖ {СЛУ_НОМ, СЛУ_УРОВ, СЛУ_ЗАРП}
и СЛУЖ_ПРО_ЗАДАН {СЛУ_НОМ, ПРО_НОМ, СЛУ_ЗАДАН}
. На основании теоремы Хита эта декомпозиция является декомпозицией без потерь, поскольку в исходном отношении имелась FD {СЛУ_НОМ, ПРО_НОМ}СЛУ_ЗАДАН
. На рис. 8.3 показаны диаграммы множеств FD этих отношений, а на рис. 8.4 – их значения.
Рис. 8.3. Диаграммы FD в переменных отношений СЛУЖ и СЛУЖ_ПРО_ЗАДАН
Теперь мы можем легко справиться с операциями обновления.
- Добавление кортежей. Чтобы сохранить данные о принятом на работу служащем, который еще не участвует ни в каком проекте, достаточно добавить соответствующий кортеж в отношение
СЛУЖ
. - Удаление кортежей. Если кто-то из служащих прекращает работу над проектом, достаточно удалить соответствующий кортеж из отношения
СЛУЖ_ПРО_ЗАДАН
. При увольнении служащего нужно удалить кортежи с соответствующим значением атрибута СЛУ_НОМ
из отношений СЛУЖ
и СЛУЖ_ПРО_ЗАДАН
. - Модификация кортежей. Если у служащего меняется разряд (и, следовательно, размер зарплаты), достаточно модифицировать один кортеж в отношении
СЛУЖ
.
Рис. 8.4. Значения переменных отношений
8.2.3. Вторая нормальная форма
Как видно, на рис. 8.3 отсутствуют FD, не являющиеся минимальными. Наличие таких FD на рис. 8.1 вызывало аномалии обновления. Проблема заключалась в том, что атрибут СЛУЖ_УРОВ
относился к сущности служащий
, в то время как первичный ключ идентифицировал сущность задание_служащего_в_проекте
.
Переменная отношения находится во второй нормальной форме (2NF) тогда и только тогда, когда она находится в первой нормальной форме, и каждый неключевой атрибут32) минимально функционально зависит от первичного ключа33).
Переменные отношений СЛУЖ
и СЛУЖ_ПРО_ЗАДАН
находятся в 2NF (все неключевые атрибуты отношений минимально зависят от первичных ключей СЛУ_НОМ
и {СЛУ_НОМ, ПРО_НОМ}
соответственно). Переменная отношения СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
не находится в 2NF (например, FD {СЛУ_НОМ, ПРО_НОМ}СЛУ_УРОВ
не является минимальной). Любая переменная отношения, находящаяся в 1NF, но не находящаяся в 2NF, может быть приведена к набору переменных отношений, находящихся в 2NF. В результате декомпозиции мы получаем набор проекций исходной переменной отношения, естественное соединение значений которых воспроизводит значение исходной переменной отношения (т. е. это декомпозиция без потерь). Для переменных отношений СЛУЖ
и СЛУЖ_ПРО_ЗАДАН
исходное отношение СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
воспроизводится их естественным соединением по общему атрибуту СЛУ_НОМ
.
Заметим, что допустимое значение переменной отношения СЛУЖ
может содержать кортежи, информационное наполнение которых выходит за пределы допустимых значений переменной отношения СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
. Например, в теле отношения СЛУЖ
может находиться кортеж с данными о служащем с номером 2938
, который еще не участвует ни в одном проекте. Наличие такого кортежа не влияет на результат естественного соединения, тело которого все равно будет совпадать с телом допустимого значения переменной отношения СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
.
8.3. Нетранзитивные функциональные зависимости и третья нормальная форма
В произведенной декомпозиции переменной отношения СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
множество FD переменной отношения СЛУЖ_ПРО_ЗАДАН
предельно просто – в единственной нетривиальной функциональной зависимости детерминантом является возможный ключ. При использовании этой переменной отношения какие-либо аномалии обновления не возникают. Однако переменная отношения СЛУЖ
не является такой же совершенной.
8.3.1. Аномалии обновлений, возникающие из-за наличия транзитивных функциональных зависимостей
Функциональные зависимости переменной отношения СЛУЖ
по-прежнему порождают некоторые аномалии обновления. Они вызываются наличием транзитивной FD СЛУ_НОМСЛУ_ЗАРП
(через FD СЛУ_НОМСЛУ_УРОВ
и СЛУ_УРОВСЛУ_ЗАРП
). Эти аномалии связаны с избыточностью хранения значения атрибута СЛУ_ЗАРП
в каждом кортеже, характеризующем служащих с одним и тем же разрядом.
- Добавление кортежей. Невозможно сохранить данные о новом разряде (и соответствующем ему размере зарплаты), пока не появится служащий с новым разрядом. (Первичный ключ не может содержать неопределенные значения.)
- Удаление кортежей. При увольнении последнего служащего с данным разрядом мы утратим информацию о наличии такого разряда и соответствующем размере зарплаты.
- Модификация кортежей. При изменении размера зарплаты, соответствующей некоторому разряду, мы будем вынуждены изменить значение атрибута
СЛУ_ЗАРП
в кортежах всех служащих, которым назначен этот разряд (иначе не будет выполняться FD СЛУ_УРОВСЛУ_ЗАРП
).
8.3.2. Возможная декомпозиция
Для преодоления этих трудностей произведем декомпозицию переменной отношения СЛУЖ
на две переменных отношений – СЛУЖ1 {СЛУ_НОМ, СЛУ_УРОВ}
и УРОВ {СЛУ_УРОВ, СЛУ_ЗАРП}
. По теореме Хита, это снова декомпозиция без потерь по причине наличия, например, FD СЛУ_НОМСЛУ_УРОВ
. На рис. 8.5 показаны диаграммы FD этих переменных отношений, а на рис. 8.6 – их возможные значения.
Рис. 8.5. Диаграммы FD в отношениях СЛУЖ1 и УРОВ
Как видно из рис. 8.6, это преобразование обратимо, т. е. любое допустимое значение исходной переменной отношения СЛУЖ
является естественным соединением значений отношений СЛУЖ1
и УРОВ
. Также можно заметить, что мы избавились от трудностей при выполнении операций обновления.
- Добавление кортежей. Чтобы сохранить данные о новом разряде, достаточно добавить соответствующий кортеж к отношению
УРОВ
. - Удаление кортежей. При увольнении последнего служащего, обладающего данным разрядом, удаляется соответствующий кортеж из отношения
СЛУЖ1
, и данные о разряде сохраняются в отношении УРОВ
. - Модификация кортежей. При изменении размера зарплаты, соответствующей некоторому разряду, изменяется значение атрибута
СЛУ_ЗАРП
ровно в одном кортеже отношения УРОВ
.
8.3.3. Третья нормальная форма
Рис. 8.6. Тела отношений СЛУЖ1 и УРОВ
Трудности, которые мы испытывали, были связаны с наличием транзитивной FD СЛУ_НОМСЛУ_ЗАРП
. Наличие этой FD на самом деле означало, что атрибут СЛУ_ЗАРП
характеризовал не сущность служащий
, а сущность разряд
.
Переменная отношения находится в третьей нормальной форме (3NF) в том и только в том случае, когда она находится во второй нормальной форме, и каждый неключевой атрибут нетранзитивно34) функционально зависит от первичного ключа35).
Отношения СЛУЖ1
и УРОВ
оба находятся в 3NF (все неключевые атрибуты нетранзитивно зависят от первичных ключей СЛУ_НОМ
и СЛУ_УРОВ
). Отношение СЛУЖ
не находится в 3NF (FD СЛУ_НОМСЛУ_ЗАРП
является транзитивной). Любое отношение, находящееся в 2NF, но не находящееся в 3NF, может быть приведено к набору отношений, находящихся в 3NF. Мы получаем набор проекций исходного отношения, естественное соединение которых воспроизводит исходное отношение (т. е. это декомпозиция без потерь). Для отношений СЛУЖ1
и УРОВ
исходное отношение СЛУЖ
воспроизводится их естественным соединением по общему атрибуту СЛУ_УРОВ
.
Заметим, что допустимые значения отношения УРОВ
могут содержать кортежи, информационное наполнение которых выходит за пределы тела отношения СЛУЖ
. Например, в теле отношения УРОВ
может находиться кортеж с данными о разряде 4, который еще не присвоен ни одному служащему. Наличие такого кортежа не влияет на результат естественного соединения, который все равно будет являться допустимым значением отношения СЛУЖ
.
8.3.4. Независимые проекции отношений. Теорема Риссанена
Обратите внимание, что для переменной отношения СЛУЖ {СЛУ_НОМ, СЛУ_УРОВ, СЛУ_ЗАРП}
, кроме декомпозиции на отношения СЛУЖ1 {СЛУ_НОМ, СЛУ_УРОВ}
и УРОВ {СЛУ_УРОВ, СЛУ_ЗАРП}
, возможна и декомпозиция на отношения СЛУЖ1 {СЛУ_НОМ, СЛУ_УРОВ}
и СЛУЖ_ЗАРП {СЛУ_НОМ, СЛУ_ЗАРП}
36). Оба отношения, полученные путем второй декомпозиции, находятся в 3NF, и эта декомпозиция также является декомпозицией без потерь. Тем не менее вторая декомпозиция, в отличие от первой, не устраняет проблемы, связанные с обновлением отношения СЛУЖ
. Например, по-прежнему невозможно сохранить данные о разряде, которым не обладает ни один служащий. Посмотрим, с чем это связано.
Отношения СЛУЖ1
и УРОВ
могут обновляться независимо (являются независимыми проекциями), и при этом результат их естественного соединения всегда будет таким, как если бы обновлялось исходное отношение СЛУЖ
. Это происходит потому, что FD отношения СЛУЖ
трансформировались в индивидуальные ограничения первичного ключа отношений СЛУЖ1
и УРОВ
. При второй декомпозиции FD СЛУ_УРОВСЛУ_ЗАРП
трансформируется в ограничение целостности сразу для двух отношений (такого рода ограничения целостности называются ограничениями базы данных, и их поддержка гораздо более накладна с технической точки зрения). Понятно, что в процессе нормализации декомпозиция отношения на независимые проекции является предпочтительной. Необходимые и достаточные условия независимости проекций отношения обеспечивает теорема Риссанена.
Теорема Риссанена
Проекции r1
и r2
отношения r
являются независимыми тогда и только тогда, когда:
- каждая FD в отношении
r
логически следует37) из FD в r1
и r2
; - общие атрибуты
r1
и r2
образуют возможный ключ хотя бы для одного из этих отношений.
Мы не будем приводить доказательство этой теоремы, но продемонстрируем ее верность на примере двух показанных выше декомпозиций отношения СЛУЖ
. В первой декомпозиции (на проекции СЛУЖ1
и УРОВ
) общий атрибут СЛУ_УРОВ
является возможным (и первичным) ключом отношения УРОВ
, а единственная дополнительная FD отношения СЛУЖ (СЛУ_НОМСЛУ_ЗАРП)
логически следует из FD СЛУ_НОМСЛУ_УРОВ
и СЛУ_УРОВСЛУ_ЗАРП
, выполняемых для отношений СЛУЖ1
и УРОВ
соответственно. Вторая декомпозиция удовлетворяет второму условию теоремы Риссанена (СЛУ_НОМ
является первичным ключом в каждом из отношений СЛУЖ1
и СЛУ_ЗАРП
), но FD СЛУ_УРОВСЛУ_ЗАРП
не выводится из FD СЛУ_НОМСЛУ_УРОВ
и СЛУ_НОМСЛУ_ЗАРП
.
Атомарным отношением называется отношение, которое невозможно декомпозировать на независимые проекции. Далеко не всегда для неатомарных (не являющихся атомарными) отношений требуется декомпозиция на атомарные проекции. Например, отношение СЛУЖ2 {СЛУ_НОМ, СЛУ_ЗАРП, ПРО_НОМ}
с множеством FD {СЛУ_НОМСЛУ_ЗАРП, СЛУ_НОМПРО_НОМ}
не является атомарным (возможна декомпозиция на независимые проекции СЛУЖ3 {СЛУ_НОМ, СЛУ_ЗАРП}
и СЛУЖ4 {СЛУ_НОМ, ПРО_НОМ}
). Но эта декомпозиция не улучшает свойства отношения СЛУЖ2
и поэтому не является осмысленной. Другими словами, при выборе способа декомпозиции нужно стремиться к получению независимых проекций, но не обязательно атомарных.
31
Напомним из лекции 3, что атомарность
значения трактуется в том смысле, что значение типизировано, и с этим значением можно работать только с помощью операций соответствующего типа данных.
32 Неключевым атрибутом называется атрибут, не входящий ни в один возможный ключ.
33 В определении предполагается, что у отношения имеется только один возможный ключ.
34 Очевидно, что FD называется нетранзитивной тогда и только тогда, когда она не является транзитивной.
35 В этом определении опять предполагается, что у отношения имеется только один возможный ключ.
36 Теоретически возможная третья декомпозиция отношения СЛУЖ
на отношения СЛУЖ2 {СЛУ_НОМ, СЛУ_ЗАРП}
и УРОВ {СЛУ_УРОВ, СЛУ_ЗАРП}
не является декомпозицией без потерь. Чтобы убедиться в этом, рассмотрите случай, когда для двух разных разрядов сотрудников назначен один и тот же размер зарплаты. Покажите также, что для этой декомпозиции не выполняются условия теоремы Хита.
37 Т.е. выводится на основе аксиом Армстронга.
Назад Содержание Вперёд