У зв'язку з розширенням ринку інформаційних послуг виробники програмного забезпечення сталі випускати все більш інтелектуальні, а значить, і об'ємні програмні комплекси. Багато організацій і окремі користувачі часто не могли розмістити придбані продукти на власних ЕОМ. Для обміну інформацією і її розповсюдження були створені мережі ЕОМ, а узагальнюючі програми і дані сталі встановлювати на спеціальних файлових серверах.
Завдяки працюючим з файловими серверами СУБД, безліч користувачів одержують доступ до одних і тих же баз даних. Спрощується розробка різних автоматизованих систем управління організаціями. Проте при такому підході вся обробка запитів з програм або з терміналів призначених для користувача ЕОМ на них і виконується, тому для реалізації навіть простого запиту необхідно прочитувати з файлового серверу або записувати на нього цілі файли, а це веде до конфліктних ситуацій і перевантаження мережі. Для виключення вказаних недоліків була запропонована технологія клієнт-сервер, але при цьому знадобився єдиний язик спілкування з сервером – вибір ліг на SQL.
Технологія клієнт-сервер означає такий спосіб взаємодії програмних компонентів, при якій вони утворюють єдину систему. Як видно з самої назви, існує якийсь клієнтський процес, що вимагає певних ресурсів, а також серверний процес, який ці ресурси надає. Зовсім необов'язково, щоб вони знаходилися на одному комп'ютері. Звичайно прийнято розміщувати сервер на одному вузлі локальної мережі, а клієнтів – на інших вузлах.
Таблиця 1.1 – функції клієнтської та серверної частин
|
Клієнт |
Сервер |
|
- Керує інтерфейсом користувача; - Приймає і перевіряє синтаксис введеного користувачем запиту; - Виконує додаток; - Генерує запит до БД і передає його серверу; - Відображує користувачеві отримувані дані; |
- Приймає і опрацьовує запити до БД з боку клієнтів; - Перевіряє повноваження користувачів; - Гарантує дотримання вимог цілісності; - Виконує запити та оновлення і повертає результати клієнту; - Підтримує системний каталог; - Забезпечує паралельний доступ до БД; - Забезпечує керування відновленням. |
Архітектура клієнт-сервер володіє рядом переваг:
забезпечується більш широкий доступ до існуючих баз даних ;
підвищується загальна продуктивність системи: оскільки клієнти і сервер знаходяться на різних комп'ютерах, їх процесори здатні виконувати додатки паралельно. Настройка продуктивності комп'ютера з сервером спрощується, якщо на ньому виконується тільки робота з базою даних ;
знижується вартість апаратного забезпечення; достатньо могутній комп'ютер з великим пристроєм зберігання потрібен тільки серверу – для зберігання і управління базою даних ;
скорочуються комунікаційні витрати. Додатки виконують частину операцій на клієнтських комп'ютерах і посилають через мережу тільки запити до баз даних, що дозволяє значно скоротити об'єм даних, що пересилаються по мережі;
підвищується рівень несуперечності даних. Сервер може самостійно управляти перевіркою цілісності даних, оскільки лише на ньому визначаються і перевіряються всі обмеження. При цьому кожному додатку не доведеться виконувати власну перевірку;
архітектура клієнт-сервер природно відображається на архітектуру відкритих систем.
Подальше розширення дворівневої архітектури клієнт-сервер припускає розділення функціональної частини колишнього, "товстого" (інтелектуального) клієнта на дві частини. В трирівневій архітектурі клієнт-сервер "тонкий" (неінтелектуальний) клієнт на робочій станції управляє тільки призначеним для користувача інтерфейсом, тоді як середній рівень обробки даних управляє всією рештою логіки додатку. Третій рівень – сервер бази даних. Ця трирівнева архітектура виявилася більш відповідною для деяких середовищ – наприклад, для мереж Internet і intranet, де як клієнт може виступати звичайний Web-браузер.
Реалізація в SQL концепції операцій, орієнтованих на табличне представлення даних, дозволила створити компактний язик з невеликим набором пропозицій. Язик SQL може використовуватися як для виконання запитів до даних, так і для побудови прикладних програм.
Основні категорії команд язика SQL призначені для виконання різних функцій, включаючи побудову об'єктів бази даних і маніпулювання ними, початкове завантаження даних в таблиці, оновлення і видалення існуючої інформації, виконання запитів до бази даних, управління доступом до неї і її загальне адміністрування.
Основні категорії команд язика SQL:
DDL – язик визначення даних;
DML – язик маніпулювання даними;
DQL – язик запитів ;
DCL – язик управління даними;
команди адміністрування даних;
команди управління транзакціями
6.1 Визначення структур бази даних (DDL)
Язик визначення даних (Data Definition Language, DDL) дозволяє створювати і змінювати структуру об'єктів бази даних, наприклад, створювати і видаляти таблиці. Основними командами язика DDL є наступні: CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, ALTER INDEX, DROP INDEX.
6.2 Маніпулювання даними (DML)
Язик маніпулювання даними (Data Manipulation Language, DML) використовується для маніпулювання інформацією усередині об'єктів реляційної бази даних за допомогою трьох основних команд: INSERT, UPDATE, DELETE.
6.3 Вибірка даних (DQL)
Язик запитів DQL найбільш відомий користувачам реляційної бази даних, не дивлячись на те, що він включає всього одну команду SELECT. Ця команда разом з своїми численними опціями і пропозиціями використовується для формування запитів до реляційної бази даних.
6.4 Язик управління даними (DCL - Data Control Language)
Команди управління даними дозволяють управляти доступом до інформації, що знаходиться всередині бази даних. Як правило, вони використовуються для створення об'єктів, пов'язаних з доступом до даних, а також служать для контролю над розподілом привілеїв між користувачами. Команди управління даними наступні: GRANT, REVOKE.
6.5 Команди адміністрування даних
За допомогою команд адміністрування даних користувач здійснює контроль за виконуваними діями і аналізує операції бази даних ; вони також можуть виявитися корисними при аналізі продуктивності системи. Не слід плутати адміністрування даних з адмініструванням бази даних, яке є загальним управлінням базою даних і має на увазі використовування команд всіх рівнів.
6.6 Команди управління транзакціями
Існують наступні команди, що дозволяють управляти транзакціями бази даних: COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION.
7 Переваги язика SQL
Язик SQL є основою багатьох СУБД, оскільки відповідає за фізичну структуризацію і запис даних на диск, а також за читання даних з диска, дозволяє приймати SQL- запити від інших компонентів СУБД і призначених для користувача додатків. Таким чином, SQL – могутній інструмент, який забезпечує користувачам, програмам і обчислювальним системам доступ до інформації, що міститься в реляційних базах даних.
Основні переваги язика SQL полягають в наступному:
стандартність – як вже було сказано, використовування язика SQL в програмах стандартизовано міжнародними організаціями;
незалежність від конкретних СУБД – всі поширені СУБД використовують SQL, оскільки реляційну базу даних можна перенести з однією СУБД на іншу з мінімальними доробками;
можливість перенесення з однієї обчислювальної системи на іншу – СУБД може бути орієнтована на різні обчислювальні системи, проте додатки, створені за допомогою SQL, допускають використовування як для локальних БД, так і для крупних розрахованих на багато користувачів систем;
реляційна основа язика – SQL є язиком реляційних БД, тому він став популярним тоді, коли набула широке поширення реляційна модель представлення даних. Таблична структура реляційної БД добре зрозуміла, а тому язик SQL простий для вивчення;
можливість створення інтерактивних запитів – SQL забезпечує користувачам негайний доступ до даних, при цьому в інтерактивному режимі можна одержати результат запиту за дуже короткий час без написання складної програми;
можливість програмного доступу до БД – язик SQL легко використовувати в додатках, яким необхідно звертатися до баз даних. Одні і ті ж оператори SQL вживаються як для інтерактивного, так і програмного доступу, тому частини програм, що містять звернення до БД, можна спочатку перевірити в інтерактивному режимі, а потім вбудовувати в програму;
забезпечення різного представлення даних – за допомогою SQL можна представити таку структуру даних, що той або інший користувач бачитиме різні їх уявлення. Крім того, дані з різних частин БД можуть бути скомбіновані і представлені у вигляді однієї простої таблиці, а значить, уявлення придатні для посилення захисту БД і її настройки під конкретні вимоги окремих користувачів;
можливість динамічної зміни і розширення структури БД – язик SQL дозволяє маніпулювати структурою БД, тим самим забезпечуючи гнучкість з погляду пристосованості БД до вимог наочної області, що змінюються;
підтримка архітектури клієнт-сервер – SQL – один з кращих засобів для реалізації додатків на платформі клієнт-сервер. SQL служить зв'язуючою ланкою між взаємодіючою з користувачем клієнтською системою і серверною системою, управляючої БД, дозволяючи кожну з них зосередитися на виконанні своїх функцій.
Будь-який язик роботи з базами даних повинен надавати користувачу наступні можливості:
створювати бази даних і таблиці з повним описом їх структури;
виконувати основні операції маніпулювання даними, зокрема, вставку, модифікацію і видалення даних з таблиць ;
виконувати прості і складні запити, що здійснюють перетворення даних.
Крім того, язик роботи з базами даних повинен вирішувати всі вказані вище задачі при мінімальних зусиллях з боку користувача, а структура і синтаксис його команд – достатньо прості і доступні для вивчення. І нарешті, він повинен бути універсальним, тобто відповідати деякому визнаному стандарту, що дозволить використовувати один і той же синтаксис і структуру команд при переході від однієї СУБД до іншої. Язик 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.2. Символи формул Бекуса-Науера
|
Символ |
Позначення |
|
::= |
Рівно за визначенням |
|
| |
Необхідність вибору одного з декількох приведених значень |
|
<.> |
Описана за допомогою метамови структура язика |
|
{.} |
Обов'язковий вибір деякої конструкції із списку |
|
[.] |
необов'язковий вибір деякої конструкції із списку |
|
[,.n] |
необов'язкова можливість повторення конструкції від нуля до декількох разів |
Опис учбової бази даних
В подальшому викладі як приклад використовуватиметься невелика база даних, що відображає процес поставки або продажу деякого товару постійним клієнтам.
Виходячи з аналізу наочної області, можна виділити два типи єств – ТОВАР і КЛІЄНТ, які зв'язані між собою відношенням "многие–ко–багато чим", оскільки кожний покупець може купити багато найменувань товару, а кожний товар може бути куплений багатьма покупцями. Проте реляційна модель даних вимагає замінити відношення "многие–ко-багато чим" на декілька відносин "один–ко-багато чим". Додамо ще один тип єств, що відображає процес продажу товарів, – ОПЕРАЦІЯ.
Встановимо зв'язки між об'єктами. Один покупець може неодноразово купувати товари, тому між об'єктами КЛІЄНТ і ОПЕРАЦІЯ є зв'язок "один–ко–багато чим". Кожне найменування товару може неодноразово брати участь в операціях, в результаті між об'єктами ТОВАР і ОПЕРАЦІЯ є зв'язок "один-ко-багато чим".
Визначимо атрибути і пов'яжемо їх з єствами і зв'язками. До об'єкту ТОВАР відносяться такі характеристики, як назва, тип, ціна, сорт. До об'єкту КЛІЄНТ – ім'я, по батькові, прізвище, фірма, місто, телефон. Тип єства ОПЕРАЦІЯ може бути охарактеризований такими ознаками, як дата і кількість проданого товару.
Важливим етапом в створенні бази даних є визначення атрибутів, які однозначно визначають кожний екземпляр єства, тобто виявлення первинних ключів.
Для таблиці ТОВАР назва не може служити первинним ключем, оскільки товари різних типів можуть мати однакові назви, тому введемо первинний ключ КодТовара, під яким можна розуміти, наприклад, артикул товару. Так само ні Ім'я, ні Фірма, ні Місто не можуть служити первинним ключем в таблиці КЛІЄНТ. Введемо первинний ключ КодКлієнта, під яким можна розуміти номер паспорта, ідентифікаційний номер платника податків або будь-який інший атрибут, однозначно визначаючий кожного клієнта. Для таблиці ОПЕРАЦІЯ первинним ключем є поле КодСделки, оскільки воно однозначне визначає дату, покупця і інші елементи даних. Як первинний ключ можна б було вибрати не одне поле, а деяку сукупність полів, але для ілюстрації конструкцій язика обмежимося простими первинними ключами.
Встановимо зв'язки між таблицями. Один покупець може неодноразово купувати товари. Тому між таблицями КЛІЄНТ і ОПЕРАЦІЯ є зв'язок "один–ко–багато чим" по полю КодКлієнта.
Кожний покупець може придбати декілька різних товарів. Тому між таблицями ТОВАР і ОПЕРАЦІЯ є зв'язок "один–ко–багато чим" по полю КодТовара.
Тепер потрібно створити зв'язки між таблицями бази даних. Для цього помістимо копії первинних ключів з батьківської таблиці ( таблиці із сторони "один") в дочірню таблицю ( таблицю із сторони "багато"). Для організації зв'язку між таблицями ТОВАР і ОПЕРАЦІЯ помістимо копію поля КодТовара з таблиці ТОВАР в таблицю ОПЕРАЦІЯ. Для організації зв'язку між таблицями КЛІЄНТ і ОПЕРАЦІЯ помістимо копію поля КодКлієнта з таблиці КЛІЄНТ в таблицю ОПЕРАЦІЯ. Для таблиці ОПЕРАЦІЯ поля КодКлієнта і КодТовара є зовнішніми (чужими) ключами. В результаті одержимо наступну структуру бази даних.

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