- •Вступ до баз даних. Загальна характеристика основних понять
- •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
- •Бібліотека db-Library
- •Лекція 14
- •Напрями розвитку баз даних
- •14.1. Об'єктно-орієнтований підхід до організації баз даних
- •Об'єктно-орієнтоване програмування
- •Об'єктно-орієнтовані бази даних
- •Об'єктно-реляційні субд
- •14.2. Розподілені бази даних
- •14.3. Сховища даних
- •Основи криптології
9.4.3. Використання індексів (індексування)
Як уже наголошувалося, впорядкування записів дозволяє використовувати дихотомічний метод пошуку потрібного запису і тим самим істотно скоротити одну з основних складових часу пошуку – кількість звернень до ВП. Проте при цьому виникають проблеми з додаванням записів, пов'язані з необхідністю перезапису частини фізичних записів (зсуву).
Для того, щоб використовувати дихотомічний пошук і не переміщувати фізичні записи при додаванні нових записів, використовується так зване логічне впорядкування фізичних записів (індексування). Основна структура зберігання містить записи вихідної таблиці і представлена у вигляді неврегульованої послідовності фізичних записів (див. п. 5.4.1). Для можливої реалізації дихотомічного пошуку по певному ключу створюється додаткова структура зберігання (так званий індекс). Кількість записів в індексі дорівнює кількості записів вихідної таблиці (кількості фізичних записів в основній структурі зберігання). Кожен запис індексу має два поля: ключове поле запису основної структури і покажчик – адреса запису основної структури з відповідним значенням ключа.
Записи індексу (індексного файлу) впорядковані за значенням ключа. Адреси зв'язку цих записів визначають логічне впорядкування записів основної структури зберігання. Приклад відповідної структури зберігання наводиться (при припущенні k=1) на мал. 9.6.
Дану структуру зберігання називають ще інвертованим списком. Сенс цього терміну полягає в наступному. Можна було б упорядкувати записи основної структури зберігання, не переставляючи їх, а об'єднавши у відповідний впорядкований список. У нашому випадку адреси зв'язку як би віддаляються із списку і включаються до складу файлу-індексу (інвертуються). Тому отримана структура інтерпретується як інвертований список.
Мал. 9.6. Індексування
Пошук потрібного запису по заданому значенню ключа здійснюється в індексному файлі методом половинного ділення. Відмітимо, що оскільки записи індексу містять всього два поля, сумарний об'єм записів індексу невеликий, тому індекс, як правило, цілком прочитується для обробки в ОП за одне звернення до ВП. Після того, як в індексному файлі виявлений шуканий запис, за адресою зв'язку читається повний відповідний запис основної структури зберігання. Якщо необхідний пошук по іншому ключу, будується ще один індекс по відповідному ключу. Таким чином, по будь-якому ключу пошук можна здійснювати дихотомічним методом.
Оцінимо кількість звернень до ВП при реалізації елементарних операцій. Відповідні оцінки зроблені для випадку, коли фізичний запис складається з одного логічного запису (коефіцієнт блокування k рівний 1). Розрахунок оцінок для довільного k проводиться по аналогії з розрахунками пп. 9.4.1–9.4.2.
Пошук запису із заданим значенням ключа
Із ВП читається індексний файл (кількість звернень до ВП для цього залежить від об'єму індексного файлу, як правило, є невеликою і багато меншою кількості записів N). Після знаходження потрібного запису в індексному файлі читається відповідний запис основного файлу (одне звернення до ВП).
Читання запису
В ході операції пошуку шуканий запис зчитаний в ОП.
Коректування запису
Зчитаний запис коректується і заноситься на своє місце (ще одне звернення до ВП).
Видалення запису
Знайдений запис позначається як видалений в основному файлі, відповідний запис в індексному файлі видаляється, змінений індекс записується у ВП. Кількість звернень до ВП у цьому випадку в порівнянні з кількістю звернень до ВП при пошуку збільшується на два.
Додавання запису
Запис, що додається, заноситься в кінець основного файлу. Формується новий запис індексу, відповідний запису, що додається. Записи індексу переупорядковуються по значеннях ключа, і індекс заноситься у ВП. Кількість звернень до ВП в цьому випадку, в основному, визначається читанням-записуванням індексу.
Таким чином, використання індексів дозволяє ціною деякого збільшення об'єму використовуваної пам'яті (за рахунок індексу) істотно скоротити час реалізації основних операцій. У зв'язку з цим індексування використовується в багатьох сучасних СУБД.
9.4.4. В-дерево
Структура В-дерева (збалансоване дерево) є наслідком подальшого розширення концепції використання індексів (будується індекс над індексом) і є багаторівневими індексами.
В-дерево будується таким чином. Послідовність записів, відповідна записам вихідної таблиці, упорядковується по значеннях первинного ключа. Логічні записи об'єднуються в блоки (по k записів у блоках).
Значенням ключа блоку є мінімальне значення ключа у записах, що входять у блок. Послідовність блоків є останнім рівнем В-дерева. Будується індекс попереднього рівня. Записи цього рівня містять значення ключа блоку наступного рівня і покажчик-адресу зв'язку відповідного блоку; записи цього рівня також об'єднуються у блоки (по k записів). Потім аналогічно будується індекс більш високого рівня і так далі, поки кількість записів індексу на певному рівні буде не більший k.
Розглянемо процедуру роботи з B-деревом на прикладі. Нехай є файл екземплярів логічних записів, ключі яких набувають значень 2, 7, 8, 12, 15, 27, 28, 40, 43, 50. Для визначеності візьмемо k=2 (у блок об'єднуємо по 2 екземпляри записів). Побудоване для цього прикладу В-дерево зображене на мал. 9.7 (для спрощення малюнка на рівні 4 представлені лише ключі логічних записів і не представлені значення інших полів цих записів).
Мал. 9.7. В-дерево
У блоках вказано значення ключа відповідного блоку. Значення k прийнято рівним 2.
За побудовою В-дерева всі вихідні записи знаходяться на одній відстані від верхнього індексу (дерево є збалансованим).
Розглянемо реалізацію основних операцій.
