Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Fondovi-lekcii.doc
Скачиваний:
20
Добавлен:
10.11.2018
Размер:
4.09 Mб
Скачать

2. Створення генераторів.

Що таке генератор? Генератор – це іменований лічильник. Всередині бази даних ми можемо створити лічильник, дати йому унікальне ім’я в межах цієї бази і керувати значеннями цього лічильника. Це і буде генератор. Приклад:

CREATE GENERATOR g1; SET GENERATOR g1 TO 2445;

В цьому прикладі в першому рядку бази даних створюється генератор з іменем g1, а у другому – цьому генератору присвоюється значення 2445. Щоб одержати і змінювати значення генераторів, існує функція GEN_ID.

Ця функція приймає в ролі параметрів ім’я генератора і величину приросту, яку потрібно надати даному генератору, а повертає цілочисельне значення, що відповідає значенню генератора, одержаному в результаті додавання до нього приросту. Ось кілька прикладів виклику функції GEN_ID:

Current_value = GEN_ID (g1, 0)

Тут current_value – це змінна, g1 – генератор, і 0 – це приріст. В цьому прикладі в змінну current_value попаде значення генератора g1 після додавання до нього приросту 0 – тобто поточне значення генератора!

Для одержання наступного значення генератора слід викликати функцію GEN_ID з ненульовим приростом:

Current_value = GEN_ID (g1, 1)

Приріст може бути не рівним одиниці – він може бути довільним, в тому числі і плаваючим, і навіть від’ємним:

Current_value = GEN_ID (g1, -23)

В лиці генераторів ми маємо надійний механізм для формування унікальних первинних ключів. Як тепер вмістити одержуване від генератора значення в полі первинного ключа? Для цього є два способи – вставка первинного ключа на стороні клієнта і на стороні сервера.

У випадку формування первинного ключа на клієнті відбувається таке. Коли сформовано запис, який буде уставлено до бази даних, виконується виклик функції GEN_ID(generator, 1) і одержане значення підставляється в сформований запис. Відбувається вставка в таблицю, при цьому ми одержуємо гарантовано унікальний первинний ключ.

Другий спосіб – формування первинного ключа на стороні сервера – взагалі виключає вся турботу на стороні клієнта про те, яким буде значення первинного ключа. В цьому випадку при вставці запису спрацьовує тригер – спеціальний об’єкт БД, який може здійснювати діє при вставці/вилученні/зміні записів в таблицях. И в цьому тригері відбувається виклик функції GEN_ID, одержання потрібного значення генератора і вставка його в таблицю.

2.1. Індекси.

Індекс – це впорядкований вказівник на записи в таблиці.

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

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

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

Індекси використовуються в трьох основних випадках:

  1. Прискорення виконання запитів. Індекси створюються для полів, які використовуються в умовах пошуку SQL-запитів.

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

  3. Забезпечення цілісності посилань. Обмеження зовнішніх ключів Foreign key використовується для перевірки того, щоб значення, які вставляються до таблиці, обов’язково існували в іншій таблиці. При створенні зовнішнього ключа автоматично створюється індекс, який використовується як для прискорення запитів, що використовують з’єднання таблиць, так і для перевірки умов зовнішнього ключа.

Формат команди, що створює індекси має вид: CREATE [UNIQUE] [ASC[ENDING] | DESC[ENDING]]  INDEX index ON table (col [, col ...]);

Мінімальним виразом, що створює індекс, є:

CREATE INDEX my_index ON Table_example(ID)

В цьому прикладі створюється індекс з іменем my_index для таблиці Table_example, причому індексованим полем є поле ID. Індекс є зростаючим, тобто значення в ньому впорядковані за зростанням, а також не унікальним, тобто значить, що поле ID може мати декілька однакових значень. Це самий простий приклад індексу – самий поширений.

Як бачимо з опису синтаксису, індекс може містити не одне, а декілька полів.

У визначенні індексу є ще одна опція – UNIQUE. Якщо її вказати, то індекс дозволить заносити до таблиці лише унікальні значення. Фактично це служить основою для реалізації унікальних ключів (UNIQUЕ KEY).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]