- •Вступ до баз даних. Загальна характеристика основних понять
- •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. Сховища даних
- •Основи криптології
13.3. Динамічний sql
Динамічний SQL – різновид програмного SQL, призначений для вбудовування SQL-операторів в текст програми мовою програмування високого рівня, допускає динамічне формування і виконання запитів під час роботи програми.
Історія виникнення динамічного SQL багато в чому пов'язана з компанією IBM, що впровадила цей потужний інструмент у свою СУБД DB2. Стандарти SQL, зокрема SQL-1, не підтримували динамічних SQL. Лише у 1992 році в стандарт SQL-2 були включені специфікації динамічного SQL. Основною концепцією динамічного SQL є наступне твердження: вбудована інструкція SQL не записується у вихідний текст програми, замість цього програма формує текст інструкції під час виконання в одній зі своїх областей даних, а потім передає сформовану інструкцію у СУБД для динамічного виконання [5].
Нагадаємо, що при використанні статичного SQL: схема реалізації мала на увазі два етапи – компіляцію програми і виконання програми. При цьому на етап компіляції лягало основне навантаження. Саме тут вирішувалися питання перевірки, розбору і оптимізації запитів, оскільки запит був заздалегідь відомий. Абсолютно вочевидь, що подібну двохетапну схему не можна реалізувати для динамічного SQL, оскільки на етапі компіляції програми запит невідомий. Тому перевірку, розбирання і оптимізацію запитів тут доводиться виконувати безпосередньо під час роботи програми. Таким чином, якщо ці операції в статичному SQL виконувалися під час компіляції один раз, то в динамічному SQL вони виконуватимуться стільки раз для одного запиту, скільки разів він буде сформований в процесі роботи прикладної програми. Це визначає істотний недолік динамічного SQL – низьку продуктивність в порівнянні із статичним. Перевагою динамічної SQL в тому, що вона дозволяє формувати запит до бази даних під час роботи програми, реагуючи на ті або інші події, що сталися. Така можливість є життєво важливою для клієнт-серверної і триланкової архітектури, в якій структура бази даних і ділові правила мають тенденцію до зміни, що вимагає певної гнучкості при організації процесу обробки даних.
Враховуючи відносно низьку продуктивність динамічного SQL, представляється правильним, там, де тільки можливо, рекомендувати використання статичного різновиду SQL, застосовуючи апарат динамічної SQL, де це дійсно необхідно.
Динамічна SQL також повинна містити додаткових операторів (в порівнянні з інтерактивною SQL). Основні оператори динамічної SQL наводяться в наступній таблиці.
Таблиця 13.2. Основні команди динамічного SQL |
|
EXECUTE IMMEDIATE |
Негайне виконання інструкції
|
PREPARE |
Підготовка інструкції до виконання |
EXECUTE |
Виконання підготовленої раніше інструкції |
DESCRIBE
|
Спеціальна команда, що бере участь при поверненні результату виконання інструкцій динамічного SQL |
DECLARE CURSOR
|
Різновид інструкції DECLARE CURSOR, що застосовувалася раніше в рамках статичного SQL, що містить замість запиту його ім'я (пов'язане із запитом за допомогою інструкції PREPARE) |
OPEN FETCH CLOSE |
Різновиди інструкцій для роботи з курсором в динамічному SQL |
Розглянемо схему функціонування динамічного SQL (мал. 13.3). Схема передбачає одноетапне і двохетапне виконання інструкцій.
Одноетапне виконання інструкцій здійснюється командою EXECUTE IMMEDIATE.
Мал. 13.3. Схема виконання програми із вбудованими інструкціями динамічного SQL із застосуванням одноетапної схеми
Схема виконання інструкції має на увазі:
динамічне формування команди SQL в строковому вигляді під час роботи програми;
передачу строкового вигляду інструкції в СУБД за допомогою команди EXECUTE IMMEDIATE;
виконання інструкції системою управління БД, що включає синтаксичний аналіз, перевірку параметрів, оптимізацію (вибір плану) і виконання цього плану.
Основні проблеми одноетапної схеми полягають в тому, що вона не дозволяє виконувати інструкції SELECT (бо немає засобів для повернення в додаток результатів запиту) і призводить до нераціональних витрат обчислювальних ресурсів (оскільки при повторному виконанні тієї ж інструкції знову буде витрачено час на всі ті ж дії по її інтерпретації і виконанню).
Двохетапне виконання інструкцій засноване на наступному міркуванні: швидше за все, команда динамічного SQL у такому вигляді, як вона поступає на виконання, виконуватиметься неодноразово. При цьому можуть мінятися якісь конкретні деталі. А це означає, що інструкцію можна параметризувати. Використання інструкцій, що параметризуються, дозволяє зробити схему виконання двохетапною, розділивши процес на "підготовку інструкції" та "виконання інструкції" (мал. 13.4).
Мал. 13.4. Схема виконання програми зі вбудованими інструкціями динамічного SQL із застосуванням двохетапної схеми
На етапі підготовки можна здійснити синтаксичний аналіз інструкції, інтерпретувати її і підготуватися до виконання, вибравши план виконання.
На етапі виконання СУБД підставляє значення параметрів (отримані з програми) і використовує сформований раніше план виконання для досягнення результату.
При цьому реалізується ідея однократного виконання тих дій, які можна виконати один раз. Так, підготовлена один раз інструкція може бути виконана десятки разів з різними параметрами.
