Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных Язык SQL.doc
Скачиваний:
6
Добавлен:
01.03.2025
Размер:
1 Мб
Скачать
☆

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

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

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

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

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

3.2.1 Определение функциональной зависимости

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

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

Подмножество атрибутов X называют детерминантом функциональной зависимости.

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

Например, в отношении Сотрудники (код, ФИО, пол, дата_рождения) можно выделить довольно много ФЗ. Вот некоторые из них:

  • код ФИО

  • код пол

  • код дата_рождения

  • код (ФИО, дата_рождения),

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

Атрибуты ФИО и дата_рождения являются взаимно независимыми, поскольку в общем случае ни один из них не зависит от другого. Заметим, что если текущее состояние базы данных таково, что все ФИО различны, все равно нельзя говорить о наличии ФЗ ФИО дата_рождения, поскольку уникальность и/или неизменность столбца ФИО явно не декларирована и значения-дубликаты могут появиться в любой момент.

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