Mailinglisten-Archive |
Ralf Eggert wrote: > Hallo Liste, > > 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. Das klingt so, als würdest du sowas in eine include-Datei speichern, aber doch nicht in einer DB... Von so einer Konstruktion würde ich die abraten, denn das macht deutlich weniger Spass zu debuggen, weil man nichtmehr auf einem Blick sieht, was in dem Array jetzt eigentlich drin steht... > > 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. > Halte ich für weniger performant (xml ist tendenziell eher langsam (viel Overhead)), aber es wäre eine Möglichkeit. Es wäre evntuell schneller in einer includedatei einfach eienn Array zu speichern... > Verwendet habe ich in der Vergangenheit bereits 1. und 2. Jetzt überlege > ich, ob 3. und/oder 4. vielleicht besser geeignet sind. Wie du schon merkst, stehe ich deinen Möglichkeiten 3 und 4 nicht so offen gegenüber. Nummer 1 kombiniert mit einer includedatei für jede Sprache halte ich für am besten. Du kannst dann in der Programmierung immer die Spalte mit +0 abfrage und kannst so schnelle numerische Arrays benutzen. Trotzdem siehst du in phpmyadmin (oder was immer du verwendest) sofort, was drin steht. Und es ist bestimmt deutlich performanter als Möglichkeit 2. Der Vorteil von 2 ist die Erweiterbarkeit... Wenn du mal eben schnell noch einen Familienstand hinzufügen möchtest (ok, eher unwahrscheinlich in dem Beispiel, aber nehmen wir mal an...), dann hast du das mit einem query erledigt. Bei Enum zwar theoretisch auch, aber wenn du den wert vom Enum häufig veränderst, macht das mit einer extra-Tabelle viel mehr Spass. Wobei du dir wirklich überlegen solltest, ob es sinnvoll ist übersetzungen so tief in deine Skripte einzubetten... Alternativ gibt es im einfachsten Fall assoziative Arrays. Im fortgeschrittenen Fall gibt es dann gettext und ggf. auch was mit DB-Anbindung. Mit so einer Trennung zwischen Programmierung und Übersetzung bist du im Zweifelsfall flexibler. Du kannst auch einfach die gettext-Datei einfach weitergeben, wenn du jemanden suchst, der sie dir übersetzt usw. Wenn du übersetzungen so direkt in die DB einbaust, bist du immer gelich bei jeder Änderung daran gebunden in deinen DB-Strukturen rumzufummeln, die im schlimmsten Fall alle Sprachsachen über 20 Tabellen verteilen. > > Wie setzt Ihr solche Daten in euren Projekten um? > > Gruß, > > Ralf Yannik
php::bar PHP Wiki - Listenarchive