Почему нельзя сохранять адрес клиента в таблице заказов? Потому, что клиент может заказать несколько книг в книжном магазине и данные о нем придется перезаписывать несколько раз.
ЗаказID
Сумма
Дата
КлиентID
Имя
Адрес
Город
199.50
25-Apr-2000
Julie Smith
28 Oak Street
Airport West
43.00
29-Apr-2000
Julie Smith
28 Oak Street
Airport West
15.99
30-Apr-2000
Julie Smith
28 Oak Street
Airport West
23.75
01-May-2000
Julie Smith
28 Oak Street
Airport West
Проект базы, в котором хранится избыточная информация, занимает больше места и может вызывать аномальные явления в используемых данных.
Две основные проблемы:
1. Имеет место расточительная трата пространства на жестком диске.
2. Возможны аномалии обновлений, т.е. те ситуации, когда при обновлении базы данных в результате получаются несоответствия. Нарушается целостность данных, после чего неизвестно где верная информация, а где нет. Такие ситуации, как правило, оборачиваются потерей данных.
Надо избегать трех типов аномалий обновлений: аномалию модификации, ввода и удаления.
1) Если клиент, ожидая заказа, переедет в другой дом, его адрес придется менять в нескольких местах, а не в одном, проделывая в несколько раз больше работы. С другой стороны, можно изменить адрес клиента в одном месте таблицы, но это приведет к еще худшим последствиям – несоответствию данных в базе. Такие проблемы называют аномалиями модификации, т.к. они появляются вследствие попыток модификации базы данных.
2) При таком проекте потребуется вводить данные о клиенте Julie каждый раз, принимая заказ. Причем, постоянно надо проверять соответствуют ли существующие данные записанным в таблице. Если этого не делать, то вскоре в таблице могут появиться две строки с противоречащей друг другу информацией о клиенте Julie. Например, одна строка сообщает, что Julie живет в Airport West, а другая – что в Airport. Такая проблема называется аномалией ввода, т.к. появляется при вводе данных.
3) Этот тип аномалий называется аномалией удаления, т.к. появляется при удалении строк из базы данных. Если после выполнения заказ удаляется из базы данных, то, как только все текущие заказы Julie выполнены, их все удаляют из таблицы Заказы. Тогда у нас не будет записей об адресе Julie, мы не сможем присылать ей какие-то специальные предложения, и в следующий раз при новом заказе Julie придется опять собирать все данные о ней.