Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
pis_lect.docx
Скачиваний:
24
Добавлен:
28.10.2018
Размер:
2.55 Mб
Скачать

5.6.1. Первая нормальная форма. (вопрос 55)

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

Проиллюстрируем процесс нормализации на примере, использующем данные из базы NorthWind.

Положим, что регистрируются все заказанные продукты в следующей таблице (рис. 5.15).

Ordered Products

Рис. 5.15. Структура ненормализованной таблицы Ordered Products.

Любая реляционная таблица, в том числе и таблица Ordered Products, по определению, находится в первой нормальной форме.

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

При редактировании данных в этой таблице могут возникнуть следующие проблемы:

  • адрес конкретного клиента может содержаться в базе данных тогда, когда клиент заказал хотя бы один продукт;

  • при удалении записи о заказанном продукте одновременно удаляются сведения о самом заказе и о клиенте, его разместившем;

  • при смене адреса заказчика придется обновить все записи о заказанных им продуктах.

Некоторые из этих проблем могут быть разрешены приведением базы данных ко второй нормальной форме.

5.6.2. Вторая нормальная форма. (вопрос 56)

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

Таблица не должна содержать неключевых столбцов, зависящих только от части составного первичного ключа.

Таблица Ordered Products находится в первой, но не во второй нормальной форме, так как поля Customer ID, Address и Order Date зависят только от поля OrderID, являющегося частью составного первичного ключа OrderID, Product ID.

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

  1. Определить, на какие части можно разбить первичный ключ, так чтобы некоторые из неключевых полей зависели от одной из этих частей (эти части необязательно должны состоять из одной колонки).

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

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

Для приведения таблицы Ordered Products ко второй нормальной форме нужно переместить поля Customer ID, Address и Order Date в новую таблицу Orders Info. При этом поле Order ID станет первичным ключом новой таблицы (рис. 5.16).

Рис. 5.16. Приведение таблицы Ordered Products ко второй нормальной форме.

В результате проведенной процедуры таблицы приобретут вид (рис. 5.17.):

Рис. 5.17. Таблицы во второй нормальной форме.

Таблицы, находящиеся во второй нормальной форме, по-прежнему содержат аномалии модификации данных.

Так для таблицы Orders Info эти аномалии связаны со следующими ситуациями:

  • адрес конкретного клиента по-прежнему может содержаться в базе данных только тогда, когда клиент заказал хотя бы один продукт;

  • удаление записи о заказе в таблице приводит к удалению записи о самом клиенте;

  • если заказчик сменил адрес, придется обновить несколько записей (хотя, как правило, их меньше, чем в предыдущем случае).

Устранение этих аномалий связано с переходом к третьей нормальной форме.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]