TobiasBuschi: Datenbankdesign für perfekte Text-Tabelle

Beitrag lesen

hallo allerseits

Ich habe mir schon viele Gedanken darüber gemacht, wie ich in meinem PHP-Framework, dass ich am basteln bin, die Text-Tabelle perfekt organisiere.

Diese Text-Tabelle wird Texte enthalten welche von verschiedenen anderen Tabellen referenziert werden können.

Ein Text soll mehrsprachig sein können und es sollten Versionen/Revisionen vom selben text gemacht werden können.

In einer alten Version habe ich es so gelöst(ohne Versionisierung):

PK:id | de     | en      | fr      | it
--------------------------------------
     2 | hallo  | hello   | bonjout | ciou
    11 | mutter | mother  | mere    | mama

eine Abfrage war zum Beispiel:

Select $lang AS text
FROM texts
WHERE id = 2
-> hallo

Nun bin ich aber nicht mehr überzeugt von dieser Lösung mit den Sprachen-Spalten.

Jetzt bin ich eher für diese Variante:

PK:id | PK:lang | text
--------------------------
     2 |      de | hallo
     2 |      en | hello
    11 |      de | mutter
    11 |      en | mother
      .        .       .
bsp.Abfrage :
------------
Select text FROM texts WHERE lang = '$lang' AND id = 2
->hallo

Beispiel für eine Abfrage mittels LEFT JOIN
--------------------------
Select
     pages.*,
     texts.text
FROM
     pages
     LEFT JOIN texts ON pages.title_text_id = texts.id AND lang = $lang
WHERE pages.id = 5

Dazu kommen jetzt noch die Versionen / Revisionen

PK:id | PK:lang | PK:revision | text
--------------------------
     2 |      de |         0   | hallo                      //// revision = 0 entspricht aktuell
     2 |      de |         1   | Sehr geehrter Herr
     2 |      de |         2   | Sehr geehrte Damen und Herren
     2 |      de |         3   | hallo
     2 |      de |         4   | Hallo
     2 |      en |         0   | hello                    //// revision = 0 entspricht aktuell
     2 |      en |         1   | Dear Mister
     2 |      en |         2   | Dear
     2 |      en |         3   | hi

Die Revision 0, so habe ich gedacht, benutze ich für den aktuellen Text.
Oder soll ich, um den aktuellen Wert zu bestimmen eine zusätzliche Spalte anlegen? (Platzverschwendung?)
Oder gar eine zusätzliche Tabelle die den aktuellen text bestimmt?
(zu Aufwändig? ich denke schon)

Oder ganz anders??
Ich will es wirklich perfekt haben!!!!!

Ich hoffe man kann meinen Gedankengängen noch folgen.

Besten dank für jede Bemerkung.

mfg Tobias