Хранение данных и доступ к ним
11.2 Словари в базах данных
Мы уже говорили о том, что метаданные — это данные о структурах данных. Вообще говоря, виды моделей данных и метаданных не обязаны совпадать. Однако, в реализациях чаще всего используется единственный вид модели и один язык для работы с данными и метаданными.
Метаданные обычно хранятся в дополнительной базе, называемой словарем. Отличия между данными и метаданными, не очевидные в общем случае, в реализациях баз данных определяются однозначно самим способом построения словаря и его использования.
Структура словаря не может изменяться пользователем базы. Кроме того, пользователь не может манипулировать данными словаря, содержащими метаданные, непосредственно. Он выполняет некоторые действия в базе, а СУБД, проверяя возможность исполнения действия, сама анализирует словарь и, при необходимости, вносит в него изменения.
Например, прежде чем выполнить запрос SELECT * FROM emp, СУБД проверит существует ли таблица с именем emp, а затем прочитает перечень имен столбцов этой таблицы, чтобы заменить им символ *. После этого запрос будет выполнен.
Словарь может разделяться на схемы, представляющие пространства имен, играющие обычную для языков программирования роль.
Метаданные можно разделять по нескольким основаниям. По долговечности метаданных отделим постоянные метаданные, изменяемые только при выполнении инструкций DDL, от переменных метаданных, характеризующих состояние хранимого объекта, например, число записей в наборе (таблице). Для каждого из хранимых объектов базы необходимы свои метаданные. Типовой список хранимых объектов:
- таблицы,
- представления,
- снимки,
- кластеры,
- связи баз данных,
- столбцы таблиц и представлений,
- секции таблиц,
- ограничения целостности,
- индексы,
- хранимые функции и процедуры,
- триггеры,
- пакеты,
- последовательности,
- синонимы.
В объектно-реляционной модели могут быть добавлены:
- объектные таблицы,
- объектные типы,
- объектные представления.
Существуют объекты не зависимые или не обязательно зависимые от схемы:
- пользователи,
- роли,
- профили пользователей или ролей,
- экстенты,
- сегменты,
- табличные области,
- каталоги.
Организация индексов будет описаны ниже. Остальные хранимые объекты рассматриваться не будут.
11.2.1 О структурах словаря
По сути, словарь представляет собой вторую базу данных с двумя пользователями. Главный пользователь словаря это СУБД. Пользователи-люди сильно ограничены в правах. Они могут читать метаданные, но не могут менять структуру словаря и заносить в него метаданные непосредственно.
Таблицы словаря в базах данных реляционного типа обычно содержат закодированную информацию в виде целых чисел. Пользователи читают ее через специальные представления, переводящие эти коды в текст. Структуры словарей в разных СУБД настолько различны, что их трудно представить какой-то общей схемой. Стандарта на словари не существует. Наиболее близки словари СУБД Oracle и DB2. Покажем часть сильно упрощенной схемы словаря, общую для этих СУБД, но в обозначениях Oracle (таблица 11.1)
Название представления | Назначение | Название столбца | Назначение столбца |
---|---|---|---|
ALL_TABLES | Список таблиц |
TABLE_NAME OWNER NUM_ROWS |
имя таблицы владелец количество строк |
ALL_VIEWS | Список представлений |
VIEW_NAME OWNER TEXT TABLE_NAME |
имя представления владелец текст запроса имя таблицы |
ALL_TAB_COLUMNS | Столбцы всех таблиц и представлений |
TABLE_NAME COLUMN_NAME DATA_TYPE DATA_LENGTH DATA_PRECISION DATA_SCALE DATA_DEFAULT NULLABLE CONSTRAINT_NAME |
имя таблицы или представления имя столбца тип данных длина данных точность число знаков после десятичной точки значение по умолчанию допустимость NULL имя ограничения |
ALL_TRIGGERS | Триггеры |
OWNER TRIGGER_NAME TRIGGER_TYPE TRIGGERING_EVENT DESCRIPTION |
владелец название триггера тип триггера событие, запускающее триггер тело триггера |
Обратите внимание на то, что в Oracle имя схемы совпадает с именем владельца схемы, так что поле OWNER можно еще читать как СХЕМА.
Метаданные управления доступом к данным также слишком отличаются, чтобы можно было представить какую-то общую структуру.
Если база данных интегрирована с построенными на ее основе приложениями, то она может содержать метаданные приложений, в том числе, интерфейсов пользователя. Упомянем в качестве примера Microsoft Access.