Natürliche Schlüssel oder auch sprechende Schlüssel sind Schlüssel, die auf natürliche Weise vorhanden sind. Ein solcher Schlüssel besitzt also auch in der realen Welt eine Bedeutung, wie z. B. die Punktnummer bei Punkten.
Normalerweise arbeitet GEOgraf in der Verknüpfung zwischen Grafikelementen und Datenbankeinträgen ohne natürliche Schlüssel, sogenannten Surrogatschlüsseln.
Wenn Sie Sachdaten zum Beispiel dadurch erzeugen, dass Sie sie im GEOgraf zu Elementen eingeben, nutzt GEOgraf folgende Technik zur Verknüpfung zwischen Grafikelementen und Datenbankeinträgen:
In der Tabelle GGTypen werden die Verknüpfungen zwischen Tabellen und GEOgraf-Arten gespeichert. Die Verknüpfung der individuellen Elemente zu einem Datensatz in der jeweiligen Tabelle finden Sie in der Tabelle GGRelationen.
In diesem Beispiel ist ein Element mit der dezimalen GEOgraf-internen ID 16777221 mit dem Datensatz 14 in der Tabelle 1 (s. GGTypen.TabelleId) verknüpft. In GEOgraf finden Sie die gleiche interne ID in der Elementinfo.
Hier aber in der hexadezimalen Schreibweise.
Nun kann es sein, dass Sie extern erfasste Datensätze an GEOgraf-Elemente anhängen wollen. Zum Beispiel, wenn das Baumkataster schon jahrelang in einer Datenbank geführt wird, aber noch keine Verknüpfung zu der in GEOgraf geführten Stadttopografie existiert.
Jetzt könnten Sie von jedem Grafikelement die interne ID im GEOgraf ausfindig machen und in der Tabelle GGRelationen die entsprechende Zeile erzeugen.
Einfacher geht das mit einfacher zugänglichen GEOgraf-Attributen - wie der Punktnummer, wenn diese als natürlicher Schlüssel sich auch in der Tabelle tblBaumbestand wiederfindet:
Jetzt fehlt nur noch die Anmeldung in der Tabelle GGTypen, dass die Verknüpfung nicht in der Tabelle GGRelationen erfolgt, sondern in der referenzierten Tabelle selbst.
Dafür gibt es in GGTypen die 3 Spalten KeyName, KeyTyp und KeyLength...
...und schon findet GEOgraf die Sachdatensätze.
Als KeyTyp sind aktuell - wie in der Entwurfsansicht von GGTypen zu ersehen - folgende Werte zulässig:
0: externer Schlüssel
1: Punktnummer
2: externer Schlüssel: 0klein1gross
3: Replikations-ID (z.B. {99F1EDC7-D71F-4C58-8B64-1FD6C2EBFF01})
4: Objektname
Typ 2 unterscheidet sich dabei von Typ 0 dadurch, dass er die Groß-Klein-Schreibung eines Schlüssels berücksichtigt. Der externe Schlüssel "AprMai" muss dann in der Tabelle 1a0p0r1m0a0i kodiert werden.
Tabellen mit linien- und objektbezogenen Datensätzen können über externe Schlüssel und Replikations-ID direkt mit den GEOgraf-Elementen verknüpft werden.
Bei Objekten ist auch eine Verwendung der Objekthierarchie möglich.
Die Hierarchiesprünge müssen dann in der Datenbank ebenso wie im GEOgraf
in der Infozeile durch ein Pipezeichen "|" gekennzeichnet sein.
Sowohl die verknüpften Objekte als auch deren Oberobjekte müssen
eindeutige Namen zugewiesen haben!
Grundsätzlich muss die Schlüsselspalte die Eigenschaft "indiziert
(ohne Duplikate)" und als Format Text, Integer oder Long Integer
besitzen und in der Tabelle muss ein Primärschlüssel existieren.
Dieser Primärschlüssel sollte nicht mit dem natürlichen Schlüssel
zusammenfallen.
Die Erzeugung der Relationen kann gestört werden, wenn eine weitere Access-Datenbank auf dem entsprechenden Rechner läuft.
In der Spalte des natürliche Schlüssels darf jeder Wert nur einmal vorkommen. Dies wird durch die Eigenschaft "indiziert (ohne Duplikate)" gewährleistet.
Meldet Access beim Umstellen auf diese Einstellung, dass die Eindeutigkeit in den aktuellen Daten nicht gewährleistet ist, das heißt Dubletten exisiteren, muss man diese Dubletten identifizieren und von Hand beseitigen.
Am einfachsten erstellt man dazu zunächst einen neuen Abfrageentwurf und wechselt dann über den Menüeintrag 'SQL-Ansicht' aus dem Kontextmenü dort oder über das kleine 'SQL'-Symbol ganz unten am rechten Rand des Fensters zur direkten Eingabe von SQL-Befehlen. Mithilfe der Schaltfläche 'Ausführen' kann der eingegebene SQL-Befehl ausgeführt werden. Über das kleine 'SQL'-Symbol ganz unten am rechten Rand des Fensters kommt man von hier aus zurück zur dazugehörigen SQL-Abfrage.
Die Abfrage sollte schematisch wie folgt aussehen:
SELECT * FROM <Tabellenname> tab1, <Tabellenname> tab2 WHERE tab1.<nat. Schlüssel>=tab2.<nat. Schlüssel> AND tab1.<Primärschlüssel> <> tab2.<Primärschlüssel>
Ersetzen Sie dazu <Tabellenname>, <nat. Schlüssel> und <Primärschlüssel> durch die entsprechenden Werte.