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