hansemann: DB Aufbau

Hallo,
arbeite mit MySql (version weiß ich gerade nicht genau - 4. oder 5.) habe aber eine allgemeine Frage zum Aufbau einer neuen DB:
Habe z.B. eine Vokabelliste
Tabelle vokabel
.id
.name
.andere felder

und möchte nun eine Verbindung zwischen zwei Vokabeln herstellen und zwar z.B. Synonyme -> also quasi eine n-n Verbindung. Anscheinend schlägt mir Hitze gerade auf den Kopf denn ich komme einfach nicht drauf wie ich das sinnvoll aufbaue:
Tabelle synonym
.id
.vokabel1_id
.vokabel2_id

macht keinen wirklichen Sinn da ich ja bei jeder Abfrage beide Felder gegeneinander abfragen muss!?

Kann mich jemand mal auf den richtigen Weg weisen, wäre echt dankbar denn ich kann nicht warten bis es wieder kühler wird und ich klar denken kann :-)

Danke schon mal
Hans

  1. Tach!

    arbeite mit MySql (version weiß ich gerade nicht genau - 4. oder 5.)

    Version 4 wäre schon sehr alt. 4.0 ist überhaupt nicht mehr empfehlenswert, 4.1 grad noch so, ist aber auch schon lange abgelöst worden.

    Habe z.B. eine Vokabelliste
    und möchte nun eine Verbindung zwischen zwei Vokabeln herstellen und zwar z.B. Synonyme -> also quasi eine n-n Verbindung.

    Gibt es auch n:n? Mir ist nur m:n (oder n:m) bekannt. Aber egal, kommen wir mal zum Punkt.

    Anscheinend schlägt mir Hitze gerade auf den Kopf denn ich komme einfach nicht drauf wie ich das sinnvoll aufbaue:
    Tabelle synonym
    .id
    .vokabel1_id
    .vokabel2_id

    Das ID-Feld ist eigentlich überflüssig, du kannst den Primärschlüssel gleich über die beiden Vokabel-ID-Felder legen. Das spart einen weiteren Unique-Index, den du sowieso über die beiden Felder legen müsstest, um Dopplungen zu verhindern.

    macht keinen wirklichen Sinn da ich ja bei jeder Abfrage beide Felder gegeneinander abfragen muss!?

    Ich wüsste nicht, wie es anders gehen sollte. Du hast eine Beziehung zwischen zwei Datensätzen innerhalb einer Tabelle. Das kann man linksrum und rechtsrum verknüpfen und bleibt sich im Ergebnis gleich. Es gibt nunmal kein a und b, das eindeutig links und rechts zuzuordnen wäre. Es sei denn, du kannst immer einen Datensatz als Master definieren. Bei Wörtern ist das jedoch eher nicht der Fall, weil sie sich gegenseitig als Synonym dienen.

    Ich sehe da zwei Lösungen. Die eine kennst du bereits, sie gefällt dir nicht, aber wirklich unsinnig ist sie nicht. Die andere wäre, immer zwei Datensätze abzulegen, einen x-y und einen y-x. Dann reicht es, in nur einer Spalte zu suchen - zum Preis der Redundanz und des damit verbundenen Pflegeaufwands.

    dedlfix.

    1. Meine Herren,

      und möchte nun eine Verbindung zwischen zwei Vokabeln herstellen und zwar z.B. Synonyme -> also quasi eine n-n Verbindung.

      Gibt es auch n:n? Mir ist nur m:n (oder n:m) bekannt. Aber egal, kommen wir mal zum Punkt.

      Typo3 hat mm-Relationen kultiviert. Ich habe heimlich begonnen eine Zwangsneurose gegen diesen Begriff zu entwickeln und mir anschließend spezielle Atem-Techniken angeeignet um einem schrecklichen Gewaltfiasko vorzubeugen.

  2. હેલો

    und möchte nun eine Verbindung zwischen zwei Vokabeln herstellen und zwar z.B. Synonyme -> also quasi eine n-n Verbindung.

    Sind auch mehr Worte möglich, als lediglich ein Paar?

    macht keinen wirklichen Sinn da ich ja bei jeder Abfrage beide Felder gegeneinander abfragen muss!?

    Warum bei jeder Abfrage? Zeigst du die Synonyme der Worte auch auf den Suchergebnisseiten an?

    બાય

    --
     .
    ..:
    1. Om nah hoo pez nyeetz, Malcolm Beck´s!

      Sind auch mehr Worte möglich, als lediglich ein Paar?

      Im täglichen Leben sicher. Dann ließe es sich wieder als 1:n-Beziehung darstellen. Das andere übrigens auch.

      Wort     | Synonymgruppe
      Brötchen | 1
      Schrippe | 1
      Wecke    | 1

      Matthias

      --
      Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Bart und Bartresen.

      1. @Malcolm: Ja, es sind natürlich mehr als immer nur ein Paar möglich, das ist ja das Problem!

        @dedlfix n:n Beziehungen gibt es tatsächlich wenn auch vermutlich selten ;-) allerdings meinte ich natürlich n:m Beziehungen wie Du richtig angemerkt hast

        @Matthias: Mit der Synonymgruppe ist ein interessanter Lösungsansatz, frage mich nur ob das vom Pflege-Aufwand realistisch ist oder ob es nicht einfacher ist so wie dedlfix es beschrieben hat - muß da nochmal in mich gehen

        Für weitere Lösungsvorschläge /Anregungen bin ich auch weiterhin dankbar...

        Grüße
        Hans

        1. Om nah hoo pez nyeetz, Hansemann!

          @Matthias: Mit der Synonymgruppe ist ein interessanter Lösungsansatz, frage mich nur ob das vom Pflege-Aufwand realistisch ist oder ob es nicht einfacher ist so wie dedlfix es beschrieben hat - muß da nochmal in mich gehen

          Zumindest sollte die DB in der 1:n-Version kleiner bleiben.

          Matthias

          --
          Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Halle und Halleffekt.