[opengeodb] nur deutschland
Lucas Mengel
froschpopo at gmx.de
Mit Mar 19 10:18:56 CET 2008
Ja Okay, das verstehe ich.
Aber es wäre trotzdem cool, wenn hierarchies dann gefüllt
ausgeliefert wird. Weil ich habe echt keine Ahnung, wie ich
diese selber füllen muss um z.B. alle deutschen
Postleitzahlen auszugeben.
Die Antwort "dann musst du alle Ebenen durchlaufen" bringt
mir herzlich wenig.
Stephan S schrieb:
>> So sehe ich das auch!
>> Ich habe auch nie verstanden, warum es diese text_type
>> überhaupt gibt. Man könnte geenauso gut tabellen machen,
>> dann würde man das wenigstens noch verstehen! und pflegen
>> kann man das genauso gut!
>
> Nein, der Vorzug der aktuellen Struktur ist, dass die Erfassung weiterer
> Datentypen durch hinzufügen eines text_types möglich ist, ohne die
> Datenbank-Struktur zu ändern.
>
> Füge in deinem Modell beispielsweise die Erfassung der Geburtenrate pro
> Jahr hinzu und du siehst was ich meine. Die jetzige Struktur ist bereits
> ausreichend, um die Information aufzunehmen, es genügt ein Eintrag in
> der Tabelle geodb_type_names und man kann loslegen die Daten zu erfassen.
>
>> Ich würde auch schon damit anfangen und das Ergebnis hier
>> publizieren, wenn ich denn das aktuelle Modell verstehen
>> würde!!!
>
> Das ist im Prinzip ganz einfach: Alle Daten sind zentral über die loc_id
> verknüpft, der Wert von text_type (in Tabelle geodb_textdata) beschreibt
> als Fremdschlüssel der Tabelle geodb_type_names die Bedeutung des Wertes.
>
> So erhälst Du mit der Abfrage
>
> SELECT gtn.name, gt.text_val
> FROM geodb_textdata AS gt
> LEFT JOIN geodb_type_names AS gtn ON gt.text_type = gtn.type_id
> WHERE loc_id = 21855
>
> alle Informationen zu Oberammergau, die als Text interpretiert werden
> sollten. Analog dazu liefert
>
> SELECT gtn.name, gi.int_val
> FROM geodb_intdata AS gi
> LEFT JOIN geodb_type_names AS gtn ON gi.int_type = gtn.type_id
> WHERE loc_id = 21855
>
> alle Informationen, die als Integer-Wert interpretiert werden sollten,
> in diesem Fall die Einwohnerzahl. Das ganze kannst Du noch mit
> geodb_coordinates und geodb_floatdata machen und hast alle Informationen
> die in der Datenbank zur loc_id von Oberammergau vorhanden sind.
>
> Dabei solltest Du noch wissen, von welchem Typ der Eintrag in der
> geodb_locations ist.
>
> SELECT gtn.type_id, gtn.name, COUNT(*) AS amount
> FROM geodb_locations AS gl
> LEFT JOIN geodb_type_names AS gtn ON gl.loc_type = gtn.type_id
> GROUP BY gl.loc_type
>
> liefert dir eine Übersicht über die vorhandenen Location-Typen.
> Oberammergau ist eine "politische Gliederung"
>
> Über entsprechende Joins kannst Du dir die Daten für deine Zwecke
> aufbereiten. Willst Du zum Beispiel eine Tabelle mit Landkreisen
> erstellen, erstellst du dir eine Tabelle (geodb_landkreise) und einem
> Feld für den Landkreisnamen (lkrs_name) und führst die folgende Query
> aus:
>
> INSERT INTO geodb_landkreise (lkrs_name)
> SELECT lkrs_name.text_val
> FROM geodb_locations AS gl
> LEFT JOIN geodb_textdata AS lkrs_name ON gl.loc_id = lkrs_name.loc_id
> WHERE gl.loc_type =100500000 /* ID für Landkreis */
> AND lkrs_name.text_type =500100000 /* ID für Name */
>
> Damit hast Du alle Landkreisnamen eingefügt. Möchtest Du weitere
> Informationen zum Landkreis hinzufügen, musst Du eben weitere Joins auf
> die geodb_textdata mit dem passenden text_type durchführen.
> Z.B. KFZ-Kennzeichen, type_id bzw.text_type 500500000:
>
> INSERT INTO geodb_landkreise (lkrs_name, lkrs_kfz)
> SELECT lkrs_name.text_val AS landkreis, kfz_name.text_val AS kfz
> FROM geodb_locations AS gl
> LEFT JOIN geodb_textdata AS lkrs_name ON gl.loc_id = lkrs_name.loc_id
> LEFT JOIN geodb_textdata AS kfz_name ON gl.loc_id = kfz_name.loc_id
> WHERE gl.loc_type =100500000 /* ID für Landkreis */
> AND lkrs_name.text_type =500100000 /* ID für Name */
> AND kfz_name.text_type =500500000 /* ID für KFZ-Kennzeichen */
>
> Analog funktioniert das auch mit den anderen Tabellen für Koordinaten, int
> und float Werte.
>
> Mit diesen Informationen solltest du dir nun deine eigene Datenbank mit
> einem dir passenden Schema zusammenbauen können.
>
> Gruß
> Stephan
>