Eddie: DB-Entwurfsmuster (Pattern) gesucht: eine Art Weiche

Hallo allerseits,

folgenden Fall habe ich oefter:
die Elemente einer Tabelle verhalten sich im Grunde alle gleich, in einem kleinen Punkt unterscheiden sie sich jedoch elementar.

Ein Beispiel ist ein Ort in einer Landkarte: egal was fuer ein Ort, er hat immer zig Attribute, und braucht auch alle davon (z.B. den Längengrad). Nur in einem Punkt unterscheiden sie sich: sie sind entweder ein Punkt (mit x-y-Pixel-Koordinaten) oder sie sind eine Fläche (mit einem Polygon als Umriss).

Die Frage ist, wie ich diese Daten darstellen kann? Denn im Grunde benötige ich eine Art Weiche!

Bisher mache ich das mit einem zusätzlichen Attribut
   placeType ENUM ('point', 'area') NOT NULL
und zwei Fremdschlüsseln
   fk_pointData
   fk_areaData

Mit PHP müsste ich dann eine entsprechende Fallunterscheidung machen und die passende Tabelle auslesen.

Jetzt die Frage: geht das nicht irgendwie einfacher? Und eleganter?

Danke für eure Hilfe,
Eddie

--
Old men and far travforelers may lie with authority.
  1. echo $begrüßung;

    [...] ein Ort in einer Landkarte: [...] sie sind entweder ein Punkt (mit x-y-Pixel-Koordinaten) oder sie sind eine Fläche (mit einem Polygon als Umriss).
    Mit PHP müsste ich dann eine entsprechende Fallunterscheidung machen und die passende Tabelle auslesen.

    Mein Vorschlag: Verknüpfen der Orte-Tabelle mit sowohl der PointData als auch der AreaData-Tabelle über jeweils einen LEFT JOIN. Wenn die PointData-Felder NULL enthalten gab es keine solchen, analog dazu verhalten sich die AreaData-Felder. Sind beide NULL gab es weder noch, sind beide nicht NULL gab es beide Informationen.

    echo "$verabschiedung $name";

  2. Jetzt die Frage: geht das nicht irgendwie einfacher? Und eleganter?

    Das ist die Frage, die wir uns immer wieder stellen.   ;)

    Wenn Wir Dich richtig verstanden haben, hast Du Tabellen mit Datenfeldern, die Inhalte unterschiedlichen Datentyps haben können.

    Wenn das der Fall ist, haben wir wohl kein Attribut der Entität, sondern einen Verweis auf eine andere Entität.

    Wenn ich Dich richtig verstanden habe, bildest Du die neuen Entitäten auch korrekt mit neuen Tabellen nach.

    Es ist also "alles im Grünen", "alles senkrecht" und so. Beschäftige Dich mal ein wenig mehr mit den Grundlagen des Datendesigns.

  3. Hallo ihr beiden,

    ok, perfekt, wie von dedlfix vorgeschlagen, habe ich es jetzt umgesetzt. Das Attribut "placeType" habe ich komplett weggelassen, die Deutung ueberlasse ich dann dem LEFT JOIN.

    Und King^Lully:

    Beschäftige Dich mal ein wenig mehr mit den Grundlagen des Datendesigns.

    Naja, da hatte ich sogar mal eine Vorlesung drueber, schon ein paar Jahre her und vor allem rein theoretisch. Wenn man das dann in der realen Welt umsetzen will, tun sich ungeahnte Fallstricke auf... Aber ich bleib dran, wird bestimmt auch noch die eine oder andere Frage kommen ;-)

    Eddie

    --
    Old men and far travforelers may lie with authority.