Page 107 - 4636
P. 107

Books (книги)
                  ISBN                Author             Title (Назва)                     Price (Ціна)
                                   (Автор)
                5-8459-0046-8      Майкл Морган        Java2. Посібник користувача         88.40
                5-8459-1082-X      Крістофер Негус       Linux. Біблія користувача         98.20
                5-8459-1134-6      Марина Смоліна        CorelDrawX3. Самовчитель          68.20

                       Рисунок 5.3 - Дана схема складається з таблиць Customers, OrdersiBooks

              У даному випадку, дивлячись на модель, не можна дізнатись, які книги були вказані в кожному
        замовленні. Це питання ми розглянемо пізніше.
              Уникнення зберігання надлишкової інформації
              Дещо раніше ми задавалися питанням: "Чому б просто не зберігати адресу Слави Моргунова в
        таблиці Orders?"
              Якщо  Слава  Моргунов  замовить  у  магазині  "Буквофіл"  кілька  книг  (на  що  ми  щиро
        сподіваємося),  відомості  про  нього  доведеться  записувати  кілька  разів.  У  підсумку  таблиця  Orders
        може набути вигляду, показаного на рис. 5.4.

        OrderID     Amount        Date (Дата)      CustomerID       Name(ФІО)           Address           City
        (Іденти-    (Сумма)                           (Іденти-                       (Адреса)          (Місто)
        фікатор                                    фікатор
        заказу)                                    клієнта)
           1           27.50   02-Червня-2013         1          Слава Моргунов  56, вул. Пулюя        м.Одеса
           2           12.99   15-Червня-2013         1          Слава Моргунов  56, вул. Пулюя        м.Одеса
           3           74.00   19-Червня-2013         1          Слава Моргунов  56, вул. Пулюя        м.Одеса
           4           6.99    01-Липня-2013          1          Слава Моргунов  56, вул. Пулюя        м.Одеса
              Рисунок 5.4 - Структура бази даних, в якій зберігається надлишкова інформація, займає
                                більше місця і може бути причиною аномалій у даних

              З таким підходом пов'язані дві основні проблеми:
              1  По-перше, марно витрачається простір на жорсткому диску. Навіщо зберігати інформацію про
        Славу тричі, якщо досить зробити це тільки один раз.
              2  По-друге, в цьому випадку можливе виникнення аномалій оновлення, тобто ситуацій , коли
        оновлення бази даних призводить до невідповідностей у даних. Цілісність даних порушується, після
        чого невідомо, які дані правильні, а які - ні. Як правило, подібні ситуації завершуються втратою даних.
              Слід  уникати  трьох  типів  аномалій  оновлень  :  аномалій  модифікації  ,  аномалій  вставки  та
        аномалій видалення.
              Якщо, очікуючи виконання замовлення, Слава Моргунов переїде в інший будинок, нову адресу
        доведеться вказувати в трьох місцях, а не в одному, проробляючи в три рази більшу роботу. Можна не
        помітити  інших  замовлень  і  змінити  адресу  всього  в  одному  місці,  що  призведе  до  ще  гірших
        наслідків- невідповідності даних  у базі. Такі  проблеми називають аномаліями модифікації, оскільки
        вони з'являються внаслідок спроб модифікації бази даних.
              У  цьому  випадку  відомості  про  Славу  Моргунова  доведеться  вводити  щоразу,  приймаючи
        замовлення. Тому необхідно постійно перевіряти відповідність між введеними відомостями і даними,
        записаними в таблиці. В іншому випадку в таблиці можуть з'явитися два рядки з інформацією,  яка
        суперечить  одна  одній  про  Славу  Моргунова.  Наприклад,  в одному  рядку  може  повідомлятися, що
        Слава Моргунов проживає в м. Одеса, а в іншій місцем його проживання буде вказаний смт. Солотвин.
        Така невідповідність називається аномалією вставки, оскільки вона виникає під час вставки даних.
                                                            104
   102   103   104   105   106   107   108   109   110   111   112