[PostNAS] PotNAS 0.8 - Datenbank-Schema

a.borgardt at landkreis-cuxhaven.de a.borgardt at landkreis-cuxhaven.de
Do Sep 11 02:28:41 PDT 2014


Moin Frank,

biete gerne Unterstüzung zum Testen an, bin aber erst nächste Woche mit neuer Testumgebung am Start. Super Job...

Andreas

--
Dipl.-Geol. Andreas Borgardt
Landkreis Cuxhaven
06 - GIS-Service

Tel.: (0 47 21) 66 23 68
Mail: a.borgardt at landkreis-cuxhaven.de
Internet: www.landkreis-cuxhaven.de
--  

> -----Original Message-----
> From: Jäger, Frank (KRZ) [mailto:F.Jaeger at KRZ.DE] 
> Sent: Wednesday, September 10, 2014 3:45 PM
> To: Mailingliste (nas at lists.osgeo.org)
> Subject: [PostNAS] PotNAS 0.8 - Datenbank-Schema
> 
> Hallo PostNAS-Freunde,
> Astrid hat den bisherigen Stand in den Branch 0.7 kopiert [1].
> Somit konnte ich meine Arbeiten der letzten zwei Wochen in 
> den Trunk hochladen [2].
> Der SVN-Zweig "Version-0.8" wird noch gelöscht. Die nun 
> aktuelle Version 0.8 wird im Trunk weiter geführt.
> 
> 
> *** Das PostgreSQL/PostGIS-Datenbank-Schema für PostNAS 
> Version 0.8 ***
> 
> Die wichtigste Änderung von Version 0.7 auf 0.8 betrifft die 
> Beziehungen (Relationen) zwischen den Objekten. Bisher wurde 
> dazu eine eigene Tabelle geführt, die "alkis_beziehungen". 
> Diese war für fast alle Relationen zuständig, Ausnahmen davon 
> waren reine Schlüsseltabellen z.B. die Verbindung von Lage 
> (Hausnummer) zu Lagebezeichnung-Katalogeintrag 
> (Straßentabelle). Das Zwischenschalten diese 
> Beziehungen-Tabelle zwischen jeweils zwei Objekt-Tabellen 
> machte die Views unnötig lang.
> Das Aktualisieren der Beziehungen-Tabelle beim Konvertieren 
> von Differenzdaten aus dem NBA-Verfahren (Delete, Update, 
> Replace) war kompliziert.
> 
> Diese Tabelle "alkis_beziehungen" wird nun ersetzt durch 
> Relationen-Spalten direkt in den Objekt-Tabellen. Diese 
> Änderung ist so durchschlagend, dass alle Teile des Projektes 
> gleichzeitig umgestellt werden müssen. Auswerteprogramme der 
> Version 0.7 funktionieren nicht mit einer Datenbank der 
> Version 0.8 und umgekehrt.
> Da also sowieso eine komplette Überarbeitung notwendig war, 
> habe ich noch einige weitere Verbesserungen eingearbeitet. 
> Die Schema-Version von NorBIT (QGIS) und der 
> ALKIS-Objektartenkatalog wurden mit in diese Überarbeitung einbezogen.
> 
> Rückschau zum Verständnis: Das ursprüngliche Schema wurde zu 
> Beginn des Projektes PostNAS ganz pragmatisch erzeugt, indem 
> man PostNAS (ogr2ogr) eine NAS-Datei in eine leere Datenbank 
> konvertieren ließ. Wenn eine Zieltabelle noch nicht vorhanden 
> ist, dann legt ogr2ogr diese Tabelle selbst an. Die 
> Eingabe-Daten werden dazu analysiert.
> Beim NAS-Datenformat ist dies aber für den dauerhaften 
> produktiven Einsatz keine brauchbare Lösung. Die NAS-Dateien 
> können lokal unterschiedliche Inhalte haben, so dass dann 
> jede von PostNAS selbst erzeugte Datenbank anders aussieht. 
> Auch ist die Abgabe eines Gebietes mit dem NBA-Verfahren auf 
> mehrere Dateien aufgeteilt. Die erste Datei (Randlage) würde 
> die Datenstruktur festlegen. Auf dieser Basis kann man 
> schlecht Programme machen.
> Daher wurde aus verschiedenen Konvertierungen und unter 
> Einbeziehung der Dokumentation manuell und iterativ das 
> aktuelle Datenbank-Schema 0.7 entwickelt. Kommentare und 
> Indices wurden hinzugefügt.
> 
> Aus dem ursprünglichen, von PostNAS selbst erzeugten Schema, 
> waren bis zur Version 0.7 immer noch einige "Relikte" enthalten:
>   1. Die Sortierung nach Tabellen-Namen
>   2. Datenspalten, in denen nur numerische Inhalte gefunden 
> wurden, wurden von PostNAS als Integer-Werte angelegt.
> 
> - Zu 1. Sortierung:
> In der Version 0.7 war begonnen worden, die Tabellen 
> innerhalb der Schema-SQL-Datei nach Objektbereich und 
> Objektartengruppe zu ordnen. Dies war aber nicht fertig 
> geworden. Ich habe dieses nun zu Ende geführt: Die Version 
> 0.8 ist nun komplett nach dem ALKIS-Objektartenkatalog 
> sortiert und gegliedert. Dies ist aber nur rein formal und 
> hat keinen Einfluss auf die daraus generierte Datenbank.
> Beim Abgleich mit dem ALKIS-Objektartenkatalog wurden auch 
> die Beschreibungen der Objektarten in die Kommentare der 
> Tabellen übernommen.
> Der Kommentar zur Tabelle ist nun einheitlich so aufgebaut:  
> '[Objektartengruppe]: ([N]REO|ZUSO) "Objektname" ist [Beschreibung]'.
> Die Kommentare zu Spalten sind (noch) nicht vollständig.
> 
> - Zu 2. Numerische Spalten
> Ein Teil dieser Felder war in der Version von NorBIT von 
> "Integer" nach "Character Varying" geändert worden. Um die 
> beiden Versionen anzugleichen wurde das übernommen.
> Der Abgleich mit dem Objektartenkatalog zeigte weitere 
> Felder, die dort als "Character" (Zeichenkette) dokumentiert 
> sind, die aber im Datenbank-Schema bisher als Integer 
> definiert sind. Diese Felder wurden ebenfalls geändert - wenn 
> nicht jetzt, wann dann.
> Betroffen sind hauptsächlich die Schlüsselfelder von Land, 
> Regierungsbezirk, Kreis, Gemeinde usw. in Tabellen zum Thema 
> Flurstück, Flurstückshistorie und Lagebezeichnung.
> Integer macht da keinen Sinn, weil niemand aus einem 
> Gemeindeschlüssel etwas berechnen will. Andererseits gehen im 
> Integer-Format möglicherweise führende Nullen verloren, die 
> in einem Character-String beibehalten werden.
> Auf die Views und Programme hatte diese Änderung erstaunlich 
> wenig Auswirkungen. Da die Änderung in allen Tabellen 
> gleichartig stattfindet ist ein JOIN weiterhin gültig, z.B.:
>     SELECT ... 
>     FROM ax_lagebezeichnungmithausnummer l  
>     JOIN ax_gemeinde g ON l.kreis=g.kreis AND 
> l.gemeinde=g.gemeinde  ... ; Die Spalten "kreis" und 
> "gemeinde" wurden auf beiden Seiten gleichartig von Integer 
> auch Character geändert, daher ändert sich der View nicht.
> 
> In den Programmen für Mapbender-Navigation und Buchauskunft 
> kann der Gemeindeschlüssel per Konfiguration als 
> Filterkriterium verwendet werden. Hier muss der 
> Konfigurationswert nun in Hochkomma gesetzt werden:      ...  
> WHERE gemeinde = '99';
> Beachten sie dies, wenn sie Views verwenden, die 
> Regionalschlüssel mit eigenen Werten filtern.
> 
> Der Wegfall von "alkis_beziehungen" im Datenbank-Schema 
> machte eine Überarbeitung fast aller Komponenten notwendig: 
> Views, Navigation (Mapbender) und Buchauskunft.
> Die "Joins", die den Beziehungen der Objekte folgen, mussten 
> angepasst werden. Aktueller Status: Stabil aber noch nicht 
> komplett ausgetestet. 
> 
> Im Datenbank-Schema von Norbit waren *alle* ALKIS-Beziehungen 
> als Spalten in den Objekttabellen angelegt worden, auch die 
> sogenannte "inverse Relationsrichtung", also Rückverweise. In 
> der Praxis werden diese Spalten von PostNAS (noch) nicht gefüllt.
> Ich habe diese leeren inversen Relationen und ihre Indices 
> daher im Schema auskommentiert. Sie sind nicht benutzbar und 
> verwirren daher. Wenn sie gefüllt wären, wären sie redundant.
> 
> Einige der Relationen-Spalten sind Arrays, die gleich auf 
> mehrere gml_id's einer anderen Tabelle verweisen. Dies ist 
> nicht optimal.
> Die angepasste Version des Post-Prozessing (Nachverarbeitung 
> nach dem Konvertieren) braucht für das Füllen der Tabelle 
> "pp_flurstueck_nr" nun mehrere Minuten statt etwa 20 Sek. wie 
> bisher. Die Ursache vermute ich darin, dass die Relation 
> "ap_pto > dientZurDarstellungVon > ax_flurstueck" nun ein 
> Array ist, dass mit der Function ANY() gejoint werden muss. 
> Vielleicht ist das aber nur ein Problem meiner veralteten 
> Datenbank-Version.
> 
> Eine weitere "durchschlagende" Anpassung betrifft die Länge 
> des Haupt-Schlüssels "gml_id" in allen Tabellen.
> In der bisherigen Version 0.7 war die Länge auf 16 Zeichen 
> beschränkt. Diese 16 Zeichen enthalten die einheitliche 
> Kennung des Objektes in einem Bestand ohne Historie ("es kann 
> nur einen geben").
> 
> In der Norbit-Version ist die Länge nicht limitiert. Bei 
> Aktualisierungen entstehen so Objekte, die nach der 
> Objekt-Kennung noch einen Zeitstempel der Entstehung 
> enthalten. Diese längere Version der "gml_id" ist dann der 
> Objektschlüssel. Für Sekundär-Bestände mit Historie mag dies 
> nützlich sein. Vielleicht ist das sogar für den historischen 
> Trigger unentbehrlich. In meinem Bestreben, zu einem 
> einheitlichen Datenbank-Schema zu kommen, habe ich diese 
> Anpassung also übernommen.
> 
> Heute habe ich allerdings bemerkt, dass die Objekt-Verweise 
> aus den Relationen-Spalten den angehängten Zeitstempel nicht 
> enthalten. Die üblichen Equivalenzen können also nicht mehr 
> verwendet werden.
> Beispiel: Die Relation "ax_flurstueck >IstGebucht> 
> ax_buchungsstelle" lautete bisher in SQL:  ".. ON 
> flurstueck.istgebucht = ax_buchungsstelle.gml_id"
> Da "istgebucht" immer nur die kurze ID enthält, aber die 
> gml_id nun auch verlängerte IDs enthalten kann, muss nun bei 
> allen Relationen generell eine Substring-Function verwendet 
> werden: ".. ON flurstueck.istgebucht = 
> substring(ax_buchungsstelle.gml_id,1,16)".
> Diese Änderung an den Programmen habe ich begonnen, ist aber 
> noch nicht vollständig.
> 
> Um die Buchauskunft evtl. auch mal auf einer Datenbank "mit 
> Historie" einsetzen zu können, habe ich nun vermehrt "endet 
> IS NULL" in die Where-Klauseln der Abfragen eingebaut. Auch 
> dies ist noch nicht durchgängig und bisher ungetestet. Ich 
> habe keinen Datenbestand mit Historie.
> 
> Wenn die beschriebenen Anpassungen durchgängig realisiert 
> wurden, werden die Programme für Buchauskunft und Navigation 
> flexibler sein. Sie sind dann in Datenbanken mit und ohne 
> Historie und mit kurzen oder langen gml_id's einsetzbar.
> Die 0.7er-Versionen funktionierten nur mit 16-Zeichen-gml_id 
> und ohne beendete Objekte.
> 
> Den aktuellen Zwischen-Stand habe ich vor 2 Stunden hoch geladen: [3]
> 
> Ich bitte um Unterstützung beim Testen der Version 0.8.
> 
> Links:
> 
> [1] http://trac.wheregroup.com/PostNAS/browser/branches/0.7 
> 
> [2] http://trac.wheregroup.com/PostNAS/browser/trunk 
> 
> [3] http://trac.wheregroup.com/PostNAS/changeset/330 
> 
> 
> Mit freundlichen Grüßen
> Frank Jäger
> 
> Kommunales Rechenzentrum
> Minden-Ravensberg/Lippe
> Tel.: 05261 / 252 - 185
> 
> mailto:f.jaeger at krz.de
> http://www.krz.de/
> 


More information about the NAS mailing list