Eddie: Kleines Modellierungsrätsel

Hallo allerseits,

ich bin etwas unsicher, wie ich die folgenden Daten am besten in meiner DB darstellen soll. Waer sehr nett, wenn ihr das als Dritte mal reflektieren koenntet:

Im Grunde moechte ich nur einen String abspeichern, von dem aber ein beliebiger, zusammenhaengender Teil (bspw. einige Worte) UNIQUE sein muss. Der String besteht darum aus drei Teilen, wobei dadurch der UNIQUE-Teil beliebig im Satz positioniert werden kann:
  teil_1 (mandatory)
  teil_2 (optional)
  teil_3 (optional)

Vielleicht sind folgende Beispiele hilfreich, der UNIQUE-Teil ist jeweils gross geschrieben:

DIESER SATZ DARF NUR EINMAL VORKOMMEN // Teile 2 und 3 sind leer
  Monotheistische Religionen haben NUR EINEN GOTT // Teil 3 ist leer
  Monotheistische Religionen haben NUR EINEN GOTT!!! // Teil 3 enthaelt die Ausrufezeichen

Dazu brauche ich natuerlich noch einen Primary Key, das koennte jetzt erstmal auch einfach nur der Unique-String sein.

Nur wie wuerdet ihr das Ganze speichern, und zwar moeglichst ohne Redundanz?

Danke für eure Hilfe,
Eddie

--
Old men and far travelers may lie with authority.
  1. yo,

    Nur wie wuerdet ihr das Ganze speichern, und zwar moeglichst ohne Redundanz?

    ohne redundanz fällt mir von datenbankseite her nur trigger ein, die aber viel kosten. ich würde eher eine spalte redundanz in kauf nehmen, die den unique teil beinhaltet.

    Ilja

  2. Hi Eddy,

    kannst Du vor dem Insert in die Bank den String auf Shell-Ebene untersuchen? Falls ja, dann kannst Du doch den unique-Teil herausholen (vielleicht über C-Programm oder Perl) und aus diesem String eine md5-Summe bilden. Dies ist dann Dein unique index, den Du ebenfalls mit in der Bank ablegst und auf diese Spalte einen Trigger machst. Somit mußt Du Dir innerhalb der Bank keine Gedanken machen, wo der String innerhalb eines Eintrags steht und der Trigger paßt auf, daß der unique-string nicht zweimal vorkommt.

    Gruß

    Hans

  3. Hi!

    Ich würde in diesem Fall ebenfalls eine redundante Datenhalten vorziehen aber es gäbe noch die Möglichkeit für teil_2 und teil_3 jeweils eine neue Tabelle anzulegen.

    Gruß
    Olli