Словарь метаданных документно-ориентированной информационной системы
Роман Чернышев, 2001
Назначение
Словарь метаданных (CM или Metadata dictionary, MD) служит для связи объектов предметной области (документов) со структурой их хранения в БД. Любой тип документа, используемый в системе, должен быть описан в СМ до начала его использования приложениями. На базе словаря строятся другие базовые службы системы, такие как служба разграничения прав доступа к документам и/или их атрибутам и учетная схема.
Кроме того, словарь метаданных является дополнительным способом взаимодействия и документирования системы для групп разработчиков, работающих над разными ее сегментами.
Устройство
СМ представляет собой иерархическую структуру, в узлах которой хранится информация о документах, атрибутах и объектах БД (таблицы, колонки) обеспечивающих их хранение.
Рис. 1 Концептуальная модель MD.
Сущность NodeType содержит полный перечень возможных типов узлов СМ.
Атрибут | Назначение |
---|---|
TypeID | Primary Key |
Tag | Код |
Name | Название для UI |
Сущность MD представляет собой собственно реестр классов документов и их атрибутов.
Атрибут | Назначение |
---|---|
NodeID | Идентификатор узла, PRIMARY KEY |
ParentID | Идентификатор узла-родителя |
TypeID | Тип узла |
Name | Название для UI |
Tag | Кодовое название |
SchemaName | Название схемы владельца объекта |
TabName | Название таблицы (или пакета для узлов типа NT_METHOD) |
ColName | Название колонки или процедуры |
RefLink | Для атрибута-ссылки ID узла в CM c описанием типа документа |
Note | Комментарий |
Типы узлов и их назначение
Ниже приведен перечень всех возможных типов узлов и описание их назначения. Типы узлов заносятся в таблицу при установке системы и не изменяются в процессе эксплуатации системы.
NT_DOC
Узел типа NT_DOC является корневым в описании класса документа. Узлы NT_DOC могут располагаться только на нулевом уровне иерархии (ParentID is NULL) и не могут содержать в себе другие узлы этого же типа. Все дочерние узлы интерпретируются как атрибуты данного класса документов. В колонках SchemaName, TabName должно содержаться имя главной таблицы класса. Главной считается таблица, в которой содержится атрибут или атрибуты составляющие первичный ключ (идентифицирующий атрибут).
Назначение атрибутов MD при описании узла NT_DOC.
Атрибут | Назначение |
---|---|
NodeID | Идентификатор узла, PRIMARY KEY |
ParentID | Идентификатор узла-родителя, всегда NULL |
TypeID | 1 |
Name | Название класса документов |
Tag | Кодовое имя класса |
SchemaName | Название схемы владельца главной таблицы класса |
TabName | Название главной таблицы документа |
ColName | Не используется, всегда NULL |
RefLink | Не используется, всегда NULL |
Note | Комментарий для класса документов |
NT_KEY
Узел является идентифицирующим атрибутом (PRIMARY KEY) или его частью. Может быть вложен в узлы типа NT_DOC, NT_COMPOUND и NT_DETAIL. На сегодняшний день в системе принята политика формирования суррогатных ключей для всех сущностей, поэтому, скорее всего каждый класс документов будет иметь только один атрибут NT_KEY. По той же причине, атрибуты типа NT_KEY не должны выносится на уровень пользовательского интерфейса. Не может содержать дочерних узлов.
Назначение атрибутов MD при описании узла NT_KEY.
Атрибут | Назначение |
---|---|
NodeID | Идентификатор узла, PRIMARY KEY |
ParentID | Идентификатор узла-родителя, всегда NOT NULL и содержит ссылку на узел типа NT_DOC, NT_COMPOUND, NT_DETAIL |
TypeID | 2 |
Name | Не используется, если описывает суррогатный ключ, иначе содержит имя атрибута. |
Tag | Кодовое имя атрибута |
SchemaName | Название схемы владельца главной таблицы класса. |
TabName | Название главной таблицы документа. |
ColName | Название колонки являющейся первичным ключом. |
RefLink | Не используется, всегда NULL. |
Note | Не используется, если описывает суррогатный ключ, иначе комментарий для атрибута. |
NT_PARENTKEY
Узел является вторичным ключом-ссылкой на родителя. Используется для документов, имеющих иерархическую структуру хранилища. В качестве примера может быть приведена сущность MD, в которой колонка ParentID является как раз таким ключом. Узлы этого типа могут быть вложены только в узлы типа NT_DOC. Так же как и NT_KEY, узлы этого типа служат только для описания структуры хранилища и не предназначены для использования на уровне пользовательского интерфейса. Не может содержать дочерних узлов.
Назначение атрибутов MD при описании узла NT_PARENTKEY.
Атрибут | Назначение |
---|---|
NodeID | Идентификатор узла, PRIMARY KEY |
ParentID | Идентификатор узла-родителя, всегда NOT NULL и содержит ссылку на узел типа NT_DOC |
TypeID | 3 |
Name | Не используется. |
Tag | Кодовое имя атрибута |
SchemaName | Название схемы владельца главной таблицы класса. |
TabName | Название главной таблицы класса. |
ColName | Название колонки являющейся внешним ключом. |
RefLink | Не используется, всегда NULL. |
Note | Не используется. |
NT_DATA
Атрибут, содержащий данные базового типа (NUMERIC, VARCHAR…). Не может содержать дочерних узлов.
Назначение атрибутов MD при описании узла NT_DATA.
Атрибут | Назначение |
---|---|
NodeID | Идентификатор узла, PRIMARY KEY |
ParentID | Идентификатор узла-родителя, всегда NOT NULL. |
TypeID | 6 |
Name | Название атрибута для UI. |
Tag | Кодовое имя атрибута |
SchemaName | Название схемы владельца таблицы. |
TabName | Название таблицы. |
ColName | Название колонки соответствующей атрибуту. |
RefLink | Не используется, всегда NULL. |
Note | Комментарий. |
NT_NAME
Частный случай NT_DATA, используется для маркировки атрибута в качестве идентифицирующего документ на уровне пользовательского интерфейса, например, при построении списка документов данного класса. В качестве примера можно привести атрибут ‘Название’ существующий в большинстве классов. Не может содержать дочерних узлов.
Назначение атрибутов MD при описании узла NT_NAME.
Атрибут | Назначение |
---|---|
NodeID | Идентификатор узла, PRIMARY KEY |
ParentID | Идентификатор узла-родителя, всегда NOT NULL. |
TypeID | 4 |
Name | Название атрибута для UI. |
Tag | Кодовое имя атрибута |
SchemaName | Название схемы владельца таблицы. |
TabName | Название таблицы. |
ColName | Название колонки соответствующей атрибуту. |
RefLink | Не используется, всегда NULL. |
Note | Комментарий. |
NT_REF
Атрибут-ссылка на другой документ. На физическом уровне это соответствует полю, которое является внешним ключом на главную таблицу другого класса. При описании документа типа для атрибута RefClassID должен быть использован узел типа NT_REF. Не может содержать дочерних узлов.
Назначение атрибутов MD при описании узла NT_REF.
Атрибут | Назначение |
---|---|
NodeID | Идентификатор узла, PRIMARY KEY |
ParentID | Идентификатор узла-родителя, всегда NOT NULL. |
TypeID | 5 |
Name | Название атрибута для UI. |
Tag | Кодовое имя атрибута |
SchemaName | Название схемы владельца таблицы. |
TabName | Название таблицы. |
ColName | Название колонки FK соответствующей атрибуту. |
RefLink | Заполняется NodeID узла типа NT_DOC c описанием класса, на который ссылается атрибут. |
Note | Комментарий. |
NT_COMPOUND
Сложный атрибут, состоящий из нескольких подчиненных атрибутов хранящихся в другой таблице. На физическом уровне это соответствует связи 1 к 1, в которой таблица документа является доминирующей, т.е. ее ключ мигрирует в подчиненную в качестве FK, но не наоборот. Подчиненная таблица в данном случае рассматривается как "продолжение" главной, для хранения дополнительных атрибутов документа.
Назначение атрибутов MD при описании узла NT_COMPOUND.
Атрибут | Назначение |
---|---|
NodeID | Идентификатор узла, PRIMARY KEY |
ParentID | Идентификатор узла-родителя, всегда NOT NULL. |
TypeID | 7 |
Name | Название атрибута для UI. |
Tag | Кодовое имя атрибута |
SchemaName | Название схемы владельца подчиненной таблицы. |
TabName | Название подчиненной таблицы. |
ColName | Не используется, всегда NULL |
RefLink | Не используется, всегда NULL |
Note | Комментарий. |
NT_DETAIL
Атрибут, содержащий детализирующую информацию в документах имеющих отношение master-detail (отношение один-ко-многим). Атрибуты, вложенные в узел этого типа, трактуются как колонки таблицы, содержащей детальную информацию.
Назначение атрибутов MD при описании узла NT_DETAIL.
Атрибут | Назначение |
---|---|
NodeID | Идентификатор узла, PRIMARY KEY |
ParentID | Идентификатор узла-родителя, всегда NOT NULL. |
TypeID | 8 |
Name | Название атрибута для UI. |
Tag | Кодовое имя атрибута |
SchemaName | Название схемы владельца подчиненной таблицы. |
TabName | Название подчиненной таблицы. |
ColName | Не используется, всегда NULL |
RefLink | Не используется, всегда NULL |
Note | Комментарий. |
NT_METHOD
Описывает методы класса. Предусмотрены два типа методов:
- хранимые, реализуются в виде функций и процедур в пакетах PLSQL
- абстрактные, реализуются приложением
Для хранимых методов в колонках SchemaName
, TabName
и ColName
указываются названия схемы содержащей пакет, название пакета и название процедуры соответственно. Описание абстрактного метода должно содержать NULL во всех трех колонках.
Назначение атрибутов MD при описании узла NT_METHOD.
Атрибут | Назначение |
---|---|
NodeID | Идентификатор узла, PRIMARY KEY |
ParentID | Идентификатор узла-родителя, всегда NOT NULL. |
TypeID | 9 |
Name | Название метода для UI. |
Tag | Кодовое имя метода |
SchemaName | Название схемы владельца пакета или NULL для абстрактного метода. |
TabName | Название пакета или NULL для абстрактного метода. |
ColName | Название функции или NULL для абстрактного метода. |
RefLink | Не используется, всегда NULL |
Note | Комментарий. |
Зависимые объекты
Любой узел в MD может иметь произвольное количество связанных объектов БД (таблиц, представлений и хранимых процедур). ER диаграмма хранилища списка связанных объектов представлена на рисунке:
При назначении прав на узел MD, права на связанные объекты по умолчанию выдаются в соответствии со следующей таблицей:
Привилегия на узел MD/Тип объекта | S | U | I | D | E |
---|---|---|---|---|---|
Table | S | U | I | D | S |
View | S | S | S | S | S |
Procedure | - | E | E | E | E |
Существует возможность изменения такого поведения путем установки соответствующих значений в таблице PMap
(privilege map).
blog comments powered by Disqus