Datenbankabfragerelation

Die Datenbankabfragerelation ist eine benannte Tabelle, die eine datenbankspezifische Abfrage enthält, und keinen Verweis auf eine vorhandene Datenbankrelation oder -ansicht. Die Abfrage ist in der SQL-Syntax der Datenbank geschrieben und sollte verwendet werden, wenn eine Abfrage nicht als MISQL-Abfrage angegeben werden kann (z. B. wenn Sie Unterabfragen, äußere Joins usw. verwenden müssen) oder wenn eine bessere Leistung als bei einer benannte Ansichtstabelle erzielt werden kann. Beachten Sie bei der Verwendung einer Datenbankabfragerelation Folgendes:

  • Wenn die Struktur der Relationen oder Ansichten, auf die in der Abfrage verwiesen wird, aktualisiert wird, setzen Sie das Attribut volatile auf „true“. Dies wirkt sich auf die Leistung aus, da für jede Anforderung Relationsmetadaten neu erstellt werden.

  • Eine benannte Tabelle, die auf einer Datenbankabfrage basiert, unterstützt keine Einfüge-, Aktualisierungs- oder Löschvorgänge.
  • Unterstützte Datenbanken umfassen Oracle, SQL Server und PostGIS.
  • Wenn eine Abfrage eine Geometrie zurückgibt, muss die Geometriespalte im Element DBDataSourceMetadata definiert werden.
  • Wenn eine Abfrage einen Primärschlüssel zurückgibt, muss die Geometriespalte im Element KeyAttributes definiert werden.

Die Datenbankabfragerelation ähnelt einer Ansichtsrelation. Es gibt jedoch Bedingungen, in denen eine der anderen vorgezogen wird. Weitere Informationen finden Sie unter Ansichtsrelation. In den folgenden Tabellen sind die wichtigsten Unterschiede zwischen den beiden aufgeführt:

Tabelle 1. Vergleichen der Datenbankabfragerelation mit Ansichtsrelation
Ansichtsrelation Datenbankabfragerelation

Verwendet eine MISQL-Abfrage.

Verwendet eine datenbankspezifische Abfrage, die einer in der Datenbank erstellten Ansicht entspricht.
Die Join-Abfrage unterstützt benannte Tabellen aus verschiedenen Datenquellen. Die Join-Abfrage muss auf Relationen und Ansichten in derselben Datenbank verweisen.
Delegiert die Operatoren abhängig vom Datenanbieter. Delegiert nur die Operatoren Attributvergleich und EnvelopeIntersects
Unterstützt keine geschachtelten SQL-Abfragen. Unterstützt verschachtelte und datenbankspezifische SQL-Abfragen.

Delegierungsregeln

Die Operatoren Attributvergleich und EnvelopesIntersect werden an die Datenbank delegiert.

Beispiel

Dies ist ein Beispiel für eine Datenbankabfragerelation.

<?xml version="1.0" encoding="UTF-8"?>
<NamedDataSourceDefinition xmlns="http://www.mapinfo.com/mxp" xmlns:gml="http://www.opengis.net/gml" version="MXP_NamedResource_1_5">
   <ConnectionSet>
      <NamedConnectionRef resourceID="/oracle_db_connection">
         <ConnectionName>connection1</ConnectionName>
      </NamedConnectionRef>
   </ConnectionSet>
   <DataSourceDefinitionSet>
      <DBDataSourceDefinition id="id1" readOnly="false" volatile="false">
         <DataSourceName>WORLD</DataSourceName>
         <ConnectionMember>
            <ConnectionName>connection1</ConnectionName>
         </ConnectionMember>
         <DBQuery>
            <Query>Select MI_Prinx, GEOM, Country, Capital from World where Country in('Canada','India')</Query>
         </DBQuery>
         <DBDataSourceMetadata>
            <FeatureGeometryAttribute srsName="epsg:4326">GEOM</FeatureGeometryAttribute>
            <KeyAttributes>
               <AttributeName>MI_Prinx</AttributeName>      
            </KeyAttributes>
         </DBDataSourceMetadata>
      </DBDataSourceDefinition>
   </DataSourceDefinitionSet>
   <DataSourceRef ref="id1" />
</NamedDataSourceDefinition>