DB-Struktur für Multilingual Homepage

Chocobanana

Erfahrenes Mitglied
Hi@all!

Folgendes Problem: Ich tüftle gerade an einer Homepage, die derzeit nur in Deutsch existiert. Die Übersetzung auf englisch, etc. ist aber schon fix geplant.

Ich hab mich bei der Umsetzung für eine MySQL DB entschieden, da viele Inhalte per "kleinem CMS" aktualisiert bzw. hinzugefügt werden.

Nun bin ich mir aber nicht sicher, wie ich die DB designe. Derzeit tendiere ich dazu, für jede sprache eine eigene Tabell zu machen. Also so in etwa:

Code:
de_tbl_nachrichten --> ID - Text - Link - ....
en_tbl_nachrichten --> ID - Text - Link - ....

usw. Problem dabei ist, dass ich womöglich zu vielen Tabellen komme. Stellt sich also die Frage, ob es klüger wäre, in einer Tabelle einfach mehrere Spalten zu machen:

Code:
tbl_nachrichten --> ID - de_Text - en_Text - de_Link - en_Link
......

So würde ich halt wenige Tabellen haben, dafür aber eine Vielzahl von Spalten.

Was ist hinsichtlich Performance zu empfehlen? Wie lösen professionelle Webargenturen solche "Multilingual-Probleme"?

Danke schon mal für eure Hilfe.

Greetz,
Choco
 
Ich favorisiere den dritten Ansatz:


Eine Tabelle mit einer Spalte für die Sprache:

tbl_nachrichten --> ID - Text - Link - Sprache - ...

Und somit sähe ein Eintrag dann wie folgt aus:

1 - 'Hallo' - 'http://www.hallo.de' - 'DE'
2 - Hello' - 'http:/hello.co.uk' - 'EN

u.s.w

Ein select über diese Tabelle würde dann immer die Sprache als Parameter mitgeben, das ist performant, wenn man zB die Spalte Sprach auch indiziert.
 
hi Chocobanana,

ich halte deine erste idee, fuer die guenstigste. in deinen tabellen stehen dann nur informationen die auch zusammengehoeren, das bringt dir den vorteil, dass du keine informationen durchsuchen musst, die sowieso niemand wissen will. z.b. wenn ein kunde die engl. variante gewaehlt hat, wird er hoechstwahrscheinlich waehrend der ganzen session nicht auf dt. texte zurueckgreifen wollen.
ausserdem brauchst du nicht bei jeder abfrage einen sprachabgleich in der db durchzufuehren. dein script merkt sich einfach die gewaehlte sprache und waehlt danach den tabellennamen. das ist dann nur ein if-konstrukt im gegensatz zu tausenden(?) abfrage in der db.
 
Problem ist halt, dass alle Versionen Vor- und Nachteile haben. Darum hätt ich gehofft dass einer "vom Fach" was dazu sagen könnte. Oder habt ihr eine Ahnung was Performance mäßig am besten ist? Wenn ich nämlich die Version mit den eigenen Tabellen verwende, dann können das schon ohne weiteres mal 5 Tabellen pro Sprache werden, und das ist schon eher minimal ausgedrückt. Bei vier Sprachen wären das dann schon 20 Tabellen usw. ...
 
gut, du hast jetzt 5 tabellen fuer deine inhalte pro sprache. mysql speichert die daten jeder tabelle in einer extra datei ab. jede tabelle(in diesem fall auch datei), die du nicht benutzt, belastet dein system auch nicht. deswegen ist die klare trennung auch schneller. wenn du irgendwelche bedenken hast, lege dir doch einfach 3 dummytabellen an, fuelle diese mit z.b. 2 mio zufaelligen eintraegen und lasse eine abfrage laufen. in der ersten tabelle fragst du die spalte fuer den laendercode mit ab und bei den beiden anderen tabellen laesst du dein script entscheiden und die richtige tabelle auswaehlen.
ich habe gluecklicherweise im moment nur einsprachige eintraege. trotzdem sind es bei mir 144 tabellen. muesste ich eine zweite sprache einfuehren, wuerde ich das komplette design kopieren und an die tabellennamen z.b. _en anhaegen. das haette unter anderem den vorteil, dass ich meine db in innerhalb einer stunde um eine neue sprache erweitern koennte. (hab ich noch gar nicht dran gedacht, muss ich gleich mal ausprobieren ;-))
 
Zurück