Открыть сервис

Язык определения данных

Язык определения данных (DDL, Data Definition Language) — это подмножество языка структурированных запросов (SQL), предназначенное для создания, изменения и удаления объектов базы данных (БД), таких как таблицы, индексы, представления, схемы и триггеры. DDL определяет структуру данных и правила их хранения, но не управляет самими данными. В отличие от языка манипулирования данными (DML), команды DDL, как правило, автоматически фиксируют транзакцию (commit) и не могут быть отменены в рамках стандартной транзакции.

История

Концепция языка определения данных возникла в 1970-х годах в рамках реляционной модели данных, предложенной Эдгаром Коддом. Первые реализации были частью экспериментальных систем управления базами данных (СУБД), таких как System R (IBM) и Ingres (Калифорнийский университет в Беркли). В 1986 году Американский национальный институт стандартов (ANSI) принял первый стандарт SQL, который включал в себя основные команды DDL (CREATE, ALTER, DROP). Последующие версии стандарта (SQL:1992, SQL:1999, SQL:2003, SQL:2016) расширяли возможности DDL, добавляя поддержку триггеров, объектно-реляционных расширений, секционирования таблиц и JSON-типов.

Основные команды

DDL включает в себя три ключевые команды, которые реализованы практически во всех реляционных СУБД (PostgreSQL, MySQL, Oracle Database, Microsoft SQL Server, SQLite):

  • CREATE — создание нового объекта (таблицы, индекса, представления, схемы, базы данных). Для таблицы указываются имя, список столбцов с их типами данных и ограничениями целостности (PRIMARY KEY, FOREIGN KEY, NOT NULL, UNIQUE, CHECK).
  • ALTER — изменение существующего объекта. Позволяет добавлять, удалять или переименовывать столбцы, изменять их типы данных, добавлять или удалять ограничения, переименовывать объекты, а также изменять параметры хранения.
  • DROP — полное удаление объекта из базы данных. Безвозвратно удаляет как структуру, так и все связанные данные (для таблиц). Для индексов и представлений удаляется только определение.

Некоторые СУБД также включают в DDL команду TRUNCATE, которая быстро удаляет все строки из таблицы, но сохраняет её структуру. В отличие от DROP, TRUNCATE не удаляет саму таблицу, а в отличие от DELETE (команда DML), не генерирует построгую запись в журнале транзакций и не может быть выполнен с условием WHERE.

Типы объектов

DDL оперирует несколькими категориями объектов базы данных:

Таблицы

Основная единица хранения данных. Определение таблицы включает имя, список столбцов с типами данных (INTEGER, VARCHAR, DATE, BOOLEAN, JSON и др.) и ограничения целостности. Пример создания таблицы «Пользователи»: ``sql CREATE TABLE Users ( UserID INT PRIMARY KEY, Name VARCHAR(100) NOT NULL, Email VARCHAR(255) UNIQUE, CreatedAt DATE DEFAULT CURRENT_DATE ); ``

Индексы

Структуры, ускоряющие поиск и сортировку данных в таблицах. DDL позволяет создавать индексы по одному или нескольким столбцам, а также уникальные, кластеризованные, полнотекстовые и пространственные индексы. Пример: ``sql CREATE INDEX idx_users_name ON Users (Name); ``

Представления (View)

Виртуальные таблицы, основанные на SQL-запросе. Они не хранят данные самостоятельно, а предоставляют удобный интерфейс для доступа к подмножеству данных или результатам сложных соединений. Материализованные представления (Materialized View) физически хранят результат запроса и обновляются по расписанию или вручную.

Схемы (Schema)

Логические контейнеры для группировки объектов базы данных (таблиц, представлений, функций). Схемы используются для организации пространства имён и управления правами доступа. В некоторых СУБД (например, PostgreSQL) схема является частью пути поиска объекта.

Триггеры (Trigger)

Процедуры, автоматически выполняемые при наступлении определённых событий (INSERT, UPDATE, DELETE) на таблице или представлении. DDL позволяет создавать, изменять и удалять триггеры, а также указывать время их выполнения (BEFORE, AFTER, INSTEAD OF).

Домены и пользовательские типы данных

DDL поддерживает создание пользовательских типов данных на основе существующих с дополнительными ограничениями. Например, можно создать домен для хранения номера телефона с проверкой формата.

Ограничения целостности

DDL является основным инструментом для задания ограничений целостности, которые гарантируют корректность данных:

  • PRIMARY KEYуникальный идентификатор строки, не допускает NULL.
  • FOREIGN KEYссылочная целостность, обеспечивает связь между таблицами.
  • UNIQUE — гарантирует уникальность значений в столбце или группе столбцов.
  • NOT NULL — запрещает хранение NULL-значений.
  • CHECK — проверяет соответствие значения заданному условию (например, возраст > 0).
  • DEFAULT — задаёт значение по умолчанию, если при вставке строки столбец не указан.

Особенности реализации

Несмотря на стандартизацию, разные СУБД имеют существенные различия в реализации DDL:

  • PostgreSQL — поддерживает практически все возможности стандарта SQL, включая наследование таблиц, секционирование, частичные индексы и расширенные ограничения CHECK.
  • MySQL — имеет ограниченную поддержку CHECK (начиная с версии 8.0.16), но активно использует ENGINE для выбора подсистемы хранения (InnoDB, MyISAM). Команды ALTER могут блокировать таблицу на время выполнения.
  • Oracle Database — использует уникальные конструкции, такие как SEQUENCE для автоинкремента, и поддерживает виртуальные столбцы, а также материализованные представления с различными режимами обновления.
  • Microsoft SQL Server — поддерживает IDENTITY для автоинкремента, а также FILESTREAM для хранения больших двоичных объектов (BLOB) в файловой системе.
  • SQLite — имеет упрощённый DDL с ограниченной поддержкой ALTER (только переименование таблицы и добавление столбца). Для изменения структуры таблицы часто требуется пересоздание таблицы.

Применение

DDL используется на всех этапах жизненного цикла базы данных:

  • Проектирование — создание схемы БД на основе модели данных (ER-диаграммы, нормализация).
  • Миграции — последовательное изменение структуры БД с помощью скриптов DDL (например, с использованием инструментов вроде Flyway, Liquibase или Alembic).
  • Администрирование — управление индексами, секционирование больших таблиц, изменение типов данных для оптимизации производительности.
  • Разработка приложений — создание тестовых таблиц и представлений для отладки SQL-запросов.

Критика

Основные недостатки DDL связаны с его деструктивностью и отсутствием отката в большинстве реализаций. Команды DROP и ALTER могут привести к потере данных, если не были созданы резервные копии. Кроме того, изменение структуры таблицы (например, добавление столбца с NOT NULL) может блокировать доступ к таблице на время выполнения, что критично для высоконагруженных систем. Для решения этих проблем в современных СУБД внедряются механизмы онлайн-изменений (Online DDL) и версионирование схем.

Источники

  • C. J. Date. An Introduction to Database Systems. 8th Edition. Addison-Wesley, 2003.
  • ISO/IEC 9075-1:2016. Information technology — Database languages — SQL — Part 1: Framework.
  • PostgreSQL Documentation. Chapter 5: Data Definition. The PostgreSQL Global Development Group, 2024.
  • MySQL 8.0 Reference Manual. Chapter 13: Data Definition Statements. Oracle Corporation, 2024.
  • Microsoft SQL Server Documentation. Data Definition Language (DDL) Statements. Microsoft, 2024.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →