kostenloser Webspace werbefrei: lima-city


Suche optimale Tabellenstruktur für Wörterbuch

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    subdomain

    Kostenloser Webspace von subdomain

    subdomain hat kostenlosen Webspace.

    Hallo zusammen,

    für meine Webseite möchte ich gern ein Wörterbuch bauen. Anfänglich soll es Begriffe in sechs Sprachen (DE, EN, IT, FR, ES und PT) enthalten. Eventuell werden es später auch mehr. Mit der Planung der Datenbank bin ich aber wohl etwas überfordert.:slant:

    Zu jedem Begriff möchte ich, in jeder Sprache, folgende Daten ablegen:

    - ID
    - das Wort
    - Lautbild
    - Wortgattung
    - optional Pluralformen
    - optional Deklinationen
    - ein kleines Audiofile mit Hörbeispiel
    - optional eine Begriffsbeschreibung

    Jede Sprache in einen eigenen Datenbanktabelle zu speichern wäre vermutlich sinnvoll.

    Natürlich möchte ich die Begriffe aus verschiedenen Sprachen verknüpfen. Und damit fangen meine Probleme an.

    Der Nutzer soll die Möglichkeit haben, nach einem Begriff beliebiger Sprache zu suchen und bekommt dann die Daten für den Begriff in der von ihm gewählten Sprache geliefert.

    Wie verknüpfe ich die einzelnen Sprachen am besten?

    1 zu 1 ist sicherlich nicht optimal. Eigentlich sogar unmöglich, da nicht von Beginn an jeder Begriff innjeder Sprache vorkommt.

    Zu jedem Begriff die IDs der korresondierenden Begriffe der anderen Sprachen abzulegen, wäre eine Möglichkeit.
    Dummerweise gibt es bei vielen Begriffen mehrere Übersetzungen, so das eine 1 zu 1 Verknüpfung auch aus diesem Grund ausscheidet.

    Danke für jeden Ratschlag!

    Subdomain



  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Nope, falscher Ansatz. Die Sprachen alle in verschiedene Tabellen zu packen ist nicht normalisiert.

    Wahrscheinlich wird es dann so aussehen:

    Tabelle languages: (Sprachen)
    ID
    . (Sprachkürzel, usw.)
    .
    .

    Tabelle words: (Wörter, Lautschrift, ...)
    ID
    lanuage_ID
    word
    .
    .
    .

    Tabelle meanings: (Bedeutungen)
    ID
    meaning

    Verknüpfungstabelle word-meaning:
    word_id
    meaning_id

    Damit linkst du immer ein Wort zu einer Bedeutung.
    Und wenn zwei Wörter, aus verschiedenen Sprachen auf eine Bedeutung linken, dann ist es eine Übersetzung.
  4. Eine m:n Relation zu der selben Tabelle(..) finde ich hier eigentlich sinnvoller, damit man Redundanzen bei den Bedeutungen verhindern kann.

    Also eher etwa:

    Sprachen: SprachId, ...
    Wörter: WortId. SprachId, Worttext, ...
    Wortverbindungen: Wort1Id, Wort2Id

    Man kann dann zwar auch Wörter sich selbst zuweisen, aber so hätte ich das realisiert.
  5. Autor dieses Themas

    subdomain

    Kostenloser Webspace von subdomain

    subdomain hat kostenlosen Webspace.

    Alle Worte, ungeachtet der Sprache in eine Tabelle. Gut, das kann ich noch nachvollziehen. Die Sprachen in eine eigene Tabelle zu packen auch, aber dann...

    Die Verknüpfung über die Tabelle Meanings ist mir schleierhaft und auch bei der Idee von rangmar, mit den Wortverbindungen, weiß ich nicht, wie ich da letzlich zu meinem Ergebnis kommen kann.

    Ein Beispiel des Gewünschten.

    Der User gibt einen Suchegriff ein, z.B. "meal"
    In der Datenbank wird es als engl. Wort gefunden.
    passende Übersetzungen im deutschen wären z.B.: Mahlzeit, Essen, Mehl
    das dt. Wort Mehl hingegen würde im englischen mit flour, meal, farina übersetzt.
    Essen müßte aber auch, wegen des Verbs essen, einen Verweis auf to eat hervorbringen.

    Wie würde ich den Zusammenhang

    Essen <-> meal <-> Mehl <-> flour 
     |_>to eat


    in euren Modellen abbilden?

    - Die Bedeutung eines Wortes ist nicht zwangsläufig eindeutig,
    - Wortverbindungen können ebenfalls vielschichtig sein.

    Sobald jetzt noch eine dritte Sprache ins Spiel kommt, wird es ganz verwirrend. :(


    Mag sein, daß ich jetzt zu kurz denke, aber meine SQL-Kenntnisse sind eher rudimentär.


    Subdomain





  6. Nehmen wir mal mein Modell.
    Zuerst hast du die Wörter Meal, Flour, Essen, Mehl, 'to eat'.
    Die speicherst du alle am Anfang in der Datenbank, Wobei die Sprachen schon vordefiniert sind.
    (Englisch hat die SprachId 1. Deutsch die 2)
    Tabelle Wort: (WortId, SprachId, Worttext)
    - 1, 1, 'Meal'
    - 2, 1, 'Flour'
    - 3, 2, 'Essen'
    - 4, 2, 'Mehl'
    - 5, 1, 'to eat'

    Die wären nun ohne Verbindungen gespeichert.
    Dann verbindest du die Wörter.
    Tabelle Wortverbindungen(Wort1Id, Wort2Id)
    - 1, 3
    - 2, 4
    - 3, 5
    - 1, 4

    Das wäre dann
    Essen(3) <-> meal(1) <-> Mehl(4) <-> flour (2)
     |_>to eat(5)

    Wenn du nun nach Meal suchst machst du etwa folgendes:
    Wähle alle Wörter
    - Mit Wortverbindungen zu Meal(Id 1)
    (Das wäre dann 3 und 4)


    Beitrag zuletzt geändert: 19.2.2010 15:51:56 von rangmar
  7. Autor dieses Themas

    subdomain

    Kostenloser Webspace von subdomain

    subdomain hat kostenlosen Webspace.

    Ok, bleiben wir bei dem Beispiel.

    Nikic sprach vorhin von normalisieren. Würde die Wortverknüpfungstabelle nicht gegen die Normalisierungsregeln (Die ich mir noch genauer anschauen muß) verstoßen, da gleiche IDs in beiden Spalten vorkommen können?

    Wenn ich z.B. nach "Essen" (ID= 3) suche, müßte ich ja beide Spalten abfragen, um alle Verknüfungen zu bekommen.

    Tabelle Wortverbindungen(Wort1Id, Wort2Id)
    - 1, 3  <=
    - 2, 4
    - 3, 5 <=
    - 1, 4


    Wäre jetzt noch eine dritte Sprache im Spiel, müßte ich bei der Abfrage
    Wähle alle Wörter
    - Mit Wortverbindungen zu Meal(Id 1)
    (Das wäre dann 3 und 4)


    um ein "und WortTabelle.SprachID = gewünschte Sprache" ergänzen. Richtig?

    Langsam sehe ich Licht am Ende des Tunnels... auch wenn es noch nicht sonderlich hell ist und flackert. :wink:

    Subdomain


    Beitrag zuletzt geändert: 19.2.2010 16:03:46 von subdomain
  8. Wort:
    - Wort_ID
    - Wort_Sprache_ID
    - Wort_Name
    - ...
    - Pluralformen und Deklinationen würde ich auch in eine gesonderte Tabelle packen

    Sprache:
    - Sprache_ID
    - Sprache_Name
    - ...

    WortSpracheVerknüpfung
    - WortSpracheVerknüpfung_ID
    - WortSpracheVerknüpfung_Wort1_ID
    - WortSpracheVerknüpfung_Wort2_ID


    Das wurde zwar bereits geschrieben, aber das wäre ein konkretes Tabellenschema für deine Datenbank.
    Du brauchst eine m:n Beziehung bzw. m:n Relation, darunter dürftes du mehr bei Google finden.

  9. Nikic sprach vorhin von normalisieren. Würde die Wortverknüpfungstabelle nicht gegen die Normalisierungsregeln (Die ich mir noch genauer anschauen muß) verstoßen, da gleiche IDs in beiden Spalten vorkommen können?

    Wenn ich z.B. nach "Essen" (ID= 3) suche, müßte ich ja beide Spalten abfragen, um alle Verknüfungen zu bekommen.

    Tabelle Wortverbindungen(Wort1Id, Wort2Id)
    - 1, 3  <=
    - 2, 4
    - 3, 5 <=
    - 1, 4


    Das wäre so ja. Allerdings existieret die Tabelle in der Theorie gar nicht, aber da viele Datenbanken die Verknüfung in der Art gar nicht unterstützen, muss eine Zwischentabelle her.


    Wäre jetzt noch eine dritte Sprache im Spiel, müßte ich bei der Abfrage
    Wähle alle Wörter
    - Mit Wortverbindungen zu Meal(Id 1)
    (Das wäre dann 3 und 4)


    um ein "und WortTabelle.SprachID = gewünschte Sprache" ergänzen. Richtig?

    In etwa.
    Etwas genauer ist das dann so: (Erweitert auf Massen von Sprachen und Suche nach mehreren Sprachen)
    NEHME WortId VON Wort WO Worttext = _gesuchtes_wort_
    -NEHME Wort1Id VON Wortverbindungen WO Wort2Id = _gesuchtes_wort_WortId_
    -NEHME Wort2Id VON Wortverbindungen WO Wort1Id = _gesuchtes_wort_WortId_
     -Schleife..
     -WENN SpracheId VON Wort WO WortId = _WortId_aus_verbindungen_
     -GLEICH WIE _gesuchte_SpracheId_
     -ODER GLEICH WIE _gesuchte_SpracheId_2_
      -SCHREIBE Worttext


    Beitrag zuletzt geändert: 19.2.2010 16:30:50 von rangmar
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!