3.1 Нормализация базы данных

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

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

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

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

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

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

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

3.2 Первая нормальная форма

1НФ — базовая нормальная форма отношения в реляционной модели данных, называемая первой нормальной формой.

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

Что касается различных таблиц, то они могут не представлять правильно отношения и, соответственно, не быть в 1НФ. Согласно определению Кристофера Дейта, такая таблица нормализована (то есть находится в первой нормальной форме) тогда и только тогда, когда она является прямым и верным представлением отношения. Более конкретно, таблица должна удовлетворять пяти условиям:

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

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

Таблица, не представляющая нормализованное отношение:

Employee Phone number
Nicole Garnett

231-232-4978

617-842-3385

Cal Hannah 510-378-5911
Cale Dane

Таблица, приведённая к 1НФ, представляет правильное соотношение.

Employee Phone number
Nicole Garnett

231-232-4978

Cal Hannah 617-842-3385
Cale Dane 510-378-5911

3.3 Вторая нормальная форма

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

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

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

Пример приведения отношения к второй нормальной форме: Пусть в отношении первичный ключ состоит из пары атрибутов {Филиал компании, Должность}.

R

Company branch Position Salary Availability of a computer
Branch in Mumbai Cleaner 20000 No
Branch in Sydney Programmer 40000 Yes
Branch in Mumbai Programmer 25000 Yes

Допустим, что зарплата зависит от филиала и должности, а наличие компьютера – только от должности.

Существует функциональная зависимость Должность → Наличие компьютера, где левая часть (детерминант) является частью первичного ключа. Это нарушает условие второй нормальной формы.

Для приведения к 2NF исходное отношение нужно декомпозировать на два отношения.

R1

Company branch Position Salary
Branch in Mumbai Cleaner 20000
Branch in Sydney Programmer 40000
Branch in Mumbai Programmer 25000

R2

Position Availability of a computer
Cleaner No
Programmer Yes

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

Переменная отношения R находится в 3NF только при соблюдении следующих условий:

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

Пояснения к определению:

Атрибут R без ключа - это атрибут, который не связан с каким-либо потенциальным ключом R. Если атрибуты X определяют атрибуты Z (записывается X → Z, произносится «икс определяет зет») и между X и Z есть множество атрибутов Y, то это называется транзитивной функциональной зависимостью. При этом ни одно из множеств X, Y и Z не должно быть подмножеством другого. Функциональные зависимости X → Z, X → Y и Y → Z не должны быть тривиальными, и не должно быть функциональной зависимости Y → X. В 1982 году Карло Заниоло дал определение 3NF, которое эквивалентно определению Кодда, только другими словами. Отношение находится в 3NF, если для каждой из ее функциональных зависимостей X → A выполнено одно из следующих условий.

  • Х содержит А (то есть X → A — тривиальная функциональная зависимость)
  • Х — суперключ
  • А — ключевой атрибут (то есть А входит в состав потенциального ключа).

3NF и НФБК отличаются. НФБК не имеет третьего условия «А — ключевой атрибут». Билл Кент дал помнимую формулировку для 3NF: все неключевые атрибуты должны связываться с ключом, полным ключом и ни с чем кроме ключа. Это значит, что отношение находится во второй нормальной форме, а для 3NF необходимо дополнительное условие. Крис Дейт обозначает это резюме как «интуитивно привлекательное» и оно может быть использовано для НФБК: все атрибуты должны связываться с ключом, полным ключом и ни с чем кроме ключа.

Вариант определения 3NF Кента менее строгий, чем вариант нормальной формы Бойса-Кодда в формулировке Дейта, поскольку первый требует лишь того, чтобы неключевые атрибуты зависели от ключей.

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

В качестве примера рассмотрим переменную отношения R1:

R1

Employee Department Phone
Nicole Accounting 23-23-49
Kassy Accounting 23-23-49
Diana Supply 51-37-59

Каждый сотрудник относится исключительно к одному отделу. Каждый отдел имеет единственный телефон. Атрибут Сотрудник является первичным ключом. У сотрудников нет личных телефонов, и телефон сотрудника зависит от отдела.

В примере существуют следующие функциональные зависимости: Сотрудник → Отдел, Отдел → Телефон, Сотрудник → Телефон.

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

Зависимость Сотрудник → Телефон является транзитивной, поэтому отношение не находится в третьей нормальной форме.

В результате разделения R1 получаются два отношения, находящиеся в 3NF.

R2

Department Phone
Accounting 23-23-49
Supply 51-37-59

R3

Employee Department
Nicole Accounting
Kassy Accounting
Diana Supply

Исходное отношение R1 можно легко получить в результате операции соединения отношений R2 и R3.