Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Чичкань.docx
Скачиваний:
6
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆
      1. 11.2. Проблеми створення і ведення реляційних баз даних

При створенні бази даних і організації роботи з нею виникають три основні проблеми:

  • власне створення бази даних (створення таблиць, індексів, обмежень цілісності);

  • забезпечення безпеки і розмежування доступу;

  • організація доступу до елементів таблиці (вибірка, редагування, видалення, додавання).

Перша проблема може бути вирішена за допомогою створення в кожній конкретній СУБД деякої утиліти, що дозволяє користувачеві в певний момент здійснювати всі необхідні дії із створення бази даних. Проте це не повністю вирішує проблему. Така утиліта не дозволяє створити таблицю динамічно під час роботи прикладної програми, не дозволяє, наприклад, додати в таблицю сформований стовпець під час роботи призначеної для користувача програми. Необхідні засоби, що дають можливість формування під час роботи прикладної програми запити на зміну структури і вмісту бази даних. Те ж саме можна сказати і про вирішення другої проблеми.

Детальніше розглянемо можливий шлях вирішення третьої проблеми. Організація доступу до бази даних є найважливішою функцією інформаційної системи. Користувачі постійно працюють з даними. Розглянемо простий приклад. Нехай у нас є таблиця СТУДЕНТ, що зберігає інформацію наступного типу:

СТУДЕНТ (Код студента, Прізвище, Ім'я, По батькові, Дата вступу).

Тепер ми хочемо виконати деякий запит до бази даних, результатом якого повинні стати ті рядки таблиці СТУДЕНТ, для яких дата вступу виявиться більше 01.06.2006. Розглянемо послідовність дій для реалізації цього запиту.

  1. Отримуємо доступ до таблиці СТУДЕНТ і встановлюємо покажчик поточного рядка на перший рядок таблиці.

  2. Аналізуємо поле "Дата вступу" у поточному рядку.

  3. Якщо значення "Дата вступу" > "01.06.2006", роздруковуємо на екрані дані про абітурієнта.

  4. Якщо таблиця не закінчилася, переміщаємо покажчик поточного рядка на наступний рядок і переходимо до кроку 2, інакше закінчуємо роботу.

Будь-яка людина, знайома з програмуванням, легко уявить собі реалізацію подібного алгоритму будь-якою мовою програмування високого рівня. Ось, зокрема, приклад реалізації на Object Pascal:

Table.First;

while (not Table.Eof) do

begin

if FieldByName("Дата вступу").Value >

"01.06.2006"

then List.Add(FieldByName("Прізвище").AsString);

Table.Next;

end;

У цьому випадку розробник застосування сам організовує роботу по вибірці даних, програмуючи кожен рух по таблиці (здійснює навігацію по таблиці). Такий підхід до обробки даних, орієнтований на послідовну роботу з окремими записами, називається навігаційним. Тут конкретною мовою програмування ми описуємо процедуру – послідовність дій, необхідних для здобуття результату. Мови, в яких використовується такий підхід, називаються процедурними. Вочевидь, що із зростанням складності запиту істотно зростає складність процедури і, відповідно, об'єм тексту програми.

При роботі з інформаційною системою користувач реалізує свої запити до бази даних за допомогою розроблених програмістами прикладних програм. При навігаційному підході мають бути запрограмовані всі можливі запити. Вочевидь, що заздалегідь передбачити і запрограмувати всі запити, потреба в яких може виникнути неможливо. З урахуванням того, що переважна більшість користувачів не володіють навиками програмування, це означає, що об'єм їх дій буде обмежений межами написаних програм, а саме, тими запитами, реалізація яких передбачена заздалегідь.

Крім того, повинен враховуватися механізм взаємодії в межах архітектури "клієнт – сервер". Призначена для користувача програма виконується на комп'ютері – клієнт. Запит до бази даних реалізується комп'ютером – сервером. Необхідний механізм формування в призначеній для користувача програмі клієнта запиту до бази даних сервера. У цьому випадку навігаційний підхід неприйнятний. У зв'язку з цим, для роботи з базами даних розроблений і використовується інший підхід, заснований на використанні так званих мов запитів, які задають не послідовність необхідних дій, а умови, яким повинен задовольняти результат (при додаванні стовпця, вибірці запису, додаванні запису і т. п.). Такий підхід вирішує усі три вищеперелічені проблеми.

З цією метою розроблений і активно використовується у всіх базах даних – спеціальна мова запитів SQL. Особливо відзначимо, що основою мови є операції реляційної алгебри.

Мова SQL (Structured Query Language – структурована мова запитів) застосовується для спілкування користувача з реляційною базою даних і складається з трьох частин [23]:

  • DDL (Data Definition Language) – мова визначення даних. Призначена для створення бази даних (таблиць, індексів і т.д.) та редагування її схеми.

  • DCL (Data Control Language) – мова управління даними. Містить оператори для розмежування доступу користувачів до об'єктів бази даних.

  • DML (Data Manipulation Language) – мова обробки даних. Містить оператори для внесення змін до вмісту таблиць бази даних.

Як видно з написаного вище, SQL вирішує всі розглянуті раніше питання, надаючи користувачеві досить простий і зрозумілий механізм доступу до даних, не пов'язаний з конструюванням алгоритму і його описом мовою програмування високого рівня. Так, замість вказівки того, як необхідно діяти, користувач за допомогою операторів SQL пояснює СУБД, що йому потрібно зробити. Далі СУБД сама аналізує текст запиту і визначає, як саме його виконувати.

У архітектурі "клієнт – сервер" мова SQL займає дуже важливе місце. Саме вона використовується як мова спілкування клієнтського програмного забезпечення з серверною СУБД, розташованою на віддаленому комп'ютері. Так, клієнт посилає серверу запит мовою SQL, а сервер розбирає його, інтерпретує, вибирає план виконання, виконує запит і посилає клієнтові результат.

Поглянемо, як виглядає запит мовою SQL, що вирішує завдання про вибірку студентів по даті вступу.

SELECT Прізвище

FROM Студент

WHERE Дата вступу > "01.06.2006"

Може скластися помилкове враження, що поява мови SQL є альтернативою мов програмування високого рівня. Це не відповідає дійсності. Виконання запиту засобами SQL все одно зводиться до роботи з окремими записами, і від цього нікуди не дітися. Важливо розуміти, що поява мови SQL дала, принаймні, дві нові можливості.

  1. З'явився новий рівень абстракції між користувачем і СУБД. Цей рівень знаходиться ближче до користувача, чим рівень програмування мовою високого рівня, що знижує вимоги до кваліфікації користувачів.

  2. Багато типових завдань, що виникають при роботі з базами даних, і раніше вирішувалися кожним програмістом по-своєму (частенько дублюючи дії іншого програміста) вирішені реалізацією мови SQL. Таким чином, відпала необхідність самостійного вирішення багатьох проблем, вирішених у СУБД відповідним чином. Мова SQL надає засоби для доступу до цих типових можливостей СУБД.