При роботі з реляційними базами даних рекомендується для кожної таблиці створювати первинний ключ – поле, значення якого є унікальним для кожного запису (можливий також випадок, коли первинний ключ складається з декількох полів таблиці, тоді унікальним повинен бути набір значень цих полів). В такому випадку виникає проблема, яким чином генерувати значення для первинного ключа, які б не повторювалися.
У деяких системах управління базами даних (СУБД) є спеціальні типи, які призначені для рішення даної проблеми. Вони зручні тим, що значення для них автоматично заповнюються системою управління БД при вставці нових записів в таблицю. Зазвичай це – цілі числа, значення яких збільшуються автоматично (наприклад, в MS Access такий тип називається типом “лічильник”, в СУБД Paradox – тип “autoincremental”). У СУБД InterBase такого спеціального типу даних немає, замість цього пропонується особливий механізм використання генераторів.
Генератор в Interbase – це сукупність цілочисельної змінної, яка зберігається в базі даних, і механізму її автоматичного збільшення і використання значень цієї змінної для заповнення полів у таблицях БД.
Основне призначення генераторів – формувати неповторювані цілочисельні значення, які можна використовувати в якості значень для первинного ключа. Для створення генератора в SQL існує команда:
CREATE GENERATOR <ім’я_генератора>
Крім того, після створення генератора виникає необхідність встановити для нього деяке початкове значення (якщо цього не зробити, то початковим значенням буде 0). Це можна зробити скориставшись командою:
SET GENERATOR <ім’я_генератора> TO <початкове_значення>
Приклад: для деякої таблиці Cars, яка містить інформацію про автомобілі створити генератор car_id і встановити для нього початкове значення. Для цього запишемо наступні два SQL оператори.
CREATE GENERATOR car_id;
SET GENERATOR car_id TO 10;
Після того, як ми створили генератора і встановили для нього початкового значення, в SQL операторах можна викликати функцію:
GEN_ID (<ім’я_генератора>, <крок>)
Дана функція зазвичай використовується в тригерах або збережених процедурах, також її можна викликати в командах додавання записів в таблицю ( SQL команда INSERT).
Приклад: До таблиці Cars додамо новий рядок, в якому поле Kod заповнюється значенням з генератора car_id.
INSERT INTO Cars (Kod, Model, Color, Year, Price, Displacement, Mileage) VALUES (GEN_ID( car_id , 1) , ‘ BMW318’ , ‘Зелений’ , ‘2000’ , ‘15000 ‘ ,’ 1.8I’, ’50 т.км’);
При виконанні даної команди сервер СУБД збільшить поточний значення генератора car_id на 1 і отримане значення помістить у відповідне поле таблиці.
Наприклад, якщо ще раз викликати INSERT в такому варіанті, значення генератора буде ще раз збільшено. Таким чином, поле первинного ключа буде заповнюватися гарантовано унікальними значеннями.
Видалення існуючого генератора здійснюється наступною командою:
DROP GENERATOR <ім’я_генератора>