Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Моделирование баз данных.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
1.82 Mб
Скачать

2.4.3 Пример построения нормализованной базы данных

База данных для работников гостиницы. В БД должны храниться сведения о проживающих клиентах. Номера отличаются числом мест и стоимостью проживания в сутки. Цена проживания зависит от числа мест. Количество номеров в гостинице известно. Номера располагаются на разных этажах гостиницы.

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

Определим таблицу ГОСТИНИЦА в первой нормальной форме:

ГОСТИНИЦА (номер, число_мест, цена, ЭТАЖ, код_клиента, фАмилия, имя, отчество, ПАСПОРТ, город, дата_прибытия, дата_убытия).

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

КОД_КЛИЕНТА -> ФАМИЛИЯ,

КОД_КЛИЕНТА -> ИМЯ,

КОД_КЛИЕНТА -> ОТЧЕСТВО,

КОД_КЛИЕНТА -> ПАСПОРТ,

КОД_КЛИЕНТА -> ГОРОД,

Для приведения исходной таблицы ко второй нормальной форме разобьем ее на две таблицы:

КЛИЕНТ (код_клиента, фАмилия, имя, отчество, ПАСПОРТ, город),

проЖИВАЕТ (номер, число_мест, цена, ЭТАЖ, код_клиента, дата_прибытия, дата_убытия).

Таблица ПРОЖИВАЕТ получена из таблицы ГОСТИНИЦА после удаления из нее повторяющихся в таблице КЛИЕНТ неключевых атрибутов. Полученные таблицы КЛИЕНТ и ПРОЖИВАЕТ находятся во второй нормальной форме, поскольку в них нет функциональных зависимостей, в которых какой-либо неключевой атрибут зависит от части ключа. Но в таблице ПРОЖИВАЕТ имеют место функциональные зависимости:

НОМЕР - > ЧИСЛО_МЕСТ,

НОМЕР - > ЦЕНА,

НОМЕР - > ЭТАЖ,

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

НОМЕР (НОМЕР, ЧИСЛО_МЕСТ, ЦЕНА, ЭТАЖ).

После удаления из таблицы ПРОЖИВАЕТ повторяющихся в таблице НОМЕР неключевых атрибутов получим таблицу

проЖИВАЕТ (номер, код_клиента, дата_прибытия, дата_убытия).

Таблица ПРОЖИВАЕТ теперь является таблицей в третьей нормальной форме, поскольку в ней не осталось функциональных зависимостей неключевых атрибутов от неключевого атрибута.

Анализ таблицы НОМЕР показывает, что в ней имеет место зависимость неключевого атрибута от другого неключевого атрибута

ЧИСЛО_МЕСТ -> ЦЕНА.

После создания таблицы ТИП_НОМЕРА (ЧИСЛО_МЕСТ, ЦЕНА) и удаление атрибута ЦЕНА из таблицы НОМЕР получим базу данных ГОСТИНИЦА, состоящую из четырех таблиц:

КЛИЕНТ (код_клиента, фАмилия, имя, отчество, ПАСПОРТ, город),

проЖИВАЕТ (номер, код_клиента, дата_прибытия, дата_убытия),

НОМЕР (НОМЕР, ЧИСЛО_МЕСТ, ЭТАЖ),

ТИП_НОМЕРА (ЧИСЛО_МЕСТ, ЦЕНА).

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

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

Атрибут НОМЕР служит внешним ключом для связи между таблицами НОМЕР и ПРОЖИВАЕТ. Атрибут ЧИСЛО_МЕСТ служит внешним ключом для связи между таблицами НОМЕР и ТИП_НОМЕРА. Атрибут КОД_КЛИЕНТА обеспечивает связь между таблицами КЛИЕНТ и ПРОЖИВАЕТ.