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

Объектный словарь

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

История и происхождение

Концепция объектного словаря возникла в 1970-х годах с развитием реляционных баз данных. Ранние СУБД, такие как System R от IBM, ввели понятие системного каталога — специального набора таблиц, в которых хранилась информация о схеме данных. В 1980-х годах, с появлением коммерческих СУБД (Oracle, DB2, Ingres), объектные словари стали стандартным компонентом. Стандартизация SQL (SQL-86, SQL-92) закрепила требования к информационной схеме (information schema) — набору представлений, предоставляющих доступ к метаданным в единообразном виде. В объектно-реляционных СУБД (PostgreSQL, Oracle Database) словарь дополнился описанием типов данных, методов и наследования.

Структура и содержание

Объектный словарь обычно организован как набор системных таблиц или представлений, доступных только для чтения обычным пользователям. В большинстве СУБД он включает следующие категории метаданных:

Таблицы и представления

  • Имена таблиц и представлений.
  • Список столбцов с их типами данных, длиной, точностью (для чисел с плавающей запятой).
  • Информация о значениях по умолчанию и допустимости NULL.
  • Сведения о владельце (схеме) объекта.

Индексы

  • Имена индексов и связанные с ними таблицы.
  • Тип индекса (B-tree, hash, GiST, GIN и т.д.).
  • Уникальность, кластеризация, частичные условия.
  • Список столбцов, входящих в индекс.

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

  • Первичные ключи (PRIMARY KEY).
  • Внешние ключи (FOREIGN KEY) с указанием родительской и дочерней таблиц.
  • Уникальные ограничения (UNIQUE).
  • Проверочные ограничения (CHECK) с текстом условия.

Хранимые процедуры и функции

  • Имена, параметры (имя, тип, направление — IN/OUT/INOUT).
  • Тип возвращаемого значения.
  • Язык реализации (SQL, PL/pgSQL, C и т.д.).
  • Тело процедуры или функции (часто в виде текста).

Триггеры

  • Имя триггера и связанная таблица.
  • Событие (INSERT, UPDATE, DELETE) и время срабатывания (BEFORE, AFTER, INSTEAD OF).
  • Условие (WHEN) и тело триггера.

Пользователи и роли

  • Список пользователей базы данных.
  • Назначенные привилегии (SELECT, INSERT, UPDATE, DELETE, EXECUTE и т.д.).
  • Членство в ролях.

Доступ к объектному словарю

В различных СУБД реализованы разные механизмы доступа к метаданным:

Стандартная информационная схема

Стандарт SQL определяет набор представлений INFORMATION_SCHEMA, которые доступны во всех основных СУБД (PostgreSQL, MySQL, MariaDB, SQL Server, Oracle — с некоторыми ограничениями). Примеры:

  • INFORMATION_SCHEMA.TABLES — список таблиц.
  • INFORMATION_SCHEMA.COLUMNS — описание столбцов.
  • INFORMATION_SCHEMA.KEY_COLUMN_USAGE — информация о ключах.

Системные каталоги СУБД

Каждая СУБД имеет собственные системные таблицы, которые могут предоставлять более детальную информацию, чем стандартная схема:

  • PostgreSQL: таблицы pg_catalog.pg_class, pg_catalog.pg_attribute, pg_catalog.pg_index.
  • Oracle: представления ALL_TABLES, USER_TAB_COLUMNS, DBA_INDEXES.
  • MySQL: таблицы information_schema.TABLES, information_schema.COLUMNS (частично дублируют стандарт).
  • SQL Server: системные представления sys.tables, sys.columns, sys.indexes.

Системные хранимые процедуры

Некоторые СУБД предоставляют встроенные процедуры для получения метаданных:

  • sp_help (SQL Server) — выводит информацию о таблице или объекте.
  • DBMS_METADATA.GET_DDL (Oracle) — возвращает DDL-код объекта.
  • pg_get_tabledef() (PostgreSQL) — пользовательская функция для получения определения таблицы.

Применение

Объектный словарь используется в нескольких ключевых областях:

Администрирование баз данных

  • Мониторинг структуры базы данных: проверка наличия индексов, ограничений, дублирующих объектов.
  • Аудит изменений: отслеживание дат создания, последнего изменения объектов.
  • Миграция схем: генерация DDL-скриптов на основе метаданных.

Разработка приложений

  • Генерация кода: ORM-фреймворки (Entity Framework, Hibernate, SQLAlchemy) автоматически создают классы сущностей на основе метаданных из объектного словаря.
  • Динамическое построение запросов: библиотеки для построения SQL-запросов (например, Dapper, MyBatis) используют метаданные для маппинга.
  • Документирование: автоматическое создание документации по схеме базы данных.

BI и аналитика

  • ETL-процессы: инструменты извлечения, преобразования и загрузки данных (Talend, Apache NiFi) читают объектный словарь для определения структуры источников.
  • Data Governance: системы управления метаданными (Apache Atlas, Collibra) интегрируются с объектными словарями для построения каталогов данных.

Примеры запросов к объектному словарю

PostgreSQL

Получение списка таблиц в схеме public: ``sql SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'; ``

MySQL

Получение информации о столбцах таблицы employees: ``sql SELECT column_name, data_type, is_nullable, column_default FROM information_schema.columns WHERE table_name = 'employees'; ``

SQL Server

Получение списка индексов таблицы Orders: ``sql SELECT i.name AS index_name, i.type_desc, c.name AS column_name FROM sys.indexes i JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id WHERE i.object_id = OBJECT_ID('Orders'); ``

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

  • Производительность: запросы к объектному словарю могут быть медленными на больших базах данных с тысячами объектов, особенно при использовании неоптимальных фильтров.
  • Безопасность: доступ к системным таблицам часто ограничен для обычных пользователей; требуется привилегия SELECT на системные каталоги или роль администратора.
  • Переносимость: хотя стандарт INFORMATION_SCHEMA существует, его реализация в разных СУБД может различаться по набору столбцов и поддерживаемым типам данных. При миграции между СУБД часто требуется адаптация запросов.
  • Версионность: структура системных таблиц может меняться между версиями СУБД, что требует обновления инструментов, работающих с объектным словарём.

Интересные факты

  • В СУБД PostgreSQL объектный словарь хранится в схеме pg_catalog, которая по умолчанию находится в системном пространстве имён и не видна в обычных запросах без явного указания.
  • В Oracle Database объектный словарь называется Data Dictionary и включает более 1000 представлений, разделённых на три уровня: USER_ (объекты текущего пользователя), ALL_ (объекты, доступные пользователю) и DBA_* (все объекты базы данных).
  • В некоторых СУБД (например, SQLite) объектный словарь представлен единственной таблицей sqlite_master, которая содержит все метаданные в текстовом формате SQL-операторов CREATE.

Источники

  • C. J. Date, «An Introduction to Database Systems», 8th Edition, Addison-Wesley, 2003.
  • Стандарт ISO/IEC 9075-11:2016 «Information technology — Database languages — SQL — Part 11: Information and definition schemas (SQL/Schemata)».
  • Документация PostgreSQL: «The System Catalog», «The Information Schema».
  • Документация Oracle Database: «Data Dictionary Concepts».
  • Документация MySQL: «The INFORMATION_SCHEMA Database».

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

На главную BFOmetr →