Обзор системных таблиц базы геоданных с помощью SQL

После понимания отношений между четырьмя системными таблицами базы геоданных лучше всего можно посмотреть принципы их совместной работы, используя SQL. Если выбрать все строки и столбцы из таблицы элементов GDB_Items появится набор результатов, выглядящий примерно следующим образом (вместе со многими другими полями):

Значения, возвращаемые при опросе таблицы 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_ItemRelationshipTypes

5/25/2014