Mailinglisten-Archive |
Hi Ralf, Am Donnerstag, 23. November 2006 21:56 schrieb Ralf Eggert: > ich weiß, dass die Frage off-topic ist. Da hier aber viele gestandene > Webentwickler mitlesen, hoffe ich, dass mir jemand helfen kann. > > Ich habe eine Datenbanktabelle "Mensch". Neben Feldern wie Name, > Größe und Gewicht, in denen Werte frei eingeben werden können, gibt > es auch Felder wie Augenfarbe, Haarfarbe und Familienstand, welche > nur bestimmte Vorgabewerte aufnehmen dürfen. Diese Vorgabewerte > sollen mehrsprachig verwaltet werden. > > Wie lege ich nun diese Vorgabewerte am besten an? Als Beispiel nehme > ich mal Familienstand. > > 1. Ich verwende ein ENUM Feld, in denen alle möglichen Werte in einer > Sprache vorgegeben werden. Die Übersetzungen werden dann aus einer > anderen Quelle gelesen. > > 2. Ich erstelle eine eigene Tabelle "Familienstand". Der > Primärschlüssel besteht aus einer eindeutigen Id, dem > Sprachschlüssel und der Bezeichnung. Die ID wird als > Fremdschlüssel in Tabelle "Mensch" verwendet. > > 3. Ich erstelle eine eigene Tabelle "Familienstand" mit einem > Primärschlüssel und einem Bezeichnerfeld, das ein serialisiertes > Array bestehend aus Sprachschlüssel und Bezeichnung enthält. > > 4. Ich erstelle eine XML Datei, welches die Daten für den > Familienstand enthalten. Jede Entität in der XML Datei enthält die > Bezeichnungen in den Sprachen. In Tabelle "Mensch" gibt es ein Feld > für den "Familienstand", mit dem Schlüssel aus der XML Datei. > > Verwendet habe ich in der Vergangenheit bereits 1. und 2. Jetzt > überlege ich, ob 3. und/oder 4. vielleicht besser geeignet sind. > > Wie setzt Ihr solche Daten in euren Projekten um? ich wähle grundsätzlich erst einmal Lösung 2. Lösung 1. und 4. haben den Nachteil, daß die Daten auch von außerhalb gezogen werden, so daß die Datenbank alleine nicht mehr selbsterklärend und vollständig ist. Lösung 3. finde ich nicht gut, weil sie schon anwendungsbezogen ist und die Daten nicht mehr normalisiert und im Klartext abgelegt sind. Wenn es Dir um eine Reduzierung der Datenbankzugriffe und der Operationen zur Laufzeit geht, dann empfehle ich Dir eine Kombination aus 2. und einem irgendwie gearteten Cache. Das ist immer mein Ansatz. Also die Datenbank immer schön normalisieren und die Daten zusammenhalten, so daß die Daten selbsterklärend bleiben. Darauf aufbauend dann gegebenenfalls Daten in einem Cache zusammenziehen und in der Anwendung dann auf die gecachten Daten zugreifen. Mal ein praktisches, wenn auch noch sehr einfaches Beispiel: Ich habe bei mir eine Tabelle mit Übersetzungen in der Datenbank. Daraus generiere ich für jede Sprache eine fertige PHP-Datei mit den Übersetzungen in einem Array. In den PHP-Seiten binde ich dann einfach die passende Übersetzungsdatei ein und spare mir so den Datenbankzugriff und die darauffolgende Verarbeitung. Oder ein weiteres Beispiel: Ich ziehe alle Daten aus den verschiedenen Tabellen in einer Suche-Tabelle zusammen und suche dann schnell über die dort zusammengezogenen Daten. Ich hoffe, es wird deutlich, was ich meine. :-) Viele Grüße Lutz
php::bar PHP Wiki - Listenarchive