Лабораторна робота №1
Тема: Введення в СУБД MySQL. Основні поняття. Побудова концептуальної моделі.
Мета: ознайомитися з основними поняттями СУБД MySQL, вивчити переваги використовування СУБД при обробці структурованих даних. Набути практичних навичок побудови концептуальної моделі наочної області на основі її опису. Побудувати концептуальну модель відповідно до завдання.
Всяка професійна діяльність так чи інакше пов'язана з інформацією, з організацією її збору, зберігання, вибірки. Можна сказати, що невід'ємною частиною повсякденного життя сталі бази даних, для підтримки яких потрібен деякий організаційний метод, або механізм. Такий механізм називається системою управління базами даних (СУБД). Отже, введемо основні поняття.
База даних (БД) – набір логічно зв'язаних даних (і їх опис), що спільно використовується, призначений для задоволення інформаційних потреб організації.
СУБД (система управління базами даних) – програмне забезпечення, за допомогою якого користувачі можуть визначати, створювати і підтримувати базу даних, а також здійснювати до неї контрольований доступ.
Кожна таблиця БД представляється як сукупність рядків і стовпців, де рядки (записи) відповідають екземпляру об'єкту, конкретній події або явищу, а стовпці (поля) – атрибутам (ознакам, характеристикам, параметрам) об'єкту, події, явища.
В кожній таблиці БД необхідна наявність первинного ключа – так іменують поле або набір полів, однозначно ідентифікуючий кожний екземпляр об'єкту або запис. Значення первинного ключа в таблиці БД повинне бути унікальним, тобто в таблиці не допускається наявність двох і більш записів з однаковими значеннями первинного ключа. Він повинен бути мінімально достатнім, а значить, не містити полів, видалення яких відобразиться на його унікальності.
Зв'язки між об'єктами реального світу можуть знаходити своє віддзеркалення в структурі даних, а можуть і матися на увазі, тобто бути присутній на неформальному вигляді.
Між двома або більш таблицями бази даних можуть існувати відношеньи підлеглості, які визначають, що для кожного запису головної таблиці (званої ще батьківською) можлива наявність однієї або декількох записів в підлеглій таблиці (званої ще дочірньою).
Виділяють три різновиди зв'язку між таблицями бази даних:
"один–до–багатьох";
"один–до–одного";
"багато–доо–багатьох".
Відношення "один–до–багатьох"
Відношення "один–до–багатьох" має місце, коли одному запису батьківської таблиці може відповідати декілька записів дочірньої. Зв'язок "один–до–багатьох" іноді називають зв'язком "багато–до–одного". І в тому, і в іншому випадку сутність зв'язку між таблицями залишається незміною. Зв'язок "один–до–багатьох" є найпоширенішим для реляційних баз даних. Він дозволяє моделювати також ієрархічні структури даних.
Відношення "один–до–одного"
Відношення "один–до–одного" має місце, коли одному запису в батьківській таблиці відповідає один запис в дочірній. Це відношення зустрічається набагато рідше, ніж відношення "один–до–багатьох". Його використовують, якщо не хочуть, щоб таблиця БД "розпухала" від другорядної інформації, проте для читання зв'язаної інформації в декількох таблицях доводиться проводити ряд операцій читання замість однієї, коли дані зберігаються в одній таблиці.
Відношення "багато–до–багатьох"
Відношення "багато–до–багатьох" застосовується в наступних випадках:
одному запису в батьківській таблиці відповідає більше одного запису в дочірній;
одному запису в дочірній таблиці відповідає більше одного запису в батьківській.
Всякий зв'язок "багато–до–багатьох" в реляційній базі даних необхідно замінити на зв'язок "один–до–багатьох" (одну або більш) за допомогою введення додаткових таблиць.
Стандарт і реалізація язика SQL
Одним з язиків, що з'явилися в результаті розробки реляційної моделі даних, є язик SQL (Structured Query Language), який в даний час набув дуже широкого поширення і фактично перетворився на стандартний язик реляційних баз даних. Стандарт на язик SQL був випущений американським національним інститутом стандартів (ANSI) в 1986 р., а в 1987 р. Міжнародна організація стандартів (ISO) прийняла його як міжнародний. Нинішній стандарт SQL відомий під назвою SQL/92.
Всі конкретні реалізації язика дещо відрізняються одна від одної. На користь самих же виробників гарантувати, щоб їх реалізація відповідала сучасним стандартам ANSI в частині перенесення і зручності роботи користувачів. Проте кожна реалізація SQL містить удосконалення, що відповідають вимогам того або іншого серверу баз даних. Ці удосконалення або розширення язика SQL є додатковими командами і опціями, що є додатками до стандартного пакету і доступні в даній конкретній реалізації.
В даний час язик SQL підтримується багатьма десятками СУБД різних типів, розроблених для найрізноманітніших обчислювальних платформ, починаючи від персональних комп'ютерів і закінчуючи мейнфреймами.
Даний язик SQL орієнтований на операції з даними, представленими у вигляді логічно взаємозв'язаних сукупностей таблиць-відношень. Найважливіша особливість його структур – орієнтація на кінцевий результат обробки даних, а не на процедуру цієї обробки. Язик SQL сам визначає, де знаходяться дані, індекси і навіть які найефективніші послідовності операцій слід використовувати для отримання результату, а тому указувати ці деталі в запиті до бази даних не вимагається.
Типи команд SQL
Реалізація в SQL концепції операцій, орієнтованих на табличне представлення даних, дозволила створити компактний язик з невеликим набором команд. Язик SQL може використовуватися як для виконання запитів до даних, так і для побудови прикладних програм.
Основні категорії команд язика SQL призначені для виконання різних функцій, включаючи побудову об'єктів бази даних і маніпулювання ними, початкове завантаження даних в таблиці, оновлення і видалення існуючої інформації, виконання запитів до бази даних, управління доступом до неї і її загальне адміністрування.
Основні категорії команд язика SQL:
DDL – язик визначення даних;
DML – язик маніпулювання даними;
DQL – язик запитів ;
DCL – язик управління даними;
команди адміністрування даних;
команди управління транзакціями
Визначення структур бази даних (DDL)
Язик визначення даних (Data Definition Language, DDL) дозволяє створювати і змінювати структуру об'єктів бази даних, наприклад, створювати і видаляти таблиці. Основними командами язика DDL є наступні: CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, ALTER INDEX, DROP INDEX.
Маніпулювання даними (DML)
Язик маніпулювання даними (Data Manipulation Language, DML) використовується для маніпулювання інформацією усередині об'єктів реляційної бази даних за допомогою трьох основних команд: INSERT, UPDATE, DELETE.
Вибірка даних (DQL)
Язик запитів DQL найбільш відомий користувачам реляційної бази даних, не дивлячись на те, що він включає всього одну команду SELECT. Ця команда разом з своїми численними опціями і командами використовується для формування запитів до реляційної бази даних.
Язик управління даними (DCL - Data Control Language)
Команди управління даними дозволяють управляти доступом до інформації, що знаходиться всередині бази даних. Як правило, вони використовуються для створення об'єктів, пов'язаних з доступом до даних, а також служать для контролю над розподілом привілеїв між користувачами. Команди управління даними наступні: GRANT, REVOKE.
Команди адміністрування даних
За допомогою команд адміністрування даних користувач здійснює контроль за виконуваними діями і аналізує операції бази даних; вони також можуть виявитися корисними при аналізі продуктивності системи. Не слід плутати адміністрування даних з адмініструванням бази даних, яке є загальним управлінням базою даних і має на увазі використовування команд всіх рівнів.
Команди управління транзакціями
Існують наступні команди, що дозволяють управляти транзакціями бази даних: COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION.
Будь-який язик роботи з базами даних повинен надавати користувачу наступні можливості:
створювати бази даних і таблиці з повним описом їх структури;
виконувати основні операції маніпулювання даними, зокрема, вставку, модифікацію і видалення даних з таблиць ;
виконувати прості і складні запити, що здійснюють перетворення даних.
Крім того, язик роботи з базами даних повинен вирішувати всі вказані вище задачі при мінімальних зусиллях з боку користувача, а структура і синтаксис його команд – мають бути достатньо прості і доступні для вивчення. І нарешті, він повинен бути універсальним, тобто відповідати деякому визнаному стандарту, що дозволить використовувати один і той же синтаксис і структуру команд при переході від однієї СУБД до іншої. Язик SQL задовольняє практично всім цим вимогам.
Язик SQL є прикладом язика з орієнтацією, що трансформується, або ж язика, призначеного для роботи з таблицями з метою перетворення вхідних даних до необхідного вихідного вигляду. Він включає тільки команди визначення і маніпулювання даними і не містить яких-небудь команд управління ходом обчислень. Подібні задачі повинні розв'язуватися або за допомогою язиків програмування або управління завданнями, або інтерактивно, в результаті дій, виконуваних самим користувачем. Унаслідок подібної незавершеності в плані організації обчислювального процесу язик SQL може використовуватися двома способами. Перший передбачає інтерактивну роботу, що полягає у введенні користувачем з терміналу окремих SQL-операторів. Другий полягає в упровадженні SQL-операторів в програми на процедурних язиках. Язик SQL відносно простий у вивченні. Оскільки це не процедурний язик, в ньому необхідно указувати, яка інформація повинна бути одержана, а не як її можна одержати. Інакше кажучи, SQL не вимагає вказівки методів доступу до даних. Як і більшість сучасних язиків, він підтримує вільний формат запису операторів. Це означає, що при введенні окремі елементи операторів не пов'язані з фіксованими позиціями екрану. Язик SQL може використовуватися широким кругом фахівців, включаючи адміністраторів баз даних, прикладних програмістів і безліч інших кінцевих користувачів.
Язик SQL – перший і поки єдиний стандартний язик для роботи з базами даних, який набув достатньо широке поширення. Практично всі найбільші розробники СУБД в даний час створюють свої продукти з використанням язика SQL або з SQL-інтерфейсом. В нього зроблені величезні інвестиції як з боку розробників, так і з боку користувачів. Він став частиною архітектури додатків, є стратегічним вибором багатьох крупних і впливових організацій.
Язик SQL використовується в інших стандартах і навіть робить вплив на розробку інших стандартів як інструмент визначення (наприклад, стандарт Remote Data Access, RDA). Створення язика сприяло не тільки виробленню необхідних теоретичних основ, але і підготовці успішно реалізованих технічних рішень. Це особливо справедливо відносно оптимізації запитів, методів розподілу даних і реалізації засобів захисту. Почали з'являтися спеціалізовані реалізації язика, призначені для нових ринків: системи управління обробкою транзакцій (OnLine Transaction Processing, OLTP ) і системи оперативної аналітичної обробки або системи підтримки ухвалення рішень (OnLine Analytical Processing, OLAP ). Вже відомі плани подальших розширень стандарту, що включають підтримку розподіленої обробки, об'єктно-орієнтованого програмування, розширень користувачів і мультимедіа.
Для успішного вивчення язика SQL необхідно привести короткий опис структури SQL-операторів і нотації, які використовуються для визначення формату різних конструкцій язика. Оператор SQL складається із зарезервованих слів, а також із слів, визначуваних користувачем. Зарезервовані слова є постійною частиною язика SQL і мають фіксоване значення. Їх слід записувати в точності так, як це встановлено, не можна розбивати на частини для перенесення з одного рядка на інший. Слова, визначувані користувачем, задаються їм самим (відповідно до синтаксичних правил) і є ідентифікаторами або іменами різних об'єктів бази даних. Слова в операторі розміщуються також відповідно до встановлених синтаксичних правил.
Ідентифікатори язика SQL призначені для позначення об'єктів в базі даних і є іменами таблиць, уявлень, стовпців і інших об'єктів бази даних. Символи, які можуть використовуватися в створюваних користувачем ідентифікаторах язика SQL, повинні бути визначені як набір символів. Стандарт SQL задає набір символів, який використовується за умовчанням, – він включає рядкові і прописні букви латинського алфавіту ( A-Z, а-z ), цифри ( 0-9 ) і символ підкреслення ( _ ). На формат ідентифікатора накладаються наступні обмеження:
ідентифікатор може мати довжину до 128 символів;
ідентифікатор повинен починатися з букви;
ідентифікатор не може містити пропуски.
<ідентифікатор>::=<буква>
{<буква>|<цифра>}[,...n]
Більшість компонентів язика не чутлива до регістра. Оскільки у язика SQL вільний формат, окремі SQL-оператори і їх послідовності матимуть більш читаний вигляд при використовуванні відступів і вирівнювання.
Язик, в термінах якого дається опис язика SQL, називається метамовою. Синтаксичні визначення звичайно задають за допомогою спеціальної металінгвістичної символіки, званої Бекуса-Науера формулами (БНФ). Прописні букви використовуються для запису зарезервованих слів і повинні указуватися в операторах точно так, як це буде показано. Рядкові букви вживаються для запису слів, визначуваних користувачем. Вживані в нотації БНФ символи і їх позначення показані в таблиці.
Таблиця 1.1.
Символ Позначення
::= Рівно за визначенням
| Необхідність вибору одного з декількох приведених значень
<.> Описана за допомогою метамови структура язика
{.} Обов'язковий вибір деякої конструкції із списку
[.] необов'язковий вибір деякої конструкції із списку
[,.n] необов'язкова можливість повторення конструкції від нуля до декількох разів
В подальшому викладі як приклад використовуватиметься невелика база даних, що відображає процес поставки або продажу деякого товару постійним клієнтам.
Виходячи з аналізу наочної області, можна виділити два типи сутностей – ТОВАР і КЛІЄНТ, які зв'язані між собою відношенням "багато–до–багатьох", оскільки кожний покупець може купити багато найменувань товару, а кожний товар може бути куплений багатьма покупцями. Проте реляційна модель даних вимагає замінити відношення "багато–до-багатьох" на декілька відношень "один–до-багатьох". Додамо ще один тип сутностей, що відображає процес продажу товарів, – ОПЕРАЦІЯ.
Встановимо зв'язки між об'єктами. Один покупець може неодноразово купувати товари, тому між об'єктами КЛІЄНТ і ОПЕРАЦІЯ є зв'язок "один–до–багатьох". Кожне найменування товару може неодноразово брати участь в операціях, в результаті між об'єктами ТОВАР і ОПЕРАЦІЯ є зв'язок "один-до-багатьох".
Визначимо атрибути і пов'яжемо їх з сутностями і зв'язками. До об'єкту ТОВАР відносяться такі характеристики, як назва, тип, ціна, сорт. До об'єкту КЛІЄНТ – ім'я, по батькові, прізвище, фірма, місто, телефон. Тип сутності ОПЕРАЦІЯ може бути охарактеризований такими ознаками, як дата і кількість проданого товару.
Важливим етапом в створенні бази даних є визначення атрибутів, які однозначно визначають кожний екземпляр сутності, тобто виявлення первинних ключів.
Для таблиці ТОВАР назва не може служити первинним ключем, оскільки товари різних типів можуть мати однакові назви, тому введемо первинний ключ КодТовару, під яким можна розуміти, наприклад, артикул товару. Так само ні Ім'я, ні Фірма, ні Місто не можуть служити первинним ключем в таблиці КЛІЄНТ. Введемо первинний ключ КодКлієнта, під яким можна розуміти номер паспорта, ідентифікаційний номер платника податків або будь-який інший атрибут, однозначно визначаючий кожного клієнта. Для таблиці ОПЕРАЦІЯ первинним ключем є поле КодСделки, оскільки воно однозначне визначає дату, покупця і інші елементи даних. Як первинний ключ можна б було вибрати не одне поле, а деяку сукупність полів, але для ілюстрації конструкцій язика обмежимося простими первинними ключами.
Встановимо зв'язки між таблицями. Один покупець може неодноразово купувати товари. Тому між таблицями КЛІЄНТ і ОПЕРАЦІЯ є зв'язок "один–до–багатьох" по полю КодКлієнта.
Кожний покупець може придбати декілька різних товарів. Тому між таблицями ТОВАР і ОПЕРАЦІЯ є зв'язок "один–до–багатьох" по полю КодТовару.
Тепер потрібно створити зв'язки між таблицями бази даних. Для цього помістимо копії первинних ключів з батьківської таблиці (таблиці із сторони "один") в дочірню таблицю (таблицю із сторони "багато"). Для організації зв'язку між таблицями ТОВАР і ОПЕРАЦІЯ помістимо копію поля КодТовару з таблиці ТОВАР в таблицю ОПЕРАЦІЯ. Для організації зв'язку між таблицями КЛІЄНТ і ОПЕРАЦІЯ помістимо копію поля КодКлієнта з таблиці КЛІЄНТ в таблицю ОПЕРАЦІЯ. Для таблиці ОПЕРАЦІЯ поля КодКлієнта і КодТовара є зовнішніми (чужими) ключами. В результаті одержимо наступну структуру бази даних.

Мал. 1.1. Приклад структури бази даних.