Объектный словарь
Объектный словарь (также объектный словарь данных, объектный каталог) — это структурированная совокупность метаданных, описывающих объекты базы данных, хранящаяся в самой системе управления базами данных (СУБД). Объектный словарь содержит информацию о таблицах, индексах, представлениях, хранимых процедурах, триггерах, ограничениях целостности, пользователях и других сущностях, составляющих схему базы данных. В отличие от обычного словаря данных, который может существовать в виде отдельного документа, объектный словарь является неотъемлемой частью СУБД и автоматически обновляется при изменении структуры базы данных.
История и происхождение
Концепция объектного словаря возникла в 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 →