Professional Documents
Culture Documents
Lab 2 Oracle 18c New
Lab 2 Oracle 18c New
Теоретичні відомості
Нормальні форми
Визначення стовпців, які використовуються в якості первинних ключів, є
важливим етапом розробки таблиць для реляційної бази даних. Тим не менше це не
все. Кожна таблиця в реляційній базі даних повинна задовольняти певним умовам.
Якщо ці умови не задовольняються, використання бази даних буде пов'язане з
безліччю проблем, включаючи втрату важливих даних. Отже, як правило, ви
починаєте з форми або опису даних. Далі ви створюєте об'єкти. Потім завдяки
процесу нормалізації дані об'єкти перетворюються на таблиці. Нижче ми докладно
розпишемо процедуру створення таблиць з дуже вдалими характеристиками.
Найпростіше зрозуміти цей процес на прикладі. Розглянемо його.
На рис. 2.1 показана стандартна бізнес-форма для замовлення клієнта. Дані в формі
зображені до нормалізації.
Подивіться на форму і подумайте, чи можете ви визначити основні об'єкти.
Об'єкт Customer порівняно очевидний особливо через те, що він укладений в окрему
рамку. Якщо ви трохи про це подумаєте, то можете прийти до висновку, що
об'єктом може бути весь елемент CustomerOrder. Розглянемо решту даних. Оскільки
вони також відображаються в окремому прямокутнику, заманливо припустити, що
впорядковані елементи представляють третій і останній об'єкт. Для початку
відповідь хороша, проте її потрібно поліпшити.
Для того щоб зрозуміти, навіщо потрібна нормалізація бази даних, спробуйте
створити таблицю бази даних без планування будь-якої структури. Що станеться,
якщо всі дані з форми клієнтів помістити в одну таблицю?
Рис 2.2. Всі данні розміщено в одній таблиці – приклад невдалого дизайну.
Рис 2.3. Зменшення числа повторень за рахунок використання неатомної структури – все ще не
ідеально.
На рис. 2.1 показано кілька елементів даних. По-перше, зверніть увагу на те,
що вам не обов'язково зберігати стовпець Value, оскільки його можна обчислити за
існуючими даними.
Як правило, все, що можна обчислити, зберігати не обов'язково. База даних
має в своєму розпорядженні інструменти, які виконають для вас всі розрахунки,
тому вам зовсім не обов'язково займати місце цією інформацією.
Якщо ви спробуєте ввести дані в запропоновану таблицю, то швидко виявите
ряд проблем – в основному це надмірна кількість повторів. Для кожної з трьох
замовлених речей вам доведеться не тільки повторно вводити всі дані замовлення,
але і всі дані про клієнта. А постійний повтор одних і тих же даних це бездумне
витрачання місця. Однак є й інші проблеми. Що станеться, якщо клієнт (Замовник)
155 відмінить своє замовлення і ви вилучили два рядки таблиці? Ви втратите всю
інформацію про клієнта! Інше питання: що ви можете сказати про продукт 1577?
Він ще не замовлений, тому для зберігання зазначених даних немає місця, отже, ви
не знаєте нічого. Вивчаючи запропоновану таблицю, ви можете знайти й інші
проблеми подібного роду. Як виправити дизайн таблиці та уникнути цих проблем?
Гарантувати, що всі таблиці відповідають трьом правилам нормалізації (або трьом
нормальним формам)! Дані правила нормалізації застосовуються послідовно,
починаючи з першої нормальної форми.
Рис 2.5. Виділення стовпців, які залежать тільки від значення ItemID.
Третя нормальна форма
У таблиці замовлень клієнтів (див. рис. 2.5) все ще є проблеми. Якщо ми
повернемося до вихідної таблиці, наведеної на рис. 2.2, то побачимо ці проблеми ще
чіткіше. Для кожного замовлення в таблиці як і раніше повторюється одна і та ж
інформація про клієнта. У первинному варіанті інформація про клієнта
повторювалася для кожної замовленої речі. Проблема полягає в тому, що дані про
клієнта (ім'я, адреса тощо) Залежать тільки від атрибута CustomerlD, але абсолютно
не залежать від OrderlD. Якщо ви знаєте значення атрибуту CustomerlD, то знаєте
все про даний клієнта і вам зовсім не потрібен атрибут OrderlD.
Таблиця знаходиться в третій нормальній формі, коли будь-який стовпець,
що не належить до ключа, залежить тільки від ключа. Крім того, вона повинна
перебувати в другій нормальній формі. У цьому прикладі дані про клієнта залежать
від атрибута CustomerlD, який не є частиною первинного ключа, тому таблиця не
знаходиться в третій нормальній формі. Як і раніше, для вирішення цієї проблеми
таблицю необхідно розщепити на дві. Вам слід винести стовпці, що залежать тільки
від атрибута CustomerlD, і помістити їх у власну таблицю.
Отримані в результаті таблиці показані на рис. 2.6. Ви можете вивчити їх і
переконатися, що вони знаходяться в третій нормальній формі. Головне, пам'ятайте,
що таблиця знаходиться в третій нормальній формі тоді й тільки тоді, коли кожна
клітинка містить атомні дані, а будь-який стовпець, що не входить в ключ, залежить
від усього ключа і тільки від ключа.
Крім того, Oracle підтримує типи даних, порівнянні з типами даних ANSI.
АРХІТЕКТУРА ТАБЛИЧНОГО ПРОСТОРУ
Табличний простір (tablespace) - винахід фахівців компанії Oracle. Це логічний
набір елементів бази даних. Як адміністратор ви можете помістити в табличний простір
різні об'єкти (у тому числі користувачів). Ви можете створити як завгодно багато
табличних просторів і вирішувати, що ви будете зберігати в них.
Можливо, ви віддасте перевагу зберігати всі таблиці і інші об'єкти однієї бізнес-
системи в одному табличному просторі, а дані, відповідні іншим системам, - в інших
табличних просторах. Можна також піти далі і зберігати в одному табличному просторі
тільки таблиці однієї бізнес-системи, а всі індекси даної системи - в інших табличних
просторах. Можна поступити і по-іншому, а саме: розмістити всі об'єкти в один великий
табличний простір. У чому відмінність цих підходів і як прийняти правильне рішення?
На рис. 2.7 показані основні терміни, що стосуються зберігання даних у системі
Oracle. Табличний простір - це логічний набір даних.
З ним
База даних
Екстент 1
Табличний простір
Екстент 2
Сегмент 1 Сегмент 2
Сегмент 3 Сегмент 4
Ціна
№ Од. Кіл-ть Сума вал Сума грн ПДВ Всього
Назва вал
1 лампа Б40Вт E-27 шт. 100,000 3,17 317,50 317,50 63,500 381,000
2 Лампа рефл. R 63 60W Е27 шт. 50,000 7,65 382,92 382,92 76,584 459,504
3 Лампа ЛОН 300 Вт Е-27 шт. 15,000 10,82 162,25 162,25 32,450 194,700
4 лампа F18W/54-765 G13 люм шт. 50,000 7,18 358,75 358,75 71,750 430,500
5 Стартер 4-22WFS22 шт. 50,000 2,98 149,17 149,17 29,834 179,004
6 лампа гал . 300W /240V шт. 7,000 20,70 144,90 144,90 28,980 173,880
7 Лампа ен зб 9W-840 T14 шт. 20,000 31,66 633,33 633,33 126,666 759,996
8 Вимикач авт.LR 1 10A тип С шт. 2,000 35,69 71,38 71,38 14,276 85,656
9 Вимикач авт.LR 1 16A тип С шт. 2,000 35,69 71,38 71,38 14,276 85,656
10 Вимикач авт.LR 1 20A тип С шт. 2,000 35,69 71,38 71,38 14,276 85,656
11 Вимикач авт.LR 1 25A тип С шт. 2,000 35,69 71,38 71,38 14,276 85,656
12 Вимикач авт.LR 3 25A тип С шт. 1,000 128,16 128,16 128,16 25,632 153,792
13 Вимикач авт.LR 3325A тип С шт. 1,000 135,51 135,51 135,51 27,102 162,612
14 Механізм вимикача 2 кл шт. 2,000 39,68 79,35 79,35 15,870 95,220
15 Механізм вимикача універсальн шт. 2,000 25,68 51,37 51,37 10,274 61,644
16 Розетка Z,біла 16А\230В шт. 5,000 24,38 121,88 121,88 24,376 146,256
17 Клавіша для 2-х клавиш.вимикач шт. 2,000 10,14 20,28 20,28 4,056 24,336
біла
18 Вимикач 2 кл- білий шт. 2,000 63,92 127,83 127,83 25,566 153,396
19 Вимикач універс. білий шт. 2,000 52,90 105,80 105,80 21,160 126,960
20 Клавіша для 1 клавішн. вимикач шт. 2,000 6,95 13,90 13,90 2,780 16,680
біла
21 баласт F40 B2 шт. 6,000 25,88 155,30 155,30 31,060 186,360
22 Светильник ЛПО 11У-18-212 шт. 13,000 155,88 2026,38 2026,38 405,276 2431,656
проз
23 Лампа ен зб R63 13W 2700K T27 шт. 11,000 33,72 370,88 370,88 74,176 445,056
Всього: 5770,98 5770,98 1154,20 6925,18
Далі можна або зразу створювати таблиці в створеному табличному просторі, або
спочатку створити їх в просторі за замовченням (скоріш за все в USERS), а потім
перенести їх в потрібний табличний простір. Але в цьому випадку принциповим є в
якому порядку переносити таблиці. Розглянемо, наприклад, другий варіант.
Крок 1. Створюємо таблицю «PRODUCTS». Для цього заходимо в «Object
Browser» на головній сторінці ORACLE APEX
Тепер задамо віддалений ключ. Для цього в пункті «Select Key Column(s)» виберемо
стовпець «ID_PRODUCT». В пункті «Reference Table» оберемо таблицю «PRODUCTS».
Після цього з’явиться ще оди список стовпців «Select Reference Column(s)», це стовпці
відданої таблиці. Зі списку виберемо «ID_PRODUCT». Далі потрібно натиснути кнопку
«Add».
Наша таблиця готова.
Крок 3. Додаємо дані в нашу БД. Заповнюємо таблиці. Можливі варіанти заповнення
таблиць ми вже розглядали в лабораторній роботі №1.
Ми заповняли таблиці вручну, додаючи кожен запис в «Data->Insert Row».
Заповнена таблиця.
Переглянемо спроектовану загальну таблицю, яка є результатом об’єднання
пов’язаних між собою таблиць. Для цього переходимо в «SQL Workshop, Utilities»
потім в «Query Builder». Зліва оберемо обидві таблиці. Галочкою відмітимо
необхідні нам в запиті поля. Натиснемо кнопку «Run». Результат нашого запиту.
Тобто таблиці створені і заповнені.
Перевірити зв’язки між таблицями можна наступним чином:
Усі таблиці були створені поза табличним простором користувача lab_2. Тепер
перенесемо вже створені таблиці в табличний простір lab_2. Зробити це можна
використовуючи консоль в режимі SQL