Первая нормальная форма(1НФ)

Определение. Таблица находится в первой нормальной форме, если в каждой ее ячейке находится не более одного значения.

Пример. Преобразуем таблицу «ИЗДЕЛИЯ» из предыдущего при­мера в таблицу вида: ИЗДЕЛИЯ (код изделия, деталь). Тогда, за счет дублирования кода изделия, в каждой строке в колонке «Деталь» будет стоять только одно значение – наименование кода детали. Новая таб­лица будет в первой нормальной форме.

Покажем процесс нормализации на следующей исходной таблице:

ВЫПУСК ИЗДЕЛИЙ (Код подразделения (KP), наименование подразделе­ния (NP), код изделия (KI), наименование изделия (NI), код типа изделия (KTI), наименование типа изделия (NTI), дата выпуска (DVI), количество (KVI), себестоимость изделия (SI)). Ключевые атрибуты пер­вич­ного клю­ча подчеркнуты. Эта таблица находится в первой нормальной форме.

Рассмотрим аномалии (недостатки) первой нормальной формы.

1. Избыточное дублирование данных. Все наименования будут дублироваться в каждой строке нашей таблицы.

2. Аномалия включения. Пока изделие не будет выпущено, инфор­ма­ция о нем (проектируемом или ранее снятом с производства) бу­дет отсутствовать в базе.

3. Аномалия удаления. Если изделие не выпускается в отчетный пе­ри­од, то инфор­ма­ция об изделии исчезнет из базы.

4. Аномалия корректировки. Если меняется, например, название из­де­лия, то нужно откорректировать наименование не в одной строке, а во всех строках таб­ли­цы, где оно встречается.

Для устранения этих недостатков продолжим процесс нормализации. Вторая нормальная форма(2НФ)

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

Рассмотрим нашу таблицу на предмет выявления неключевых атри­бу­тов, зави­ся­щих только от части ключа.

Атрибут «Наименование под­раз­де­ления» зависит только от атрибута «Код подразделения» и не зависит от атрибутов «Код изделия» и «Дата вы­пус­ка». Поэтому его следует удалить из таблицы. Чтобы не потерять ин­формацию о подразделении, создадим но­вую таблицу «ПОДРАЗДЕЛЕ­НИЯ» и в нее включим удаляемый атрибут «Наиме­но­ва­ние подразделе­ния» вместе с ключевым атрибутом «Код подразделения» (иначе потеряется связь с таб­лицей «ВЫПУСК ИЗДЕЛИЙ») и получим таб­лицу вида:

ПОДРАЗДЕЛЕНИЯ (Код подразделения, наименование под­раз­де­ления).

Атрибут «Наименование изделия» зависит только от атрибута «Код изделия» и не зависит от остальных ключевых атрибутов. Аналогично пре­ды­дущему случаю удалим его из таблицы в новую таб­­лицу:

ИЗДЕЛИЯ (Код изделия, наименование изделия).

Атрибут «Код типа изделия» зависит только от атрибута «Код из­де­лия» и не зависит от атрибутов «Код подразделения» и «Дата выпус­ка». Ана­логично предыдущему случаю удалим его из таблицы, добавим в таб­­­лицу «ИЗДЕЛИЯ» и получим таблицу:

ИЗДЕЛИЯ (Код изделия, наименование изделия, код типа изделия).

Атрибут «Наименование типа изделия» зависит только от атрибута «Код из­де­лия». Ана­логично предыдущему случаю удалим его из таблицы и добавим в таб­­­лицу «ИЗДЕЛИЯ» и получим таблицу:

ИЗДЕЛИЯ (Код изделия, наименование изделия, код типа изделия, наиме­но­вание типа изделия).

Атрибуты «Количество» и «Себестоимость изделия» зависят от все­го ключа, поэтому оставим их в исходной таблице.

Таким образом, получим три таблицы:

ВЫПУСК ИЗДЕЛИЙ (Код подразделения, код изделия, дата выпуска, коли­чество, себестоимость изделия).

ПОДРАЗДЕЛЕНИЯ (Код подразделения, наименование под­раз­де­ления).

ИЗДЕЛИЯ (Код изделия, наименование изделия, код типа изделия, наиме­но­вание типа изделия).

Очевидно, что все они находятся во второй нормальной форме.

Третья нормальная форма(3НФ)

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

Очевидно, что первые две таблицы удовлетворяют определению треть­ей нормальной формы. Рассмотрим таблицу «ИЗДЕЛИЯ».

Атрибут «Наиме­но­вание типа изделия» функционально зависит от неключевого атрибута «Код типа изделия», поэтому его следует удалить (по определению третьей нормальной формы) из таблицы в новую:

ТИПЫ ИЗДЕЛИЙ (Код типа изделия, наиме­но­вание типа изделия).

В результате получим модель базы данных из че­ты­рех таблиц в третьей нормальной форме (рисунок 3.2.6.1):

ВЫПУСК ИЗДЕЛИЙ (Код подразделения, код изделия, дата выпуска, коли­чество, себестоимость изделия).

