Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГІС та БД.docx
Скачиваний:
8
Добавлен:
06.09.2019
Размер:
369.13 Кб
Скачать
  1. Використання підпорядкованих запитів в мові sql.

Пiдпорядкований запит — це додатковий метод манiпулювання декiлькома таблицями. Це оператор SELECT, вкладений:

◦ в WHERE-умову, HAVING-умову iншого оператора SELECT;

◦ в оператори INSERT, UPDATE, DELETE;

◦ в iнший пiдпорядкований запит.

Саме можливiсть вкладеностi операторiв SQL один в одний є причиною, за якою SQL був початково названий мовою структурованих запитiв.

Iнодi буває потрiбно порiвняти значення в певних стовпцях однiєї таблицi зi списком значень в iншiй таблицi. В таких випадках використовується ключове слово IN та пiдпорядкований запит. Нехай, наприклад, ми бажаємо дізнатися якi товари брали участь в поставках. Найпростiше це зробити, вибравши з таблицi Товари тi записи, для яких значення поля ID зустрiчається серед значень поля КодТовару таблицi Поставки, що реалiзує наступний запит:

SELECT *

FROM Товари

WHERE ID IN (SELECT КодТовару FROM Поставки)

Тут (SELECT КодТовару FROM Поставки) є пiдпорядкованим запитом, який, очевидно, повертає набiр значень з поля КодТовару. Вираз вигляду

WHERE Значення IN НабiрЗначень

служить умовою вiдбору записiв з таблицi (в даному випадку вiдбираються записи з таблицi Товари). В якостi набору значень може виступати як пiдпорядкований запит, який повертає таблицю з однiєї колонки, так i явно заданий список значень, наприклад:

SELECT *

FROM Товари

WHERE ID IN (1, 2, 3)

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

SELECT КодТовару, COUNT(*)

FROM Поставки

GROUP BY КодТовару

Вдосконалимо цей запит, а саме: накладемо HAVING-умову, яка вiдбере лише тi групи, в яких потрапило >1 записiв.

SELECT КодТовару

FROM Поставки

GROUP BY КодТовару

HAVING COUNT(*)>1

Нарештi, останнiй крок — включити цей запит в якостi пiдпорядкованого

SELECT *

FROM Товари

WHERE ID IN (SELECT КодТовару

FROM Поставки

GROUP BY КодТовару

HAVING COUNT(*)>1)

Пiдпорядкованi запити зручнi для порiвняння деяких значень iз значеннями, отриманими в результатi виконання iншого запиту.

  1. Організація внутрішнього рівня субд (сторінкова організація файлів, індекси, хешування, кластеризація).

СУБД – прикладна програма, яка потребує обслуговування, необхідними сервісом є обробка фізичних файлів. При записі і зчитуванні даних з диску комп’ютер оперує не просто потоком байтів, а дані зчитуються і записуються сегментами фіксованого розміру, які називаються сторінками. Таким чином одиницею вводу і зчитування є сторінка. У кожної сторінки, що зберігається на диску, є PageID, яка показує де саме вона зберігається. Це дозволяє записувати оновлені сторінки на те саме місце звідки вона була зчитана. Файл – це набір сторінок. Щоб створити файл необхідно декілька сторінок. При створенні файлу файлова система повинна запросити у програми управління дисковою пам’ятью необхідну кількість сторінок, даному набору присвоюється PageSetId, кожній сторінці даного набору дається певний логічний ID.

СУБД взаємодіє з файловою системою. Логічні елементи даних, відношення, об’єкти, набори записів і т.п. СУБД перетворює в запити даних з деяких файлів системи-хоста. В свою чергу, файлова система відображає їх в запити сторінок з деякого набору. Коли файлова система передає СУБД вказану сторінку, СУБД перетворює отримані дані в необхідну користувачеві логічну форму. Ця логічна форма – самий нижчий рівень представлення, доступний користувачеві бази даних.

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

Хешування дозволяє безпосередньо визначати адрес сторінки, що містить заданий запис, без властивих індексам незручностей. Щоб визначити, де зберігається деякий елемент, використовуються зв’язані з ним значення даних. Як правило, для хешування використовується значення потенційного ключа. Хешування – перетворення ввідного масиву даних довільної довжини в вихідну бітову стрічку фіксованої довжини. Такі перетворення також називаються хеш-функціями або функціями звернення, а їх результати називають мешем.

Кластеризація бази даних – це такий метод збереження даних, коли їх фізична організація відображає деякий логічний порядок. Кластер – обєднання декількох однорідних елементів, які можуть розглядатися як самостійна одиниц, які притаманні деякі властивості.

Існує дві форми кластеризації:

Внутрішньофайлова – створення кластерів всередині деякого логічного файлу.

Міжфайлова – коли на одній фізичній сторінці зберігається записи із декількох логічних файлів бази даних.