- •Вступ до баз даних. Загальна характеристика основних понять
- •1.1. Розвиток основних понять представлення даних
- •Лекція 6
- •Друга стадія концептуального проектування бд. (Моделі даних субд. Представлення концептуальної моделі засобами моделі даних субд)
- •6.1. Представлення концептуальній моделі засобами моделі даних субд
- •6.2 Типові моделі даних субд і представлення концептуальної моделі
- •6.2.1. Мережева модель даних
- •6.2.2. Ієрархічна модель даних
- •6.2.3. Реляційна модель даних
- •6.2.4. Багатовимірна модель даних
- •6.3. Засоби автоматизованого проектування концептуальної моделі
- •Лекція 6
- •Друга стадія концептуального проектування бд. (Моделі даних субд. Представлення концептуальної моделі засобами моделі даних субд)
- •6.1. Представлення концептуальній моделі засобами моделі даних субд
- •6.2 Типові моделі даних субд і представлення концептуальної моделі
- •6.2.1. Мережева модель даних
- •6.2.2. Ієрархічна модель даних
- •6.2.3. Реляційна модель даних
- •6.2.4. Багатовимірна модель даних
- •6.3. Засоби автоматизованого проектування концептуальної моделі
- •Лекція 7
- •Формалізація реляційної моделі
- •7.1. Формалізований опис відношень і схеми відношень
- •7.2. Маніпулювання даними в реляційній моделі
- •7.3. Операції реляційної алгебри
- •Лекція 8
- •Використання формального апарату для оптимізації схем відношень
- •8.1. Проблема вибору раціональних схем відношень
- •8.2. Функціональні залежності (залежності між атрибутами відношення)
- •8.3. Декомпозиція схеми відношення
- •8.4 .Вибір раціонального набору схем відношень шляхом нормалізації
- •8.5. Приклад нормалізації до 3нф
- •8.6. Цілісна частина реляційної моделі. Реалізація умови цілісності даних в сучасних субд
- •Лекція 9
- •Фізичні моделі даних (внутрішній рівень)
- •9.1. Структура пам'яті еом
- •9.2. Представлення екземпляра логічного запису
- •9.3. Організація обміну між оперативною і зовнішньою пам'яттю
- •9.4. Структури зберігання даних у зовнішній пам'яті еом
- •9.4.1. Послідовне розміщення фізичних записів
- •Пошук запису із заданим значенням ключа
- •9.4.2. Розміщення фізичних записів у вигляді спискової структури
- •Пошук запису із заданим значенням ключа
- •9.4.3. Використання індексів (індексування)
- •Пошук і читання запису із заданим значенням ключа
- •Модифікація (коректування) запису
- •Видалення запису
- •Додавання запису
- •9.4.5. Розміщення записів з використанням хешування
- •Пошук запису із заданим значенням ключа і читання
- •Модифікації запису
- •Видалення запису
- •Додавання запису
- •9.4.6. Комбіновані структури зберігання
- •Лекція 10
- •Структура сучасної субд на прикладі Microsoft sql Server 2008
- •10.1 Загальна структура субд
- •10.2. Архітектура бази даних. Логічний рівень
- •Тип даних hierarchyid
- •Просторові типи даних
- •Індекси
- •Представлення
- •Складки
- •Обмеження
- •Правила
- •Значення за замовчуванням
- •10.3. Архітектура бази даних. Фізичний рівень
- •Файли і файлові групи
- •Сторінки і екстенти
- •Сторінки файлів даних
- •Організація таблиць та індексів
- •Управління роботою з екстентами і вільним місцем
- •Відстежування вільного місця
- •Лекція 11
- •Програмне забезпечення роботи з сучасними базами даних
- •11.1. Основні завдання програмного забезпечення баз даних
- •11.2. Проблеми створення і ведення реляційних баз даних
- •11.3. Поняття мови sql і його основні частини
- •11.3.1. Історія виникнення і стандарти мови sql
- •11.3.2. Переваги мови sql
- •11.3.2. Загальна характеристика sql
- •Термінологія
- •Різновиди sql
- •Лекція 12
- •Основні оператори мови sql. Інтерактивний sql
- •12.1. Загальне уявлення про основні оператори мови sql
- •12.2 Інтерактивний режим роботи з sql (інтерактивна sql)
- •12.3. Використання мови sql для вибору інформації з таблиці
- •12.4. Використання sql для вибору інформації з декількох таблиць
- •12.5. Використання sql для вставки, редагування і видалення даних у таблицях
- •Лекція 13
- •Використання мови sql у прикладних програмах
- •13.1. Програмний (вбудований) sql
- •13.2. Статичний sql
- •13.3. Динамічний sql
- •13.4. Інтерфейси програмування додатків (api). Db‑Library, odbc, oci, jdbc
- •Протокол odbc
- •Протокол jdbc
- •Лекція 14
- •Напрями розвитку баз даних
- •Бібліотека db-Library
- •14.1. Об'єктно-орієнтований підхід до організації баз даних
- •Об'єктно-орієнтоване програмування
- •Об'єктно-орієнтовані бази даних
- •Об'єктно-реляційні субд
- •14.2. Розподілені бази даних
- •14.3. Сховища даних
- •Основи криптології
11.2. Проблеми створення і ведення реляційних баз даних
При створенні бази даних і організації роботи з нею виникають три основні проблеми:
власне створення бази даних (створення таблиць, індексів, обмежень цілісності);
забезпечення безпеки і розмежування доступу;
організація доступу до елементів таблиці (вибірка, редагування, видалення, додавання).
Перша проблема може бути вирішена за допомогою створення в кожній конкретній СУБД деякої утиліти, що дозволяє користувачеві в певний момент здійснювати всі необхідні дії із створення бази даних. Проте це не повністю вирішує проблему. Така утиліта не дозволяє створити таблицю динамічно під час роботи прикладної програми, не дозволяє, наприклад, додати в таблицю сформований стовпець під час роботи призначеної для користувача програми. Необхідні засоби, що дають можливість формування під час роботи прикладної програми запити на зміну структури і вмісту бази даних. Те ж саме можна сказати і про вирішення другої проблеми.
Детальніше розглянемо можливий шлях вирішення третьої проблеми. Організація доступу до бази даних є найважливішою функцією інформаційної системи. Користувачі постійно працюють з даними. Розглянемо простий приклад. Нехай у нас є таблиця СТУДЕНТ, що зберігає інформацію наступного типу:
СТУДЕНТ (Код студента, Прізвище, Ім'я, По батькові, Дата вступу).
Тепер ми хочемо виконати деякий запит до бази даних, результатом якого повинні стати ті рядки таблиці СТУДЕНТ, для яких дата вступу виявиться більше 01.06.2006. Розглянемо послідовність дій для реалізації цього запиту.
Отримуємо доступ до таблиці СТУДЕНТ і встановлюємо покажчик поточного рядка на перший рядок таблиці.
Аналізуємо поле "Дата вступу" у поточному рядку.
Якщо значення "Дата вступу" > "01.06.2006", роздруковуємо на екрані дані про абітурієнта.
Якщо таблиця не закінчилася, переміщаємо покажчик поточного рядка на наступний рядок і переходимо до кроку 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 дала, принаймні, дві нові можливості.
З'явився новий рівень абстракції між користувачем і СУБД. Цей рівень знаходиться ближче до користувача, чим рівень програмування мовою високого рівня, що знижує вимоги до кваліфікації користувачів.
Багато типових завдань, що виникають при роботі з базами даних, і раніше вирішувалися кожним програмістом по-своєму (частенько дублюючи дії іншого програміста) вирішені реалізацією мови SQL. Таким чином, відпала необхідність самостійного вирішення багатьох проблем, вирішених у СУБД відповідним чином. Мова SQL надає засоби для доступу до цих типових можливостей СУБД.