ПОДРАЗДЕЛЕНИЯ (Код подразделения, наименование под­раз­де­ления).

ИЗДЕЛИЯ (Код изделия, наименование изделия, код типа изделия).

ТИПЫ ИЗДЕЛИЙ (Код типа изделия, наиме­но­вание типа изделия).

 
  Первая нормальная форма(1НФ) - student2.ru

Рисунок 3.2.6.1. Модель базы данных «Выпуск изделий»

Убедимся в исчезновении аномалий из первой нормальной формы.

1. Избыточное дублирование данных. Все наименования сохраняют­ся в таблицах по одному разу без дублирования.

2. Аномалия включения. Хотя изделие еще не выпущено, но инфор­ма­цию о нем можно занести или сохранить в таблице «ИЗДЕЛИЯ».

3. Аномалия удаления. Если изделие не выпускается в отчетный пе­ри­од, то инфор­ма­ция об изделии сохранится в таблице «ИЗДЕЛИЯ».

4. Аномалия корректировки. Если меняется название из­де­лия, то нуж­но откорректировать наименование только в одной строке таблицы «ИЗДЕЛИЯ»..

Существуют еще несколько, редко используемых нормальных форм, которые связаны только с составными ключами.

Усиленная третья нормальная форма,или нормальная форма Бойса‑Кодда(НФБК)

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

Четвертая нормальная форма(4НФ)

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

Пример. Имеется таблица вида:

ПРЕПОДАВАТЕЛИ (Табельный номер преподавателя, предмет, группа).

Очевидно, что имеем мно­го­значную функциональную зависимость между атрибутами «Предмет» и «Группа». Будем считать, что для каждой группы одним преподавателем читается один набор предметов. Сущест­вует аномалия: при до­бав­лении новой группы нужно добавить несколько записей, по числу чита­емых преподавателем предметов, что вызывает не­же­­­лательное дублирование значений атрибута «Предмет». Исключим мно­го­значную функциональную зависимость путем переноса этих атрибутов в раз­ные таблицы, разделяя исходную таблицу на две:

ПРЕПОДАВАТЕЛИ ПРЕДМЕТЫ (Табельный номер преподавателя, пред­мет).

ПРЕПОДАВАТЕЛИ ГРУППЫ (Табельный номер преподавателя, группа).

Пятую нормальную форму(5НФ) не будем рассматривать из‑за крайне редкого ее использования (она возможна при наличии трех и более объ­ектов, связанных друг с другом отношением «многие-ко-многим»), тем бо­лее что она имеет недостатки.

Денормализация– процесс введения избыточности данных в таб­ли­цах (нарушения нормализации) в целях повышения производитель­нос­ти. Существуют нисходящая (копиро­вание атрибута из родительского объекта в дочерний) и восходящая (копирование атрибута из дочернего в роди­тель­ский объект в форме итога) денормализация.

Пример. Нормализованные таблицы «ПРЕПОДАВАТЕЛИ ПРЕД­МЕ­ТЫ» и «ПРЕПОДАВАТЕЛИ ГРУППЫ» из предыдущего примера мож­но объединить в исходную таблицу «ПРЕПОДАВАТЕЛИ». Хотя и имеет место дублирование данных, но работа с одной таблицей будет быстрее, чем с двумя нормализованными.

В реальном проектировании разработчик должен достигнуть компро­мис­са между нормализацией (устранение избыточности) и денор­ма­ли­за­ци­ей (уве­личение производительности) таблиц.

Домены

 
  Первая нормальная форма(1НФ) - student2.ru

Для создания домена нужно выполнить команду Model/Domain Dic­tionary (рисунок 3.2.7.1), нажать кнопку New и заполнить поля (рисунок 3.2.7.2).

 
  Первая нормальная форма(1НФ) - student2.ru

Рисунок 3.2.7.1. Окно редактирования доменов на логическом уровне

Рисунок 3.2.7.2. Окно создания домена

 
  Первая нормальная форма(1НФ) - student2.ru

Домен можно создать на основе родительского домена (из списка Domain Parent). На страницах Datatype, Definition, Note, UDP (рисунок 3.2.7.1) можно ука­зать тип значений, описание, комментарий и свойство соот­ветственно. Можно создать один домен («код подразделения») и исполь­зовать его при создании атри­бутов различных сущностей (рисунок 3.2.7.3).

Рисунок 3.2.7.3. Окно создания атрибута на основе домена

 
  Первая нормальная форма(1НФ) - student2.ru

На физическом уровне можно корректировать домен командой Mo­del/Do­main Dic­tionary (рисунок 3.2.7.4).

Рисунок 3.2.7.4. Окно редактирования доменов на физическом уровне

На странице Genaral задаются имя родительского домена, наимено­ва­ние колонки. Параметры сервера (например, ORACLE (рисунок 3.2.7.4)) задаются на странице с наименованием типа СУБД.

Домены используются при генерации системы для создания типов пользователя.

Наши рекомендации