Многопользовательская база данных состоит из системных таблиц, правил и функций, которые хранятся в системе управления базой данных. Системные таблицы с префиксом GDB_ описывают схему базы геоданных, которая задает определения, правила и отношения наборов данных. Эти системные таблицы содержат и управляют метаданными, требующимися для реализации свойств базы геоданных, правил проверки данных и поведения. Это следующие таблицы:
- GDB_Items содержит список всех элементов, которые содержатся в базе геоданных, таких как классы объектов, топологии и домены
- GDB_ItemTypes содержит предварительно настроенный список распознаваемых типов элементов, таких как Table (таблица)
- GDB_ItemRelationships содержит схему отношений между элементами, такими как классы объектов, содержащиеся в наборе классов
- GDB_ItemRelationshipTypes содержит предварительно настроенный список распознаваемых типов отношений, например DatasetInFeatureDataset (Данные в наборе классов)
В таблицах GDB_Items и GDB_ItemRelationships представлена схема, определяемая пользователем в конкретной базе геоданных. Содержимое системных таблиц изменяется при каждом изменении базы геоданных. Таблицы GDB_ItemTypes и GDB_ItemRelationshipTypes не изменяются. На приведенной ниже диаграмме показаны типы отношений между этими четырьмя таблицами.
Таблица GDB_Items
В базе геоданных содержатся элементы географических и негеографических данных. К таким элементам относятся табличные наборы данных (классы объектов и таблицы), контейнеры наборов данных (наборы данных объектов, топологии и геометрические сети), наборы данных для управления более сложными настройками баз геоданных; а также другие элементы – домены, наборы инструментов и расширения рабочих областей. Все эти элементы хранятся в таблице GDB_Items базы геоданных, и каждый элемент занимает отдельную строку.
Элементы имеют следующие атрибуты:
- UUID – уникальный идентификатор элемента
- Имя: имя элемента
Имейте в виду, что имя элемента может быть не уникальным, например имена класса отношений и класса пространственных объектов могут совпадать. Тем не менее не рекомендуется присваивать элементам одинаковые имена, поскольку имя элемента должно в достаточной степени описывать содержимое элемента.
- Тип: идентификатор UUID, определяющий тип элемента в записи; соответствует уникальному идентификатору.
- Определение: документ XML, определяющий свойства элемента. У разных типов элементов свойства и схема XML могут отличаться. Например, определение класса объектов содержит такие сведения, как подтип, определение домена кодированных значений содержит пары кода и значений, а определение класса отношений содержит правила отношений и другие сущности.
- Документация: документ XML, в котором хранятся метаданные элемента
- Свойства: целочисленное значение, которое можно использовать в битовых масках значений для извлечения нескольких логических свойств элемента. В настоящий момент этот атрибут используется только для указания видимости элемента ArcGIS Desktop.
- Форма (Shape). Экстент набора данных как полигона, если применимо (тип данных зависит от базовой СУБД).
Эти семь атрибутов скорее всего будут задействованы при работе с SQL.
Следующие атрибуты хранят сведения из определений элемента (например, тип геометрии класса пространственных объектов), которые дублируются за пределами определения XML в целях обеспечения более эффективного обзора базы геоданных. В качестве примера можно привести свойства Подтип набора данных и Сведения о наборе данных, чьи коды не зависят от типа элемента. Ниже следует описание этих атрибутов:
- Физическое имя: полное имя элемента
- DatasetSubtype1. Для классов пространственных объектов и каталогов растров атрибут DatasetSubtype1 хранит тип объекта таблицы. Для топологий этот атрибут хранит идентификатор топологии.
- DatasetSubtype2. Для классов пространственных объектов и каталогов растров атрибут DatasetSubtype2 хранит тип геометрии. Для классов отношений этот атрибут хранит значение, определяющее, является ли отношение атрибутивным или неатрибутивным.
- DatasetInfo1. Хранит имя поля формы для элементов класса пространственных объектов
- DatasetInfo2. Хранит сведения для классов пространственных объектов, которые участвуют в топологии
- Путь: уникальный относительный путь к элементу
- URL. Связанный с элементом URL, используемый сервисами каталогов
- Значения по умолчанию: метаданные элемента. Не используются напрямую базами геоданных, но используются другими клиентами, такими как сервисы метаданных ArcIMS
- ItemInfo. Хранит для элемента такую информацию, как символы, не связанные с базовым набором данных
Таблица GDB_ItemTypes
Таблица GDB_ItemTypes содержит предварительно настроенный набор распознаваемых типов элементов, таких как база геоданных Типы элементов определяют иерархию типов, а также используются для нормирования таблицы GDB_Items (тип элемента в таблице GDB_Items определяется по UUID) в целях предоставления оптимальной поддержки для дальнейшего расширения функциональности базы геоданных. Все родительские элементы являются абстрактными, следовательно их нельзя будет найти в таблице элементов БГД.
Содержимое таблицы GDB_ItemTypes не изменяется даже при создании или удалении элементов.
Тип элемента имеет следующие атрибуты:
- UUID. Уникальный идентификатор типа элемента и внешний ключ к столбцу Тип таблицы GDB_Item
- ParentTypeID. Родительский тип типа элемента
Если элемент является абстрактным (у него нет родителя), UUID имеет значение NULL.
- Имя: имя типа элемента, такого как класс пространственных объектов или интервальный домен
- ObjectID. Уникальный идентификатор таблицы GDB_ItemTypes
Таблица GDB_ItemRelationships
Почти все элементы базы геоданных имеют отношения как минимум с еще одним элементом базы геоданных. Например, отдельная таблица связана с корневой папкой базы геоданных, домен связан с классом пространственных объектов или таблицами, которые на него ссылаются при проверке, а классы пространственных объектов связаны с топологией, в которой они задействованы. Таблица GDB_ItemRelationships используется для отслеживания отношений.
Отношения элемента имеют следующие атрибуты:
- UUID. Уникальный идентификатор отношений элемента
- Тип: идентификатор UUID, определяющий тип взаимоотношения; соответствует уникальному идентификатору этого типа.
- OriginID. Уникальный идентификатор начального элемента отношений.
- DestinationID. Уникальный идентификатор конечного элемента отношений.
- Атрибуты. Документ XML, содержащий подробные сведения об отношениях элемента
Многие типы отношений не включают атрибутов. Они используются только в контексте отношений между набором классов объектов и управляемыми ими наборами данных.
- ObjectID. Уникальный идентификатор
- Свойства: целочисленное значение, которое можно использовать в битовых масках значений для извлечения нескольких логических свойств элемента. В настоящий момент этот атрибут используется только для указания видимости элемента, участвующего в отношении, в ArcGIS Desktop.
Первые пять атрибутов скорее всего будут задействованы при работе с SQL.
Таблица GDB_ItemRelationshipTypes
Аналогичным образом статичная коллекция типов элементов используется для классификации элементов, а статичная типов отношений элемента используется для классификации отношений элемента. Например, DatasetInFeatureDataset (указывающая, что класс пространственных объектов, класс отношений или набор классов объектов уже существует в наборе пространственных объектов) и DomainInDataset (указывающая, что набор данных использует домен для проверки на уровне класса или подтипа) представляют собой два разных типа отношений между элементами. В отличие от типов элементов, типы отношений не имеют иерархии и не делятся на родительские и дочерние.
Тип отношений элемента имеет следующие атрибуты:
- UUID. Уникальный идентификатор типа отношений элемента и основной ключ к столбцу Тип таблицы отношений элементов
- Имя: имя типа отношений элемента, такого как DatasetInFolder
- Прямая надпись: описание отношения "с точки зрения" начального элемента.
- Обратная надпись: описание отношения "с точки зрения" конечного элемента.
- Идентификатор типа начального элемента: UUID типа элемента, который может использоваться как начальный элемент в отношениях данного типа
- Идентификатор типа конечного элемента: UUID типа элемента, который может использоваться как конечный элемент в отношениях данного типа
- Удержание: указывает, может ли конечный элемент храниться после удаления начального элемента.
XML в системных таблицах базы геоданных
Как указано в предыдущих разделах, некоторые поля используют тип данных XML. В базах геоданных под управлением IBM DB2, Microsoft SQL Server или PostgreSQL эти столбцы используют собственный тип XML СУБД, следовательно запросы к ним можно формировать с помощью выражений XPath на SQL.
В базах геоданных под управлением Oracle и Informix столбцы XML используют ArcSDE XML, который хранит информацию в виде больших двоичных объектов в нескольких отдельных таблицах. К ним можно обращаться напрямую с помощью SQL.
Для просмотра содержимого в столбцах XML системных таблиц баз геоданных под управлением Oracle предусмотрены два системных вида, в которых содержимое столбцов XML-таблиц базы геоданных хранится в виде объектов с типом данных CLOB. Вид GDB_Items_vw отображает содержимое столбцов Определение, Документация и Информация об элементе из таблицы GDB_Items в столбцах типа CLOB. Вид GDB_ItemRelationships_vw отображает содержимое столбцов Атрибуты из таблицы GDB_ItemRelationships в столбце типа CLOB. Содержимое столбца CLOB можно просмотреть в виде текста.
При формировании запросов к этим видам строка извлекается из столбца CLOB, преобразуется в тип XML, после чего к ней выполняется запрос XPath. Учтите, что при попытке создать тип XML для столбца с пустой строкой, произойдет ошибка Не удалось выполнить анализ XML, так как Oracle не поддерживает это действие.
При формировании запроса к содержимому столбцов CLOB необходимо сконфигурировать сервер Oracle таким образом, чтобы он принимал подключения SQL. Более подробную информацию см. в статье Настройка Oracle extproc для доступа к базе геоданных из SQL.
Как связаны таблицы БГД
Для наилучшего понимания того, как работают вместе системные таблицы, описывающие функциональность базы геоданных, рекомендуется изучить их с помощью SQL. Если выбрать все строки и столбцы из таблицы элементов GDB_Items появится набор результатов, выглядящий примерно следующим образом (вместе со многими другими полями):
Обратите внимание, что значения в столбце "Тип" хранятся в качестве идентификаторов UUID. Эти UUID могут решены с помощью таблицы GDB_ItemTypes, как это показано в запросе ниже:
SELECT gdb_items.UUID, gdb_itemtypes.name AS "Type", gdb_items.name
FROM gdb_items INNER JOIN gdb_itemtypes
ON gdb_items.type = gdb_itemtypes.UUID;
Возвращает результат, похожий на результат запуска простого выражения SELECT в таблице GDB_Items, но при этом использует UUID в столбце Type (Тип), замененный читаемыми строками.
Аналогичным образом, таблица GDB_ItemRelationships также содержит идентификаторы UUID, которые являются значениями ключей из других таблиц. Каждое отношение содержит два значения UUID из таблицы GDB_Items выше: одно для элемента назначения отношений, а другое – для исходного элемента. Для их разрешения в читаемые строки необходимо присоединить таблицу GDB_ItemRelationships к таблице GDB_Items дважды, как это показано ниже:
--SQL Server and PostgreSQL query SELECT relationships.type, origin_items.name AS "Origin Name", dest_items.name AS "Dest Name"
FROM gdb_items AS origin_items, gdb_itemrelationships AS relationships, gdb_items AS dest_items WHERE origin_items.UUID = relationships.originid AND dest_items.UUID = relationships.destid;
--Oracle query SELECT relationships.type, origin_items.name AS "Origin Name", dest_items.name AS "Dest Name"
FROM sde.gdb_items origin_items, sde.gdb_itemrelationships relationships, sde.gdb_items dest_items WHERE origin_items.UUID = relationships.originid AND
dest_items.UUID = relationships.destid;
На рисунке ниже показан пример набора результатов, который может быть выведен после предыдущего запроса:
Хотя здесь показаны отношения между элементами базы геоданных, требуется также тип отношений. Вы можете выполнить разрешение идентификатора UUID "Тип" посредством расширения предыдущего запроса с добавлением объединения с таблицей GDB_ItemRelationshipTypes:
--SQL Server and PostgreSQL query SELECT reltypes.name AS type, origin_items.name AS "Origin Name", dest_items.name AS "Dest Name"
FROM gdb_items AS origin_items, gdb_itemrelationships AS relationships, gdb_items AS dest_items, gdb_itemrelationshiptypes AS reltypes WHERE origin_items.UUID = relationships.originid AND dest_items.UUID = relationships.destid AND relationships.type = reltypes.UUID;
--Oracle query SELECT reltypes.name AS type, origin_items.name AS "Origin Name", dest_items.name AS "Dest Name"
FROM sde.gdb_items origin_items, sde.gdb_itemrelationships relationships, sde.gdb_items dest_items, sde.gdb_itemrelationshiptypes reltypes WHERE origin_items.UUID = relationships.originid AND dest_items.UUID = relationships.destid AND
relationships.type = reltypes.UUID;
При этом выводится следующее:
Типичные запросы к таблицам GDB_
Информацию о наиболее употребляемых типах запросов SQL к таблицам GDB_ см. в следующих разделах: