В реляционной БД схема содержит как структурную, так и семантическую информацию. Структурная информация связана с объявлением отношений, а семантическая выражается множеством известных функциональных зависимостей между атрибутами отношений. Семантика определяется предметной областью. Но некоторые функциональные зависимости могут быть нежелательными из-за побочных эффектов (аномалий), которые они вызывают при модификации БД (аномалии включения, добавления, удаления). В связи с этим возникает вопрос о корректности представления схемы.
Схема корректна, если отсутствуют нежелательные функциональные зависимости. Иначе приходится прибегать к процедуре декомпозиции, при которой данное множество отношений заменяется другим (проекцией первого).
Нормализация – обратимый пошаговый процесс замены данного набора отношений другим, в котором отношения имеют более простую и регулярную структуру.
Атрибут, входящий в ключ - первичный.
Функциональная зависимость a → b (b зависит от a) полная, если b зависит от всей группы атрибутов, а не от её части. Иначе зависимость не полная.
В отношении кроме функциональных зависимостей есть и другие, например, многозначные, в которых кроме основных атрибутов присутствуют не основные (–>>).
Атрибут А многозначно определяет атрибут B в отношении R, или B многозначно зависит от А, если каждому значению А соответствует множество значений B никак не связанных с другими атрибутами отношения R. B может быть пустым множеством.
Недостатки алгоритма нормализации:
Первоначальное размещение всех атрибутов в одном отношении не очень естественно.
Нельзя сразу определить полный список атрибутов.
Для нормализации нужно выделить все зависимости исходных атрибутов, что является сложным процессом.
Выводы по теории нормализации:
1) Освобождение набора отношений от нежелательных зависимостей при корректировке (добавлении, удалении, изменении).
2) Исключение необходимости перекройки набора отношений, при введении новых атрибутов, что увеличивает период жизни и БД и ПО.
3) Стремление сделать модель более информативной для понимания.
4) Стремление сделать набор отношений нейтральным для ПО.