bofh: ortsverzeichniss, wie gehts am besten?

hallo,

ich brauche auf meiner seite einen katlog um bestimmte eintraege
einem ort zuweisen zu koennen - dh country, state und city.
jetzt hab ich mir was ueberlegt, weiss aber nicht welche version die
beste ist:

ich erstelle 3 tabellen (country, state, city) mit jeweils id, name
und id der uebergeordneten tabelle

oder:

ich erstelle eine tabelle (id, name, subcat_of, type ("country ||
state || city") ) in die ich alle daten eintrage und in der spalte
"subcat_of" auf die uebergeordnete region verweise und mit "type"
erfahre um was es sich handelt.
hierfuer habe ich woanders schonmal was geschrieben womit ich die
struktur abbilden kann, gibt dann sowas aus wie

germany->bayern->muenchen
                 nuernberg
         hamburg->hamburg
usw.

was wuerdet ihr empfehlen, und warum? vieeicht noch erwaehnenswert,
das ich noch keine daten habe und diese dann aus den benutzereingaben
auslesen und einfuegen muss sobald jemand einen eintrag macht.

  1. yo,

    wenn du keine zusätzlichen informationen zu country, state und city hast, kannst du die drei werte auch einfach in die tabelle eintraege als spalte hinzufügen. das spart dir neue tabellen zu erstellen und erfüllt den zweck.

    Ilja

  2. Hello,

    1. Schritt
         exemplarische Datensammlung erstellen

    2. Schritt
         daraus "Datensätze" erkennen und definieren

    3. Schritt
         Untersuchung der Felder auf Wertigkeit
         ein einwertiges Feld kann zur gleichen Zeit nur einen Wert annehmen
         ein mehrwertiges Feld kann verschiedene Werte "sammeln"

    4. Schritt
         Auflösung der einwertigen Felder
         Wenn der Wert des Feldes vertikal gestreut stehen darf, also in mehreren
         Datensätzen derselben Tabelle (oder auch unterschiedlicher Tabellen)
         gleichzeitig auftreten darf, müssen die Feldwerte in eine eigene Tabelle
         ausgelagert werden, die dann direkt über ID der Wertetabelle angekoppelt werden kann
         (N:1 oder 1:N -Beziehung)

    5. Schritt
         Auflösung der mehrwertigen Felder
         Alle auftretende Werte erhalten einen eigenen Datensatz in einer Wertetabelle
         Um die Verknüpfung zwischen Stammtabelle und Wertetabelle herstellen zu können,
         benötigt man eine zusätzliche "Brückentabelle", die die IDs der beiden jeweils
         betroffenen Datensätze der Stammtabelle und der Wertetabelle verknüpft.
        (N:M-Bezeihung)

    Harzliche Grüße vom Berg
    esst mehr http://www.harte-harzer.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. yo,

      Wenn der Wert des Feldes vertikal gestreut stehen darf, also in mehreren
           Datensätzen derselben Tabelle (oder auch unterschiedlicher Tabellen)
           gleichzeitig auftreten darf, müssen die Feldwerte in eine eigene Tabelle
           ausgelagert werden, die dann direkt über ID der Wertetabelle angekoppelt werden kann
           (N:1 oder 1:N -Beziehung)

      mit verlaub Tom, aber das hat meiner meinung nach nichts mit guten daten-design zu tun. wer hat dir den so etwas beigebracht ? ein tipp, normalisierung hat nichts mit spezifischen inhalten zu tun. wäre dies der fall, könnte man ja niemals normalisieren, ohne konkrete datensätze zu besitzen. es ist ein aberglaube, dass sich felder mit gleichen inhalt in einer datenbank nicht wiederholen dürfen.

      Ilja

      1. Hello,

        es ist ein aberglaube, dass sich felder mit gleichen inhalt in einer datenbank nicht wiederholen dürfen.

        Hab ich auch nicht behauptet.
        Wenn ich aber jetzt die Ortsbezeichnung internationalisiern will, und muss dies dann an tausenden von Stellen tun, dann wäre doch die veränderung des Übersetzungswertes unter einem Schlüssel viel einfacher, oder?

        Die Entity "Ort" taucht dann nur an einer einzigen Stelle auf.

        Harzliche Grüße vom Berg
        esst mehr http://www.harte-harzer.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. yo,

          Hab ich auch nicht behauptet.

          du spricht in punkt 4 aber von werten und das macht meiner meinung nach keinen sinn. normaliserung wird nicht über werte erreicht, sondern über abhängigkeiten. so wäre es zum beispiel fatal, wenn ich bei den nachnamen einer address-datei alle doppelten nachnamen wie müller oder meier in eine andere tabelle auslagern würde. sie sind zwar mehrfach vorhanden, aber nicht abhängig voneinander. heiratet der eine müller und wird zu schmidt, ändenr sich ja deswegen nicht alle anderen müller's nicht automatisch mit.

          beim ort sieht es wieder anderes aus. dort besteht eben eine abhängigkeit und dan macht es auch sinn, diese auszulagern.

          Ilja

          1. Hello,

            beim ort sieht es wieder anderes aus. dort besteht eben eine abhängigkeit und dan macht es auch sinn, diese auszulagern.

            *ack*

            Harzliche Grüße vom Berg
            esst mehr http://www.harte-harzer.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
  3. hallo,

    kommt auf die Anwendung an. Wenn "city" tatsächlich nur einen Elter (was ist die Einzahl von Eltern?) hat, finde ich Lösung 2 vernünftig.

    tabelle (id, name, subcat_of, type ("country || state || city") )

    "city" könnte ja auch mehrere Eltern haben:

    Politisch:
    germany>hessen>bensheim
    germany>hessen>regierungsbezirk>kreis_bergstrasse>bensheim

    Weinlage:
    germany>hessische_bergstrasse>bensheim

    Touristisch:
    germany>odenwald>bensheim

    LG Kalle

    1. Hallo.

      (was ist die Einzahl von Eltern?)

      "Eltern" ist wie "Leute" ein Pluraletantum, also ein Substantiv, das nur im Plural existiert. Lediglich die Genetik benötigt die Einzahl und bildet sie in Form von "Elter". In der Graphentheorie findet sich "Elter" als Synonym für den etwas komplexen Begriff "unmittelbar übergeordneter Knoten", ist also nur der Faulheit der Anwender geschuldet.
      MfG, at