Page 108 - 4636
P. 108
Третій тип аномалій називається аномалією видалення, оскільки проявляється при видаленні
рядків з бази даних. Для прикладу уявімо, що після виконання замовлення видаляється з бази даних.
Тобто, як тільки всі поточні замовлення Слави Моргунова виконані, їх видаляють з таблиці Orders. А
це означає, що ми більше не маємо відомості про адресу Слави. Ми не зможемо надіслати йому якісь
спеціальні пропозиції, і наступного разу, коли він побажає замовити будь-що, доведеться знову
збирати всі дані про нього.
Загалом, проектування бази даних слід виконувати так, щоб запобігти виникненню будь-яких з
описаних вище аномалій.
Використання елементарних значень стовпців
Використання елементарних значень стовпців означає, що в кожному атрибуті кожного рядка
повинен зберігатися тільки один елемент. Наприклад, потрібно дізнатися, які книжки відібрані для
кожного замовлення. Цього можна досягти кількома шляхами. У таблицю Orders можна додати
стовпець, в якому розміщуватиметься список всіх замовлених книг (рис. 5.5).
Orders (Закази)
OrderID CustomerID Amount Date (Дата) Books Ordered(Заказані книги)
(Ідентифікатор (Ідентифікатор (Сумма)
заказу) клієнта)
1 3 88.40 02-Червня-2013 5-8459-0046-8
2 1 166.40 15-Червня-2013 5-8459-1082-X, 5-8459-1134-6
3 2 88.40 19-Червня-2013 5-8459-0046-8
4 4 254.40 01-Липня-2013 5-8459-1082-X, 5-8459-1134-6, 5-8459-0046-8
Рисунок 5.5 - Значення атрибутів Books Ordered (Замовлені книги)
У силу ряду причин це не дуже прийнято. По суті в цьому випадку в один стовпець ми
поміщаємо цілу таблицю, яка зв'язує замовлення з книгами. Такий підхід ускладнює відповідь на
питання типу: "Скільки примірників книги «Java 2. Керівництво розробника» було замовлено?"
система не зможе просто підрахувати кількість співпадаючих записів. Замість цього їй доведеться
проаналізувати значення кожного атрибута, щоб знайти всередині нього можливі збіги.
Оскільки в цьому випадку ми створюємо таблицю в таблиці, то треба просто створити нову
таблицю. Назвемо її Order ltems (Елементи заказу). Схема цієї таблиці показана на рис. 5.6.
Order_Items(Елементи замовлення)
OrderID ISBN Quantity(Кількість)
(Ідентифікатор заказу)
1 5-8459-0046-8 1
2 5-8459-1082-X 2
2 5-8459-1134-6 1
3 5-8459-0046-8 1
4 5-8459-1082-X 1
4 5-8459-1134-6 2
4 5-8459-0046-8 1
Рисунок 5.6 - Цей підхід спрощує процес пошуку замовлених книг
Наведена вище таблиця забезпечує зв'язок між таблицями Orders і Books . Використання таблиць
подібного типу дуже характерно для випадків, коли два об'єкти пов'язані між собою відношенням
"багато до багатьох" - у даному випадку одне замовлення може включати в себе кілька книг, а кожна з
книг може бути замовлена кількома людьми.
105