Eine Enterprise-Geodatabases besteht aus Systemtabellen, Prozeduren und Funktionen, die in einem Datenbankmanagementsystem gespeichert sind. Die Systemtabellen mit dem Präfix "GDB_" beschreiben das Geodatabase-Schema, das Dataset-Definitionen, Regeln und Beziehungen vorgibt. Diese Systemtabellen enthalten und verwalten alle Metadaten, die erforderlich sind, um Geodatabase-Eigenschaften, Datenvalidierungsregeln und Verhalten zu implementieren. Die Tabellen lauten wie folgt:
- GDB_Items: Enthält eine Auflistung aller Elemente, die in einer Geodatabase enthalten sind, z. B. Feature-Classes, Topologien und Domänen.
- GDB_ItemTypes: Enthält eine vordefinierte Liste erkannter Elementtypen, z. B. Tabelle.
- GDB_ItemRelationships: Enthält Schemaverknüpfungen zwischen Elementen, z. B. welche Feature-Classes in einem Feature-Dataset enthalten sind.
- GDB_ItemRelationshipTypes: Enthält eine vordefinierte Liste erkannter Beziehungstypen, z. B. DatasetInFeatureDataset.
Die Tabellen "GDB_Items" und "GDB_ItemRelationships" stellen das benutzerdefinierte Schema in einer bestimmten Geodatabase dar. Der Inhalt der Tabellen wird geändert, wenn das Schema der Geodatabase geändert wird. Die Tabellen "GDB_ItemTypes" und "GDB_ItemRelationshipTypes" sind statisch. Die Beziehungen zwischen diesen vier Tabellen werden in der folgenden Abbildung verdeutlicht:
GDB_Items (Tabelle)
Eine Geodatabase ist ein Container für geographische und nicht-geographische Elemente. Zu diesen Elementen gehören tabellarische Datasets, z. B. Feature-Classes und Tabellen, Dataset-Container, z. B. Feature-Datasets, Topologien und geometrische Netzwerke, Datasets, die erweiterte Geodatabase-Verhaltensweisen steuern, sowie andere Elemente z. B. Domänen, Toolboxes und Workspace-Erweiterungen. All diese Elemente werden in der Geodatabase in der Tabelle "GDB_Items" gespeichert, in der jedes Element als einzelne Zeile hinzugefügt wird.
Ein Element hat die folgenden Attribute:
- UUID: Eine eindeutige Kennung für das Element.
- Name: Der Name des Elements.
Beachten Sie, dass der Name eines Elements nicht unbedingt eindeutig ist; eine Beziehungsklasse und eine Feature-Class können beispielsweise denselben Namen haben. Es wird jedoch nicht empfohlen, dass Sie Elementen den gleichen Namen geben, da Feldnamen so aussagekräftig sein sollten, dass unterschieden werden kann, was das Element enthält.
- Typ: Eine UUID, die den Typ des Elements im Datensatz darstellt; diese stimmt mit dem eindeutigen Bezeichner überein.
- Definition: Ein XML-Dokument, das die Eigenschaften eines Elements definiert; diese Eigenschaften und das XML-Schema variieren auf Grundlage des Elementtyps. Die Definition einer Objektklasse enthält beispielsweise Informationen, z. B. Subtypes, wohingegen die Definition einer Domäne mit codierten Werten Code-/Wertpaare enthält, und die Definition einer Beziehungsklasse enthält u. a. Beziehungsregeln.
- Dokumentation: Ein XML-Dokument, in dem die Metadaten des Elements gespeichert werden.
- Eigenschaften: Ein Ganzzahlwert, der mit Bitmasken verwendet werden kann, um mehrere boolesche Eigenschaften des Elements abzurufen. Momentan wird dieser Wert nur verwendet, um anzugeben, ob ein Element in ArcGIS Desktop sichtbar ist.
- Shape: Die Ausdehnung des Datasets als Polygon, falls anwendbar (der Datentyp ist vom zugrunde liegenden DBMS abhängig).
Auf diese sieben Attribute werden Sie mit großer Wahrscheinlichkeit mit SQL zugreifen.
Die nächsten Attribute speichern Informationen aus der Definition eines Elements (z. B. der Geometrietyp einer Feature-Class), die außerhalb der XML-Definition dupliziert werden, um ein effizienteres Durchsuchen der Geodatabase zu ermöglichen. Beispiele für diese Attribute sind die Eigenschaften "Dataset-Subtype" und "Dataset-Informationen", deren Codes von dem Elementtyp abhängig sind. Die Attribute lassen sich wie folgt beschreiben:
- Physical Name: Der vollständig qualifizierte Name des Elements.
- DatasetSubtype1: Für Feature-Classes und Raster-Kataloge speichert DatasetSubtype1 den Feature-Typ der Tabelle. Bei Topologien wird die Topologie-ID gespeichert.
- DatasetSubtype2: Für Feature-Classes und Raster-Kataloge speichert DatasetSubtype2 den Geometrietyp. Für Beziehungsklassen wird ein Wert gespeichert, der angibt, ob die Beziehung attributiert oder nicht attributiert ist.
- DatasetInfo1: Speichert den Namen des Shape-Felds für Feature-Class-Elemente.
- DatasetInfo2: Speichert Informationen für Feature-Classes, die Teil von Topologien sind.
- Pfad: Der eindeutige relative Pfad des Elements.
- URL: Die zugeordnete URL für das Element; wird für Katalog-Services verwendet.
- Standardeinstellungen: Elementmetadaten; werden nicht direkt von den Geodatabases, sondern von anderen Clients verwendet, z. B. ArcIMS-Metadaten-Services.
- ItemInfo: Speicherinformationen für das Element, z. B. Symbologie, die vom zugrunde liegenden Dataset unabhängig sind.
GDB_ItemTypes (Tabelle)
Die Tabelle "GDB_ItemTypes" enthält den vordefinierten Satz erkannter Feldtypen in der Geodatabase. Feldtypen werden zur Normalisierung der Tabelle "GDB_Items" verwendet (der Typ eines Elements in der Tabelle "GDB_Items" wird als UUID dargestellt), um in der Zukunft eine bessere Unterstützung von Geodatabase-Funktionalitätserweiterungen zu ermöglichen und eine Typhierarchie zu definieren. Alle übergeordneten Typen sind abstrakt, daher sind übergeordnete Elemente auch nicht in der Tabelle "GDB_Items" zu finden.
Der Inhalt der Tabelle "GDB_ItemTypes" ist statisch; er wird nicht geändert, wenn Elemente erstellt oder gelöscht werden.
Ein Elementtyp hat die folgenden Attribute:
- UUID: Eine eindeutige Kennung eines Elementtyps und des Fremdschlüssels für die Typspalte der Tabelle "GDB_Item".
- ParentTypeID: Der übergeordnete Typ des Elementtyps.
Im Fall des abstrakten Feldtyps (der kein übergeordnetes Element aufweist), ist dies eine NULL-UUID.
- Name: Der Name eines Elementtyps, z. B. Feature-Class oder Bereichsdomäne.
- ObjectID: Die eindeutige Kennung für die Tabelle"GDB_ItemTypes".
GDB_ItemRelationships (Tabelle)
Nahezu alle Geodatabase-Elemente haben Beziehungen zu mindestens einem anderen Geodatabase-Element. Eine Standalone-Tabelle ist beispielsweise mit dem Stammordner einer Geodatabase verbunden, eine Domäne ist mit den Feature-Classes oder Tabellen verbunden, die diese für die Validierung benötigen, und Feature-Classes sind mit der Topologie verbunden, an der sie teilnehmen. Die Tabelle "GDB_ItemRelationships" wird verwendet, um diese Beziehungen zu verfolgen.
Elementbeziehungen haben die folgenden Attribute:
- UUID: Ein eindeutiger Bezeichner einer Elementbeziehung.
- Typ: Eine UUID, die den Typ der Beziehung darstellt; diese stimmt mit dem eindeutigen Bezeichner des Beziehungstyps des Elements überein.
- OriginID: Der eindeutige Bezeichner des Ursprungselements der Beziehung.
- DestinationID: Der eindeutige Bezeichner des Zielelements der Beziehung.
- Attribute: Ein XML-Dokument, das ausführliche Informationen zur Elementbeziehung enthält.
Viele Beziehungstypen schließen keine Attribute ein; sie werden nur in einigen Beziehungen zwischen Controller-Datasets und ihren gesteuerten Datasets verwendet.
- ObjectID: Eindeutige Kennung.
- Eigenschaften: Ein Ganzzahlwert, der mit Bitmasken verwendet werden kann, um mehrere boolesche Eigenschaften des Elements abzurufen. Momentan wird dieser Wert nur verwendet, um anzugeben, ob die Elemente in der Beziehung in ArcGIS Desktop sichtbar sind.
Sie würden wahrscheinlich nur auf die ersten fünf Attribute mit SQL zugreifen.
GDB_ItemRelationshipTypes (Tabelle)
Auf die gleiche Weise wie eine statische Sammlung von Elementtypen zum Klassifizieren von Elementen verwendet wird, wird eine statische Sammlung von Elementbeziehungstypen zur Klassifizierung von Elementbeziehungen verwendet. DatasetInFeatureDataset (durch das angegeben wird, dass eine Feature-Class, eine Beziehungsklasse oder ein Controller-Dataset innerhalb eines Feature-Datasets vorhanden ist) und DomainInDataset (durch das angegeben wird, dass ein Dataset eine Domäne zur Validierung auf Klassen- oder Subtype-Ebene verwendet) sind z. B. zwei Typen von Elementbeziehungen. Im Gegensatz zu Elementtypen haben Elementbeziehungstypen kein Hierarchiekonzept mit übergeordneten und untergeordneten Typen.
Elementbeziehungstypen haben die folgenden Attribute:
- UUID: Eine eindeutige Kennung eines Elementbeziehungstyps und des primären Schlüssels für die Typspalte der Elementbeziehungstabelle.
- Name: Der Name des Elementbeziehungstyps, z. B. DatasetInFolder.
- Vorwärts-Beschriftung: Eine Beschreibung der Beziehung aus dem Kontext des Ursprungselements.
- Rückwärts-Beschriftung: Eine Beschreibung der Beziehung aus dem Kontext des Zielelements.
- Ursprungselementtyp-ID: Die UUID des Elementtyps, der in Elementbeziehungen dieses Typs als Ursprungselement fungieren kann.
- Zielelementtyp-ID: Die UUID des Elementtyps, der in Elementbeziehungen dieses Typs als Zielelement fungieren kann.
- Is Containment: Gibt an, ob das Zielelement vorhanden sein kann, auch wenn das Ursprungselement gelöscht wird.
XML in Geodatabase-Systemtabellen
Wie in den vorherigen Abschnitten erwähnt, verwenden einige der Felder einen XML-Datentyp. In Geodatabases in IBM DB2, Microsoft SQL Server und PostgreSQL verwenden diese Spalten das native XML des Datenbankmanagementsystems und können daher mit XPath-Ausdrücken über SQL abgefragt werden.
In Geodatabases in Oracle und Informix verwenden die XML-Spalten ArcSDE-XML, das Informationen als BLOBs in einer Reihe von separaten Tabellen speichert. Auf diese kann direkt mit SQL zugegriffen werden.
Damit Sie die Inhalte der XML-Spalten in den Systemtabellen in Geodatabases in Oracle anzeigen können, gibt es zwei Systemsichten, in denen die Inhalte aus den XML-Spalten der Geodatabase-Systemtabelle in einem CLOB-Datentyp gespeichert werden. "GDB_Items_vw" zeigt den Inhalt der Spalten "Definition", "Dokumentation" und "ItemInfo" in der Tabelle "GDB_Items" in CLOB-Spalten an. In "GDB_ItemRelationships_vw" wird der Inhalt der Spalte "Attribute" der Tabelle "GDB_ItemRelationships" in einer CLOB-Spalte angezeigt. Der Inhalt der CLOB-Spalten kann als Text gelesen werden.
Beim Abfragen dieser Sichten extrahieren Sie die Zeichenfolge aus der CLOB-Spalte, konvertieren Sie in den XML-Typ und führen eine XPath-Abfrage aus. Beachten Sie Folgendes: Wenn Sie versuchen, einen XML-Typ für eine Spalte zu erstellen, die eine leere Zeichenfolge enthält, schlägt der Vorgang fehl, und die Meldung Fehler beim Parsen von XML-Datei wird ausgegeben, da dies von Oracle nicht unterstützt wird.
Um die Inhalte der CLOB-Spalten abfragen zu können, müssen Sie den Oracle-Server so konfigurieren, dass SQL-Verbindungen unterstützt werden. Weitere Informationen finden Sie unter Konfigurieren von Oracle extproc für den Zugriff auf die Geodatabase mit SQL.
Wie GDB_-Tabellen miteinander in Beziehung stehen
Die beste Möglichkeit, zu erfahren, wie Systemtabellen zusammenarbeiten, die Geodatabase-Funktionen nachverfolgen, besteht darin, sie mit SQL zu untersuchen. ### Wenn Sie alle Zeilen und Spalten der Tabelle "GDB_Items" auswählen, wird in etwa folgender Ergebnissatz (zusammen mit vielen anderen Feldern) zurückgegeben:
Beachten Sie, dass die Werte in der Spalte "Typ" als UUIDs gespeichert werden. Diese UUIDs lassen sich mithilfe der Tabelle "GDB_ItemTypes" auflösen, wie es im folgenden Diagramm dargestellt ist.
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;
Dies gibt ein ähnliches Ergebnis zurück wie eine einfache SELECT-Anweisung, die für die Tabelle "GDB_Items" ausgeführt wurde, jedoch wurden die UUIDs in der Spalte "Typ" durch Klartextzeichenfolgen ersetzt.
Auf ähnliche Weise enthält die Tabelle "GDB_ItemRelationships" auch UUIDs, die Schlüsselwerte aus anderen Tabellen sind. Jede Beziehung enthält zwei der UUID-Werte, die in der Tabelle "GDB_Items" oben angezeigt wurden: einer für das Zielelement der Beziehung und einer für das Ursprungselement. Um diese in Klartextzeichenfolgen aufzulösen, müssen Sie die Tabelle "GDB_ItemRelationships" zweimal mit der Tabelle "GDB_Items" wie folgt verbinden:
--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;
Die folgende Abbildung ist ein Beispiel für einen Ergebnissatz, der von der vorhergehenden Abfrage zurückgegeben werden könnte:
Obwohl dies die Beziehungen zwischen Elementen in der Geodatabase anzeigt, wird der Beziehungstyp ebenfalls benötigt. Sie können die Typ-UUID auflösen, indem Sie die vorherige Abfrage wie folgt erweitern, um eine Verbindung mit der Tabelle "GDB_ItemRelationshipTypes" einzuschließen:
--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;
Daraufhin wird Folgendes zurückgegeben:
Gängige Abfragen für GDB_-Tabellen
Informationen zu gängigen Typen von SQL-Abfragen an Tabellen des Typs "GDB_" finden Sie in den folgenden Themen: