Лекція 8. Проектування баз даних
Проектування баз даних проводиться, якщо використовується реляційна БД, при цьому стійкі класи об'єктної моделі відображаються у таблиці реляційної БД.
Основні поняття реляційної моделі:
База даних - довготривале самодокументоване сховище даних. Самодокументування = схема даних, яка зберігається в БД.
Система управління базами даних (СУБД) - ПЗ доступу до даних. Забезпечує:
Ø захист даних;
Ø ефективність;
Ø режим для багатьох користувачів;
Ø розділення даних між декількома застосуваннями;
Ø розподіленність даних;
Ø безпека.
Структура реляційних даних - сукупність таблиць. У будь-якій таблиці фіксована кількість стовпців і довільна - рядків. Сукупність значень комірок одного рядка - запис.
Оператор SQL - речення SQL для маніпуляції даними (вибирання, зміна, додавання, видалення).
Обмеження - умови, які є частиною схеми БД. Якщо який-небудь запис, який додається, порушує якесь обмеження, то він не буде доданий.
Види обмежень:
Можливий ключ (потенційний ключ) - поєднання стовпців, які унікально ідентифікують кожен запис у таблиці, таке що, всі стовпці необхідні для унікальної ідентифікації і ні в одному немає порожніх значень.
Основний (первинний) ключ - можливий ключ, якому потрібно віддавати перевагу при роботі з таблицею. Є у кожної таблиці.
Зовнішній ключ - посилання з іншої таблиці на можливий ключ.
Приклад:
persID | Name | SurName | addr | employer |
Вася | Пупкін | Лондон |
compID | compName | compAddr |
ОАО «Еліта - Центр» | Київ |
Первинні ключі: persID у 1-ій таблиці, compID - в 2-ій. Зовнішній ключ - стовпець employer 1-ої таблиці.
Набір правил, які застосовуються при відображенні об'єктної моделі у схему реляційної БД, такий:
Відображення класів
- Кожен клас переводиться в окрему таблицю, атрибути стають стовпцями таблиці. Операції на структуру таблиці не впливають.
- Унікальний ідентифікатор сутності перетворюється на первинний ключ таблиці. Якщо є декілька альтернативних унікальних ідентифікаторів, вибирається найбільш використовуваний. Якщо сутність не має власного ідентифікатора, то як первинний ключ додається стовпець ID - первинний ключ.
При відображенні класів із зв'язками намагаються заощадити і не створювати додаткові таблиці для зберігання зв'язків за рахунок об'єднання декількох таблиць в одну або додавання додаткових стовпців у таблиці, породжені класами, якщо семантика зв'язку дозволяє. Розглянемо відображення бінарних асоціацій:
Ø «1 до 1-го» - загальна таблиця для 2-х класів. Стовпці - сукупність атрибутів. Первинний ключ - будь-який ID.
Ø «1 до 0..1» - зовнішній ключ додається до таблиці необов'язкового класу.
Ø «0..1 до 0..1» - окрема таблиця для зв'язку (див. нижче).
Ø «* до *» - для асоціації створюється окрема таблиця. Її стовпці - зовнішні ключі для таблиць класів, зв'язаних асоціацією. Основний ключ - комбінація цих стовпців.
Ø «1 до 1..*» або «1 до 0..*» - до таблиці другого класу додається стовпець - зовнішній ключ для таблиці класу у полюса «один».
Ø «0..1 до 1..*» або «0..1 до 0..*» - як «* до *», оскільки стовпець зовнішнього ключа не може містити порожніх значень.
Приклад:
Відображення класів зв'язаних N-арною асоціацією:
Потрібна N+1 таблиця. Наприклад, у разі тернарного (N=3) зв'язку формуються чотири таблиці, по одній для кожного класу і одна для зв'язку. Таблиця зв'язку матиме серед своїх атрибутів ключі кожної із 3х інших таблиць.
Відображення класів-асоціацій:
Атрибути класу-асоціації додаються або у створювану для зв'язку таблицю, або (якщо додаткова таблиця не потрібна) в ту таблицю, куди додається зовнішній ключ.
Відображення одиночного спадкоємства:
Ø або по 1 таблиці для суперкласу і кожного підкласу, загальні атрибути - стовпці у таблиці суперкласу + додатковий стовпець - тип, який вказує для кожного запису таблиці суперкласу на таблицю підкласу; записи відносяться до одного об'єкта мають однакові ID (значення первинного ключа) в обох таблицях (набори записів для підкласів отримуються у результаті виконання запитів, які об'єднують таблицю підтипу і супертипу);
Ø або таблиці тільки для підкласів, загальні атрибути - у кожній таблиці (набір записів для суперкласу виходить об'єднанням);
Ø або одна велика таблиця, стовпці - сукупність всіх атрибутів + додатковий стовпець - тип (є частиною первинного ключа).
Який саме спосіб вибрати диктують міркування ефективності (швидкість в обмін на об'єм пам'яті).
Відображення множинного спадкоємства:
Ø класи, які не перекриваються (не ромб) - таблиця для суперкласів і по 1-ій таблиці для кожного підкласу;
Ø є перекриття - по 1-ій таблиці на кожен суперклас, на кожен підклас + окрема таблиця для узагальнення.
Література до лекції 8.
- Вендров А. М. Проектирование программного обеспечения экономических информационных систем. 2-е изд. – М.: Финансы и статистика, 2005. – Глава 4.
- Рамбо Дж., Блаха М. UML 2.0. Объектно-ориентированное моделирование и разработка. 2-е изд.: Пер. с англ. – СПб.: Питер, 2007. – Глава 19.