[opengeodb] DB-Versionen, geodb_hierarchies, geodb_type_names und Ungereimtheiten

Sascha Mantscheff 922492 at gmx.de
Don Jan 10 09:52:49 CET 2008


Besten Dank.

Martin Trautmann schrieb:
> Sascha Mantscheff wrote:
>   
>> Da ich gerade erst anfange, mich mit dieser DB zu beschäftigen, stosse 
>> ich auf einige Unklarheiten. Ich bitte, dumme Fragen zu entschuldigen, 
>> aber trotzdem zu beantworten.
>>
>> An DB-Versionen liegen mir vor eine Fassung von sourceforge 
>> (opengeodb-0.2.5a-UTF8-sql, "SF") und eine Fassung des ADFC (D.sql, "ADFC").
>>
>> "ADFC" scheint vollständiger und umfangreicher. Hier fehlen jedoch die 
>> Inhalte der Tabellen hierarchies und type_names.
>>     
>
> hierarchies sind derzeit nicht mehr enthalten, weil IMHO nicht 
> erforderlich und aufwändig zu pflegen.
>
> Ich vermisse hier aber noch immer einen SQL-Ansatz, wie diese 
> automatisch abgeleitet werden könnten.
>   
Dazu wären die Skripte bzw. das Verfahren hilfreich, nach dem die von 
Dir genannte Hiearchietabelle erzeugt wurde.

> Daher habe ich für den Dump auch mal eingerichtet, dass die hiearchies 
> neu erstellt werden und habe
> http://fa-technik.adfc.de/code/opengeodb/Dhier.sql usw.
> erzeugt. Bisher habe ich aber keine Rückmeldung, ob das irgendwie 
> brauchbar ist.
>   
Was heisst usw.? Gibt es da noch mehr? - Im übrigen ist natürlich 
richtig, dass der Grunddatenbestand keine abgeleiteten Daten enthalten 
sollte.
>> "SF" enthält type_names mit Inhalten und die Tabellenstruktur für 
>> hierarchies, jedoch keine Werte dafür. type_names ist unvollständig 
>> (d.h. es fehlen Werte, die in im Feld loc_type vorkommen).
>>     
>
> Mit genauen Angaben lässt sich korrigieren, was so unklar im Raum steht.
>   
Es fehlen die type_names:
+-----------+
| loc_type  |
+-----------+
| 100900000 |
| 610000000 |
| 500100000 |
+-----------+

Gefunden mit:
select distinct (loc_type) from geodb_locations l left join 
geodb_type_names t on l.loc_type=t.type_id where t.type_id is null
union
select distinct (coord_type) from geodb_coordinates c left join 
geodb_type_names t on c.coord_type=t.type_id where t.type_id is null
union
select distinct (float_type) from geodb_floatdata f left join 
geodb_type_names t on f.float_type=t.type_id where t.type_id is null
union
select distinct (int_type) from geodb_intdata f left join 
geodb_type_names t on f.int_type=t.type_id where t.type_id is null
union
select distinct (text_type) from geodb_textdata f left join 
geodb_type_names t on f.text_type=t.type_id where t.type_id is null

>> > 3) In der sourceforge-Fassung werden die Tabellen zwar vom Typ InnoDB 
>> > deklariert, es werden jedoch keine foreign keys deklariert, die solche 
>> > Fehler wie fehlende Typnamen vermeiden helfen würden. Was ist die 
>> > Überlegung dahinter?
>>     
>
> Das sollten SQL-Experten beantworten, ich selbst brauche das nicht.
>   
Es würde zwar bei Inserts und Updates die Performance beeinträchtigen, 
aber die Datenintegrität erhöhen. Wo immer es möglich ist, empfehle ich, 
Relationen zwischen Tabellen mit Foreign-Key-Constraints abzusichern.
>   
>> > Im übrigen werde ich meine DB, wenn die genannten Mängel korrigiert 
>> > sind, gerne zur Verfügung stellen. Gibt es dafür ein Procedere?
>>     
>
> Wenn du Daten bereitstellen kannst, solltest du sie z.B. auf fa-technik 
> wieder einspielen.
>
> Wenn du Änderungen an der Datenstruktur hast, solltest du sie hier 
> diskutieren.
>   
Neben der oben empfohlenen Einführung von Foreign Keys schlage ich vor, 
alle Feldbezeichnungen so zu vereinheitlichen, dass Referenzen auf 
identische Felder identische Namen haben. Zur Zeit gibt es (siehe 
Union-Abfrage oben) diverse Felder namens ..._type, die alle dasselbe 
meinen, nämlich eine Referenz auf die Tabelle type_names.

Im übrigen verstehe ich zwar einerseits die Anlage der Wertetabellen für 
atomare Typen wie float, int, text und die Flexibilität, die damit 
erzielt wird. Andererseits kommt mir die Struktur, die offenbar bis etwa 
2005 gepflegt wurde, wesentlich einleuchtender vor. Die künstliche 
Trennung von Primärschlüssel (loc_id) und Attributen und deren 
Aufspaltung in typorientierte Tabellen kommt mir unter den Aspekten der 
Datenpflege und der Programmierung eher kontraproduktiv vor. Was war 
denn ausschlaggebend für diese Umstrukturierung?

Gruss
s.m.