Многопользовательская база данных состоит из системных таблиц, правил и функций, которые хранятся в системе управления базой данных. Системные таблицы с префиксом GDB_ описывают схему базы геоданных, которая задает определения, правила и отношения наборов данных. Эти системные таблицы содержат и управляют метаданными, требующимися для реализации свойств базы геоданных, правил проверки данных и поведения. Это следующие таблицы:
- GDB_Items: содержит список всех элементов, которые содержатся в базе геоданных, таких как классы объектов, топологии и домены
- GDB_ItemTypes содержит предварительно настроенный список распознаваемых типов элементов, таких как Table
- GDB_ItemRelationships содержит схему отношений между элементами, такими как классы объектов, содержащиеся в наборе классов
- GDB_ItemRelationshipTypes содержит предварительно настроенный список распознаваемых типов отношений, например, DatasetInFeatureDataset
В таблицах GDB_Items и GDB_ItemRelationships представлена схема, определяемая пользователем в конкретной базе геоданных. Содержимое системных таблиц изменяется при каждом изменении базы геоданных. Таблицы GDB_ItemTypes и GDB_ItemRelationshipTypes заполняются когда вы создаете базу геоданных, значения остаются постоянными в пределах данной версии ПО. На приведенной ниже диаграмме показаны типы отношений между этими четырьмя таблицами.
Таблица GDB_Items
В базе геоданных содержатся элементы пространственных и непространственных данных. К таким элементам относятся табличные наборы данных (классы объектов и таблицы), контейнеры наборов данных (наборы данных объектов и топологии), наборы данных для управления более сложным поведением баз геоданных; а также другие элементы, такие как домены, наборы инструментов и расширения рабочих областей. Все эти элементы хранятся в таблице GDB_Items базы геоданных, и каждый элемент занимает отдельную строку.
Эти семь атрибутов скорее всего будут задействованы при работе с SQL:
- UUID – уникальный идентификатор элемента
- Name – имя элемента
Имейте в виду, что имя элемента может быть не уникальным, например имена класса отношений и класса пространственных объектов могут совпадать. Тем не менее не рекомендуется присваивать элементам одинаковые имена, поскольку имя элемента должно в достаточной степени описывать содержимое элемента.
- Type – идентификатор UUID, определяющий тип элемента в записи; соответствует уникальному идентификатору.
- Definition – документ XML, определяющий свойства элемента. У разных типов элементов свойства и схема XML могут отличаться. Например, определение класса объектов содержит такие сведения, как подтип, определение домена кодированных значений содержит пары кода и значений, а определение класса отношений содержит правила отношений и другие сущности.
- Documentation – документ XML, в котором хранятся метаданные элемента
- Properties – целочисленное значение, которое можно использовать в битовых масках значений для извлечения нескольких логических свойств элемента. В настоящий момент этот атрибут используется только для указания видимости элемента ArcGIS Desktop.
- Shape – экстент набора данных как полигона, если применимо (тип данных зависит от базовой СУБД).
Атрибуты из следующего списка хранят сведения из определений элемента (например, тип геометрии класса пространственных объектов), которые дублируются за пределами определения XML в целях обеспечения более эффективного обзора базы геоданных. К таким примерам относятся свойства Подтип набора данных и Информация о наборе данных. Коды этих атрибутов зависят от типа элемента. Ниже следует описание этих атрибутов:
- Physical Name – полное имя элемента
- DatasetSubtype1 – для классов пространственных объектов и каталогов растров атрибут DatasetSubtype1 хранит тип объекта таблицы. Для топологий этот атрибут хранит идентификатор топологии.
- DatasetSubtype2 – для классов пространственных объектов и каталогов растров атрибут DatasetSubtype2 хранит тип геометрии. Для классов отношений этот атрибут хранит значение, определяющее, является ли отношение атрибутивным или неатрибутивным.
- DatasetInfo1 – хранит имя поля формы для элементов класса пространственных объектов
- DatasetInfo2 – хранит информацию о классах объектов, которые участвуют в топологиях
- Path – уникальный относительный путь к элементу
- URL – URL-адрес, связанный с элементом; используется со службами каталога
- Defaults – метаданные элемента; не используются напрямую базами геоданных, но используются другими клиентами
- ItemInfo – информация о хранении элемента, такие как символы, не зависящая от набора данных
Таблица GDB_ItemTypes
Таблица GDB_ItemTypes содержит предварительно настроенный набор распознаваемых типов элементов, таких как база геоданных Типы элементов определяют иерархию типов, а также используются для нормирования таблицы GDB_Items (тип элемента в таблице GDB_Items определяется по UUID) в целях предоставления оптимальной поддержки для дальнейшего расширения функциональности базы геоданных. Все родительские элементы являются абстрактными, поэтому они не хранятся непосредственно в таблице GDB_Items.
Содержимое таблицы GDB_ItemTypes не изменяется при создании или удалении элементов.
Тип элемента имеет следующие атрибуты:
- UUID – уникальный идентификатор типа элемента и внешний ключ к столбцу типа таблицы GDB_Item
- ParentTypeID – родительский тип типа элемента
Если элемент является абстрактным (у него нет родителя), UUID имеет значение NULL.
- Name – имя типа элемента, такого как класс пространственных объектов или интервальный домен
- ObjectID – уникальный идентификатор таблицы GDB_ItemTypes
Таблица GDB_ItemRelationships
Почти все элементы базы геоданных имеют отношения как минимум с еще одним элементом базы геоданных. Например, отдельная таблица связана с корневой папкой базы геоданных, домен связан с классом пространственных объектов или таблицами, которые на него ссылаются при проверке, а классы пространственных объектов связаны с топологией, в которой они задействованы. Таблица GDB_ItemRelationships используется для отслеживания отношений.
Отношения элемента имеют следующие атрибуты:
- UUID – уникальный идентификатор отношений элемента
- Type – идентификатор UUID, определяющий тип взаимоотношения; соответствует уникальному идентификатору этого типа.
- OriginID – уникальный идентификатор начального элемента отношений.
- DestinationID – уникальный идентификатор конечного элемента отношений.
- Attributes – документ XML, содержащий подробные сведения об отношениях элемента
Многие типы отношений не включают атрибутов. Они используются только в отношениях между набором классов объектов и управляемыми ими наборами данных.
- ObjectID – уникальный идентификатор
- Properties – целочисленное значение, которое можно использовать в битовых масках значений для извлечения нескольких логических свойств элемента. В настоящий момент этот атрибут используется только для указания видимости элемента, участвующего в отношении, в клиентском приложении ArcGIS.
Первые пять атрибутов скорее всего будут задействованы при работе с SQL.
Таблица GDB_ItemRelationshipTypes
Аналогичным образом статичная коллекция типов элементов используется для классификации элементов, а статичная типов отношений элемента используется для классификации отношений элемента. Например, DatasetInFeatureDataset, указывающая, что класс пространственных объектов, класс отношений или набор классов объектов уже существует в наборе пространственных объектов, и DomainInDataset, указывающая, что набор данных использует домен для проверки на уровне класса или подтипа) представляют собой два разных типа отношений между элементами. В отличие от типов элементов, типы отношений не имеют иерархии и не делятся на родительские и дочерние.
Тип отношений элемента имеет следующие атрибуты:
- UUID - уникальный идентификатор типа отношений элемента и основной ключ к столбцу типа таблицы отношений элементов
- Name - имя типа отношений элемента, такого как DatasetInFolder
- Forward Label - описание отношения с точки зрения начального элемента.
- Backward Label - описание отношения с точки зрения конечного элемента.
- Origin Item Type ID - UUID типа элемента, который может использоваться как конечный элемент в отношениях данного типа
- Destination Item Type ID - UUID типа элемента, который может использоваться как конечный элемент в отношениях данного типа
- Is Containment - указывает, может ли конечный элемент храниться после удаления начального элемента.
XML в системных таблицах базы геоданных
Как указано в предыдущих разделах, некоторые поля используют тип данных XML. В базах геоданных под управлением IBM Db2, Microsoft SQL Server или PostgreSQL эти столбцы используют собственный тип XML СУБД, следовательно запросы к ним можно формировать с помощью выражений XPath на SQL.
В базах геоданных под управлением Oracle и IBM Informix столбцы XML используют ArcSDE XML, который хранит информацию в виде больших двоичных объектов в нескольких отдельных таблицах. К ним можно обращаться напрямую с помощью SQL.
Для просмотра содержимого в столбцах XML системных таблиц баз геоданных под управлением Oracle предусмотрены два системных вида, в которых содержимое столбцов XML-таблиц базы геоданных хранится в виде объектов с типом данных CLOB. Вид GDB_Items_vw отображает содержимое столбцов Definition, Documentation и ItemInfo из таблицы GDB_Items в столбцах CLOB. Вид GDB_ItemRelationships_vw отображает содержимое столбцов Attributes из таблицы GDB_ItemRelationships в столбце CLOB. CLOB могут быть прочитаны как текст.
При формировании запросов к этим видам строка извлекается из столбца CLOB, преобразуется в тип XML, после чего к ней выполняется запрос XPath. Учтите, что при попытке создать тип XML для столбца с пустой строкой, произойдет ошибка Не удалось выполнить анализ XML, так как Oracle не поддерживает это действие.
При формировании запроса к содержимому столбцов CLOB необходимо сконфигурировать сервер Oracle таким образом, чтобы он принимал подключения SQL. Более подробную информацию см. в разделе Настройка extproc для доступа к ST_Geometry в Oracle.
Как связаны таблицы БГД
Для наилучшего понимания того, как работают вместе системные таблицы, описывающие функциональность базы геоданных, рекомендуется изучить их с помощью SQL. Выделите все столбцы и строки таблицы GDB_Items, чтобы увидеть ее содержание.
Значения в столбце хранятся как Type, которые связаны со столбцом UUID в таблице GDB_ItemTypes. Поэтому можно вернуть тип для каждого элемента, используя SQL-запрос такого вида:
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;
Запрос возвращает значения Type для каждого элемента, как показано в таблице:
UUID | Тип | Имя |
---|---|---|
DF7A67CF-D8B2-461C-A4BF-74AF52AF2BD3 | Папка | |
5E53E5C2-874E-4538-A6AB-1F0BBCABA885 | Рабочая область | Рабочая область |
2AC65400-919D-4241-A1A5-83C219A8ACD0 | Домен кодированных значений | Материал |
897D8FA2-BE31-4A5D-94A5-B93A32BF2146 | Домен кодированных значений | DitDiam |
B75E3FDF-F864-4FA1-A31A-A56716BBDEA7 | Интервальный домен | RotAngle |
Аналогичным образом, таблица GDB_ItemRelationships также содержит идентификаторы UUID, которые являются значениями ключей из других таблиц. Каждое отношение содержит два значения UUID из таблицы GDB_Items выше: одно для элемента назначения отношений, а другое – для исходного элемента. Для их разрешения в читаемые строки необходимо присоединить таблицу GDB_ItemRelationships к таблице GDB_Items дважды. Чтобы увидеть тип отношений, включите в запрос соединение с таблицей GDB_ItemRelationshipTypes, как показано в следующих примерах SQL:
--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;
Это пример значений, возвращаемых предыдущим запросом:
Тип | Имя источника | Dest Name |
---|---|---|
DatasetInFeatureDataset | County.PW.Cadastre | County.PW.PrivRdName |
DatasetInFeatureDataset | County.PW.Cadastre | County.PW.TaxParcelNo |
DomainInDataset | County.PW.PIN | PINB |
FeatureClassInTopology | County.PW.Cadastre_Topology | County.PW.TaxBlocks |
DatasetsRelatedThrough | County.PW.PIN_Condo | County.PW.PIN_Condo2Parcel |
Типичные запросы к таблицам GDB_
Информацию о наиболее употребляемых типах запросов SQL к таблицам GDB_ см. в следующих разделах: