Анализ схемы реляционной БД на соответствие заданной нормальной форме

 

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

В теории баз данных определено 6 нормальных форм (НФ). Вначале были предложены 1НФ, 2НФ, 3НФ, затем сформулировано более строгое определение 3НФ, которое получило название НФБК (нормальная форма Бойса—Кодда). Все эти формы предназначены для устранения нежелательных функциональных зависимостей между атрибутами отношения. Далее следуют 4НФ и 5НФ, устраняющие многозначные зависимости и зависимости соединения. Нормальные формы обладают свойством вложенности – если схема отношения соответствует какой—то более высокой НФ, то она соответствует и всем более низким НФ. Для нормальной работы базы данных достаточно исследовать структуру БД на соответствие 3НФ, при использовании «восходящего» метода проектирования – до НФБК.

Как правило, при полном обследовании предметной области и правильном выявлении классов объектов и связей между ними получаемая на основе ER—диаграммы логическая структура реляционной БД нормализована и соответствует 3НФ, в ней отсутствуют составные первичные ключи и транзитивные зависимости между не ключевыми атрибутами и первичным ключом.

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

Функциональной зависимостью атрибута В (набора атрибутов) отношения R(A,B,C) от атрибута (набора атрибутов) А отношения R, обозначаемой A —> B, называется такая связь между атрибутами отношения, когда в предметной области в каждый момент времени каждому значению атрибута (набору атрибутов) В соответствует только одно определенное значение атрибута (набора атрибутов) А. Однако, для заданного значения атрибута В может существовать несколько различных значений атрибута А. Таким образом, если из семантики предметной области нам известно значение атрибута А, то в предметной области однозначно можно определить значение атрибута В.

Различают частичную и полную функциональные зависимости. Частичная функциональная зависимость – это зависимость не ключевого атрибута от части составного первичного ключа. Полная функциональная зависимость – это зависимость не ключевого атрибута от всего составного первичного ключа. Если в схеме отношения первичный ключ не составной, то можно сказать, что в этой схеме отношения отсутствуют частичные функциональные зависимости.

Атрибут С отношения R транзитивно зависитот атрибута А отношения R, если для атрибутов А, В, С отношения R(A,B,C) выполняется условие существования следующих функциональных зависимостей: А —> B; B —> C, при условии, что атрибут А функционально не зависит ни от атрибута В, ни от атрибута С.

Транзитивная зависимость появляется в случае того, что ранее, при обследовании предметной области было выявлено свойство класса объектов, принимающее несколько значений для одного и того же значения первичного ключа. В примере, приведенном на рисунке 20 (с.62), если оставить класс объектов «КЛИЕНТ» без изменения, то при дальнейшем отображении его в виде реляционной таблицы, в таблице будет наблюдаться транзитивная зависимость: Номер—>Дата контакта; Имя—>Дата контакта, следовательно, присутствует транзитивная зависимость Номер—>Дата контакта. Для исключения транзитивной зависимости необходимо будет создать новое отношение с атрибутами (Номер клиента, Дата контакта), где «Номер клиента» будет одновременно и первичным и внешним ключом, ссылающимся на свою копию в отношении «Клиент». Полученная таким образом схема реляционной БД не совсем адекватно будет отражать предметную область. Более логично выделить сразу класс объектов «КОНТАКТ» и найти ему адекватный уникальный идентификатор.

Для того чтобы нормализовать схемы реляционных отношений необходимо знать определения нормальных форм.

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

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

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

3 Третья нормальная форма. Схема отношения находится в 3НФ, если она находится во 2НФ, и отсутствуют транзитивные зависимости между не ключевыми атрибутами и первичным ключом.

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

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

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

Приведение схем отношений к более высоким нормальным формам обычно требуется для схем отношений, полученных при проектировании БД «восходящим» методом.

Только понимая семантику предметной области можно правильно осуществить процесс нормализации.