logo
Работа с базами данных

1.2 Теория нормальных форм

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

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

Каждая запись в таблице должна иметь первичный ключ, т.е. идентификатор (или адрес), значение которого однозначно определяет эту и только эту запись. Первичный ключ должен обладать двумя свойствами.

Однозначная идентификация записи: запись должна однозначно определяться значением ключа.

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

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

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

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

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

При проектировании таблиц рекомендуются следующие "золотые правила":

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

Если первичный ключ не просматривается, подумать, правильно ли подобран состав полей

Если первичный ключ безупречен, к нему можно дописывать любые атрибуты, зависящие только от ключа.

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

Состав атрибутов отношений БД должен удовлетворять двум основным требованиям:

Между атрибутами не должно быть нежелательных функциональных зависимостей (ФЗ);

Группировка атрибутов должна обеспечивать минимальное дублирование данных.

Удовлетворение этих требований достигается нормализацией отношений БД - пошаговый обратимый процесс декомпозиции (разложения) исходных отношений на более мелкие и простые отношения. При этом устраняются все нежелательные функциональные зависимости. Аппарат нормализации был разработан Е. Коддом.

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

Если есть атрибуты А и В, говорят что В функционально зависит от А, если для каждого значения А в любой момент времени существует ровно одно связанное с ним значение В, причём А и В могут быть составными - представлять собой группы, состоящие из 2-х и более атрибутов.

I нормальная форма

Простой атрибут - атрибут, значения которого неделимы, атомарны.

Сложный атрибут - атрибут, значение которого представляет собой конкатенацию значений одного/нескольких доменов (аналоги - агрегат, вектор, повторяющаяся группа)

Отношение находится в первой нормальной форме (НФ), если все атрибуты простые (атомарные) и нет повторяющихся групп. Отношение в I НФ должно быть прежде постановки вопроса о разбиении на два или более отношений, т.е. к I НФ необходимо привести универсальное отношение.

Универсальное отношение - отношение, в состав которого входят все атрибуты проектируемой БД.

Пример:

Сотрудники

ФИО

Таб. №

Отдел

Тел.

Дети

Имя

Возраст

Борисов

Борисов

211

211

СС

СС

3-57

3-57

Иван

Миша

10

15

Андреев

Андреев

364

364

УП

УП

2-15

2-15

Маша

Егор

6

4

II нормальная форма

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

Чтобы привести отношение ко 2 НФ необходимо:

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

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

Пример:

Универсальное отношение "Сотрудник" разбивается на два отношения:

Сотрудники Дети

Таб. №

ФИО

Отдел

Тел.

Таб. №

Имя

Возраст

211

Борисов

СС

3-57

211

Иван

10

211

Миша

15

364

Андреев

УП

2-15

364

Маша

6

364

Егор

4

Наличие транзитивной зависимости порождает неудобства и аномалии следующего характера (например, атрибут Тел.):

Имеет место дублирование информации для сотрудников одного отдела;

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

Аномалия добавления и удаления: нельзя включить данные о новом отделе, если на данный момент отсутствуют его сотрудники, и наоборот: при увольнении всех сотрудников отдела данные о нём нельзя сохранить.

Таким образом, отношение во II НФ также может потребовать дальнейших преобразований.

III нормальная форма

Отношение находиться в III НФ, если оно находиться во II НФ и в нём отсутствует транзитивная зависимость неключевых атрибутов от ключа.

Для преобразования к III НФ необходимо построить несколько проекций.

Пример:

(в нашем случае -- отношение "Сотрудник" разбить на два: Отдел - Тел.,

Таб. № - ФИО - Отдел).

Сотрудники

Отдел

Дети

Таб. №

ФИО

Отдел

Отдел

Тел.

Дети

- // -

211

Борисов

СС

СС

3-56

364

Андреев

УП

УП

2-15

В итоге получили три таблицы: "Сотрудники", "Отдел", "Дети"

III НФ освобождает от избыточности и аномалий редактирования, если отношения имеют один ключ и другие зависимости (в т.ч. многозначные) в нём отсутствуют.

Но если имеются многозначные зависимости от ключа, то III НФ не обеспечивает отсутствия аномалий обновления. В этом случае применяют усиленную III НФ.

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

Отношение находятся в НФБК, если оно находится в III НФ, и в нём отсутствуют зависимости ключей от не ключевых атрибутов.

Пусть имеется отношение R(А, В, С) с ключом К = {А, В}. Между атрибутами этого отношения существуют ФЗ А, В С и С В:

А, В С - зависит от ключа

С В - зависимость ключа от не ключевых атрибутов

Пример:

А - адрес, В - город, С - индекс;

Проект (Деталь#, Проект#, Поставщик#);

Дет#, Пр# Пост#, Пост# Пр#

Каждый проект может обслуживаться несколькими поставщиками, но любой поставщик обслуживает только один проект.

Для приведения к НФБК необходимо выполнить

;

.

Хотя существует НФ более высокого уровня, которые накладывают даже более сильные ограничения на отношения, на практике обычно стараются получить отношение НФБК.

Переход к НФБК происходит не по схеме , а с использованием более общего подхода к декомпозиции отношения.

IV нормальная форма

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

Например, для отношения преподаватель Препод (ФИО, группа, предмет) при появлении у преподавателя новой группы в отношение приходится добавлять не один кортеж, а столько, сколько предметов он читает в этой группе. Аналогичная ситуация возникает при добавлении в отношение нового предмета.

Устранение аномалий достигается разложением исходного отношения на несколько отношений с многозначной зависимостью от одного и того же ключа.

В нашем случае "Препод" разбивается на:

Предмет (ФИО, предмет)

Группа (ФИО, группа)