Що таке 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 разом зі списком об'єктів до файлу налаштувань 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), крім первинних та зовнішніх ключів, до згенерованого скрипта.
Повнота та точність згенерованого коду DDL залежить від використовуваних движка бази даних та типу бази даних. Ця функціональність найбільш повно впроваджена для баз даних Oracle, PostgreSQL, Interbase, Firebird, і частково MySQL та SQL Server. Для інших типів баз даних імплементовано лише DDL таблиць.

Див. також:

 Об'єкти бази даних