Нормализация таблиц
Минимизировать избыточность данных позволяет процесс, называемый нормализацией таблиц. Нормализацию можно было использовать для получения эффективных структур данных, созданных в результате преобразования ER-диаграмм. Но чтобы пояснить этот процесс, будем исходить из описания предметной области ИЗДАТЕЛЬСКИЙ ЦЕНТР.
Реляционная база данных считается эффективной, если все ее таблицы находятся как минимум в 3НФ. Приведение к 3НФ осуществляется, если есть основание для этого.
Определение 1нф
Таблица находится в 1НФ, если все ее поля содержат только простые неделимые значения.
В Таблице ПИСАТЕЛЬ–КОНТРАКТ все атрибуты имеют неделимые значения. Таким образом, таблица ПИСАТЕЛЬ–КОНТРАКТ удовлетворяет требованиям 1 НФ.
ПИСАТЕЛЬ–КОНТРАКТ |
НОМ_ПАС |
ФАМ |
ИМЯ |
ОТЧ |
АДР |
ТЕЛ |
НОМ_КОН |
ДАТ_ЗАКЛ_КОН |
СР_КОН |
КОН_РАСТ |
ДАИ_РОЖ_КОН |
В Таблице КНИГА все атрибуты имеют неделимые значения. Таким образом, таблица КНИГА удовлетворяет требованиям 1 НФ.
КНИГА |
Ш_КН |
НАЗ |
ТИР |
ДАТ_ВЫХ |
СЕБ-ТЬ |
ЦЕНА |
ГОН |
НОМ_КОН |
НОМ_ЗАКАЗА |
В Таблице ЗАКАЗ все атрибуты имеют неделимые значения. Таким образом, таблица ЗАКАЗ удовлетворяет требованиям 1 НФ.
ЗАКАЗ |
НОМ_ЗАКАЗА |
ДАТ_ПОСТ_ЗАК |
ДАТ_ВЫП_ЗАК |
КОЛ_ЭКЗ |
НОМ_ЗАКАЗЧ |
В Таблице ЗАКАЗЧИК все атрибуты имеют неделимые значения. Таким образом, таблица ЗАКАЗЧИК удовлетворяет требованиям 1 НФ.
-
ЗАКАЗЧИК
НОМ_ЗАКАЗЧ
АДР
ТЕЛ
ОБР
Определение 2нф
Таблица находится в 2НФ, если она удовлетворяет требованиям 1НФ и неключевые поля функционально полно зависят от первичного ключа.
-
ЗАКАЗЧИК
НОМ_ЗАКАЗЧ
АДР
ТЕЛ
ОБР
В таблице ЗАКАЗЧИК неключевые поля АДР, ТЕЛ, ОБР функционально зависят от ключа КОД_ВК, что запишем
НОМ_ЗАКАЗЧ АДР, ТЕЛ, ОБР
Таким образом, таблица ЗАКАЗЧИК удовлетворяет требованиям 2НФ, так как ее неключевые поля АДР, ТЕЛ, ОБР функционально полно зависят от первичного ключа
НОМ_ЗАКАЗЧ АДР, ТЕЛ, ОБР
В таблице ЗАКАЗ неключевые поля ДАТ_ПОСТ_ЗАК, ДАТ_ВЫП_ЗАК КОЛ_ЭКЗ, НОМ_ЗАКАЗЧ, функционально зависят от ключа НОМ_ЗАКАЗА, что запишем
НОМ_ЗАКАЗА ДАТ_ПОСТ_ЗАК, ДАТ_ВЫП_ЗАК КОЛ_ЭКЗ, НОМ_ЗАКАЗЧ
ЗАКАЗ |
НОМ_ЗАКАЗА |
ДАТ_ПОСТ_ЗАК |
ДАТ_ВЫП_ЗАК |
КОЛ_ЭКЗ |
НОМ_ЗАКАЗЧ |
Таким образом, таблица ЗАКАЗ удовлетворяет требованиям 2НФ, так как ее неключевые поля ДАТ_ПОСТ_ЗАК, ДАТ_ВЫП_ЗАК КОЛ_ЭКЗ, НОМ_ЗАКАЗЧ функционально полно зависят от первичного ключа
НОМ_ЗАКАЗА ДАТ_ПОСТ_ЗАК, ДАТ_ВЫП_ЗАК КОЛ_ЭКЗ, НОМ_ЗАКАЗЧ
3) В таблице КНИГА неключевые поля НАЗ, ТИР, ДАТ_ВЫХ, СЕБ-ТЬ, ЦЕНА, ГОН, НОМ_КОН, НОМ_ЗАКАЗА функционально зависят от ключа Ш_КН, что запишем
Ш_КН НАЗ, ТИР, ДАТ_ВЫХ, СЕБ-ТЬ, ЦЕНА, ГОН, НОМ_КОН, НОМ_ЗАКАЗА
КНИГА |
Ш_КН |
НАЗ |
ТИР |
ДАТ_ВЫХ |
СЕБ-ТЬ |
ЦЕНА |
ГОН |
НОМ_КОН |
НОМ_ЗАКАЗА |
Таким образом, таблица КНИГА удовлетворяет требованиям 2НФ, так как ее неключевые поля НАЗ, ТИР, ДАТ_ВЫХ, СЕБ-ТЬ, ЦЕНА, ГОН, НОМ_КОН, НОМ_ЗАКАЗА функционально полно зависят от первичного ключа
Ш_КН НАЗ, ТИР, ДАТ_ВЫХ, СЕБ-ТЬ, ЦЕНА, ГОН, НОМ_КОН, НОМ_ЗАКАЗА
4) В таблице ПИСАТЕЛЬ–КОНТРАКТ неключевые поля НОМ_ПАС, ФАМ, ИМЯ, ОТЧ, АДР, ТЕЛ, ДАТ_ЗАКЛ_КОН, СР_КОН КОН_РАСТ, ДАИ_РОЖ_КОН функционально зависят от ключа НОМ_КОН, что запишем
НОМ_КОН НОМ_ПАС, ФАМ, ИМЯ, ОТЧ, АДР, ТЕЛ, ДАТ_ЗАКЛ_КОН, СР_КОН КОН_РАСТ, ДАИ_РОЖ_КОН
ПИСАТЕЛЬ–КОНТРАКТ |
НОМ_ПАС |
ФАМ |
ИМЯ |
ОТЧ |
АДР |
ТЕЛ |
НОМ_КОН |
ДАТ_ЗАКЛ_КОН |
СР_КОН |
КОН_РАСТ |
ДАИ_РОЖ_КОН |
Таким образом, таблица ПИСАТЕЛЬ–КОНТРАКТ удовлетворяет требованиям 2НФ, так как ее неключевые поля НОМ_ПАС, ФАМ, ИМЯ, ОТЧ, АДР, ТЕЛ, ДАТ_ЗАКЛ_КОН, СР_КОН КОН_РАСТ, ДАИ_РОЖ_КОН функционально полно зависят от первичного ключа
НОМ_КОН НОМ_ПАС, ФАМ, ИМЯ, ОТЧ, АДР, ТЕЛ, ДАТ_ЗАКЛ_КОН, СР_КОН КОН_РАСТ, ДАИ_РОЖ_КОН
Определение 3НФ
Таблица находится в 3НФ, если она удовлетворяет требованиям 2НФ и не содержит транзитивных зависимостей.
Транзитивной зависимостью называется функциональная зависимость между неключевыми полями. В таблице КНИГА она наблюдается
Ш_КН СЕБ-ТЬ, ЦЕНА, ГОН
Следовательно, нарушаются требования 3НФ. Из таблицы КНИГА надо удалить поля, участвующие в этой транзитивной зависимости, – СЕБ-ТЬ, ЦЕНА, ГОН. Получится таблица, характеризующая оплата, вида
КНИГА |
Ш_КН |
НАЗ |
ТИР |
ДАТ_ВЫХ |
НОМ_КОН |
НОМ_ЗАКАЗА |
Затем создается новая таблица, в которую помещаются удаленные поля и поле, от которого они зависят. Она имеет вид
ОПЛАТА |
СЕБ-ТЬ |
ЦЕНА |
ГОН |
Ш_КН |
Полученные таблицы приведены к 3НФ. В них каждая запись есть отдельное независимое утверждение.
Как видим, нормализация приводит к фрагментации исходных таблиц. Осуществив связь этих таблиц посредством связи первичных и внешних ключей, получим реляционную модель данных предметной области ИЗДАТЕЛЬСКИЙ ЦЕНТР, в которой минимизирована избыточность данных. Эта модель представлена на рисунке.
КНИГА |
Ш_КН |
НАЗ |
ТИР |
ДАТ_ВЫХ |
НОМ_КОН |
НОМ_ЗАКАЗА |
ОПЛАТА |
СЕБ-ТЬ |
ЦЕНА |
ГОН |
Ш_КН |
ПИСАТЕЛЬ–КОНТРАКТ |
НОМ_ПАС |
ФАМ |
ИМЯ |
ОТЧ |
АДР |
ТЕЛ |
НОМ_КОН |
ДАТ_ЗАКЛ_КОН |
СР_КОН |
КОН_РАСТ |
ДАИ_РОЖ_КОН |
ЗАКАЗ |
НОМ_ЗАКАЗА |
ДАТ_ПОСТ_ЗАК |
ДАТ_ВЫП_ЗАК |
КОЛ_ЭКЗ |
НОМ_ЗАКАЗЧ |
ЗАКАЗЧИК |
НОМ_ЗАКАЗЧ |
АДР |
ТЕЛ |
ОБР |
Рис. Реляционная модель предметной области ИЗДАТЕЛЬСКИЙ ЦЕНТР после нормализации