Що таке DDL
DDL - це підмножина SQL, що означає Data Definition Language. Cлужить для визначення та модифікації об'єктів баз, наприклад, створення, зміни або вилучення таблиць, індексів, представлень, процедур і т.п.
В Database Tour термін DDL застосовується до коду SQL, який потрібен для створення вибраного об'єкта бази даних та (опціонально) його дочірніх об'єктів, з (опціонально) відповідними дозволами користувачів.
Приклад коду DDL для створення таблиці в базі даних PostgreSQL:
-- Create table
CREATE TABLE detail.contracts (
id serial not null,
source_type_id smallint not null,
state_id smallint not null,
type_id smallint not null,
client_id integer not null,
contract_date date not null,
contract_number varchar(25),
close_date date,
ts timestamp without time zone default now()
);
-- Add object comments
COMMENT ON table detail.contracts is 'Contracts';
-- Create primary key
ALTER TABLE detail.contracts
ADD CONSTRAINT contracts_pkey
PRIMARY KEY (id);
-- Create foreign keys
ALTER TABLE detail.contracts
ADD CONSTRAINT fk_contracts_client
FOREIGN KEY (client_id) REFERENCES detail.client (id) ON DELETE no action ON UPDATE no action NOT DEFERRABLE;
ALTER TABLE detail.contracts
ADD CONSTRAINT fk_contracts_contract_state
FOREIGN KEY (state_id) REFERENCES detail.dic_contract_state (id) ON DELETE no action ON UPDATE no action NOT DEFERRABLE;
-- Create indices
CREATE INDEX contracts_contract_nubmer_idx
ON detail.contracts (contract_number);
CREATE INDEX contracts_ts_idx
ON detail.contracts (ts);
-- Grant object privileges
GRANT SELECT ON detail.contracts TO reports_role;
GRANT SELECT ON detail.contracts TO john_gabriel;
Інтерфейс роботи з DDL
В Database Tour є кілька місць, де можна подивитися DDL об'єктів бази даних. Впевніться, що Навігатор об'єктів видимий.
Витягування DDL для існуючого об'єкта
Щоб подивитися DDL існуючого об'єкта, виберіть об'єкт в Навігаторі об'єктів і перейдіть на закладку Скрипт.
Інший спосіб: клікніть виділений об'єкт правою кнопкою миші та виберіть Згенерувати SQL | DDL | Створення скрипта DDL.... Тут ви зможете вказати, які елементи DDL витягувати. Інтерфейс подібний до діалогу, показаному нижче.
Генерування DDL для нового об'єкта
Щоб згенерувати DDL для нового об'єкта на основі існуючого, виберіть існуючий об'єкт в Навігаторі об'єктів та клікніть кнопку Дублювати над списком об'єктів. В діалозі Дублювання об'єкта виберіть опцію Згенерувати SQL та перевірте інші опції нижче, потім клікніть OK. Див. детальніше тут.
Генерування DDL для багатьох об'єктів
Щоб отримати DDL для багатьох об'єктів, виберіть потрібні об'єкти в Навігаторі об'єктів, клікніть виділені об'єкти правою кнопкою миші та виберіть Згенерувати SQL | DDL | Створення скрипта DDL... or Згенерувати SQL | DDL | Збереження DDL до файлу(ів).... В обох випадках буде показано новий діалог, де ви можете обрати опції DDL і внести деякі зміни в список об'єктів. Ці дві задачі відрізняються наступним:
- Створення скрипта DDL. Буде створено нове вікно SQL з новим скриптом DDL для всіх вибраних об'єктів.
- Збереження DDL до файлу(ів). Тут можна вказати, чи зберігати код всіх об'єктів до одного цільового файлу чи розкидати код по багатьох файлах (один файл на об'єкт бази даних). В останньому випадку ви використовуєте просту формулу, яка будує шлях до файлу на основі імені об'єкту.
Тут ви можете зберегти опції DDL разом зі списком об'єктів до файлу налаштувань DDL. Ці налаштування можна потім завантажити або клікнувши кнопку Завантажити в цьому діалозі, або вибравши меню Інструменти | Згенерувати DDL | Завантажити налаштування з файлу....
Опції генерування DDL
Додати команду DROP | Вкажіть цю опцію, щоб додати команду SQL для вилучення об'єкта. Ця команда додається перед головним кодом DDL кожного об'єкта у списку. |
CASCADE | Вкажіть цю опцію, щоб розширити команду DROP додаванням CASCADE до неї. Команда DROP ... CASCADE вилучає сам об'єкт та всі об'єкти, що від нього залежать. Не всі бази даних підтримують каскадне вилучення. |
Закоментувати цю команду | Вкажіть цю опцію, щоб закоментувати команду DROP. Закоментовані команди SQL не будуть виконані при запуску згенерованого скрипта. Але якщо ви збагнете, що вам необхідно вилучити існуючі об'єкти перед застосуванням коду DDL, ви зможете легко відновити ці команди їх розкоментовуванням в цій програмі або будь-якому текстовому редакторі. |
Додати IF (NOT) EXISTS | Вкажіть цю опцію, щоб додати умову IF NOT EXISTS до всіх команд CREATE у скрипті та умову IF EXISTS до всіх команд DROP у скрипті (для баз даних, що це підтримують). Деякі бази даних (наприклад, PostgreSQL) дозволяють створювати або вилучати об'єкти бази даних в залежності від їх існування для уникнення помилок в разі існування або неіснування об'єкта: DROP <object_type> IF EXISTS <object_name> або CREATE <object_type> IF NOT EXISTS <object_name> Майте на увазі, що не всі бази даних підтримують ці умови для всіх типів об'єктів. |
Включити партиції | Має сенс лише для партиціонованих таблиць PostgreSQL. Вкажіть, чи включати табличні партиції (якщо є) до коду DDL партиціонованої таблиці. В базах даних PostgreSQL (версії 10 та вище), табличні партиції функціонують подібно до окремих таблиць, тому код DDL партицій може бути включений або як частина коду DDL батьківської таблиці (якщо дану опцію ввімкнено), або як код DDL окремих таблиць (якщо табличні партиції присутні у списку об'єктів для скрипта). Увага: Не включайте партиціоновані таблиці із ввімкненою опцією та партиції як окремі таблиці до одного скрипта одночасно, оскільки це призведе до дублювання коду партицій. |
Включити привілеї | Вкажіть, чи включати привілеї доступу до об'єкта до згенерованого скрипта. Не всі бази даних підтримують привілеї доступу. |
Включити коментарі | Вкажіть, чи включати DDL коментарів до об'єкта до згенерованого скрипта. Не всі бази даних підтримують коментарі для об'єктів бази даних або підтримують їх не для всіх типів об'єктів. |
Включити індекси | Лише для таблиць. Вкажіть, чи включати DDL табличних індексів до згенерованого скрипта. |
Включити первинний ключ | Лише для таблиць. Вкажіть, чи включати первинний ключ таблиці до згенерованого скрипта. |
Включити зовнішні ключі | Лише для таблиць. Вкажіть, чи включати зовнішні ключі таблиці до згенерованого скрипта. |
Розташувати наприкінці скрипта | Вкажіть, чи слід згрупувати всі зовнішні ключі таблиць наприкінці скрипта для уникнення кофнліктів, коли певна таблиця залежить від іншої таблиці, що створюється пізніше по скрипту. При відключеній опції обмеження розміщуюються всередині DDL відповідної таблиці або йдуть відразу за цим DDL. |
Включити обмеження | Лише для таблиць. Вкажіть, чи включати табличні обмеження (constraints), крім первинних та зовнішніх ключів, до згенерованого скрипта. |
Див. також: