# Mehrsprachigkeit für Tabellenfelder



## Tom1969 (13. Okt 2013)

Ich möchte ein Land mit Bundesländer in Mehrsprachigkeit in einer Datenbank abbilden.

Also ein Land kann mehrere Bundesländer z.B.

Deutschland
---- Hamburg
---- Niedersachsen
---- Baden-Würtemberg
---- Bayern

dieses ist ja noch relativ einfach und effizient in einer Datenbank abzubilden. Also z.B.

Tabelle: Country
-----------              Colum1:   ID  (Primary Key - Int(10) )
-----------              Column2: Created_at (Timestamp)
-----------              Column3: ISO (Varchar (3) )
 -----------             Column4: Name ( VARCHAR(255) )

Tabelle: State
-----------              Colum1:   ID  (Primary Key - Int(10) )
-----------              Column2: Created_at (Timestamp)
-----------              Column3: ISO (Varchar (3) )
-----------             Column4: Name ( VARCHAR(255) )

Aber wie würdet ihr eine Datenbank am effizientesten realisieren, wenn die Länder und die Bundesländer z.B. Mehrsprachig gespeichert werden soll?

Also für Deutsch:

Deutschland
---- Hamburg
---- Niedersachsen
---- Baden-Württemberg
---- Bayern

und für English:
Germany
---- Hamburg
---- Lower Saxony
---- Baden-Württemberg
---- Bavaria


----------



## Gucky (14. Okt 2013)

Gehen zwei weitere Tabellen Namens country (english) und state (englisch)?


----------



## JavaGott (14. Okt 2013)

Tabelle: Country
 ----------- Colum1: ID (Primary Key - Int(10) )
 ----------- Column2: Created_at (Timestamp)
 ----------- Column3: ISO (Varchar (3) )
 ----------- Column4: NameDeutsch ( VARCHAR(255) )
 ----------- Column4: NameEnglisch ( VARCHAR(255) )
 ----------- Column4: NameWasAuchImmer ( VARCHAR(255) )
 ----------- Column4: NameWoauchImmer ( VARCHAR(255) )

 Tabelle: State
 ----------- Colum1: ID (Primary Key - Int(10) )
 ----------- Column2: Created_at (Timestamp)
 ----------- Column3: ISO (Varchar (3) )
 ----------- Column4: NameDeutsch ( VARCHAR(255) )
 ----------- Column4: NameEnglisch ( VARCHAR(255) )
 ----------- Column4: NameWasAuchImmer ( VARCHAR(255) )
 ----------- Column4: NameWoauchImmer ( VARCHAR(255) )


Verknüpft wird ja eh nur über die ID. Und bei der Abfrage oder im Code einfach nur entscheiden ob du NameDeutsch oder  NameEnglisch ausgeben willst


----------



## Tom1969 (14. Okt 2013)

@JavaGott:

Das Problem bei deiner Lösung ist das ich bei N zusätzlichen Sprachen N neue Felder hinzufügen müsste.

@Gucky
Gleiches Problem wie bei JavaGott, aber hier hätte ich N neue Tabellen, wobei z.B. ISO n-mal in der Datenbank vorkommen würde. ISO ist aber nach ISO 3166 standisierd (gleichbleibend).


----------



## turtle (14. Okt 2013)

Also, du siehst ein Problem wenn mehrere Spalten in EINER Tabelle in der DB stehen könnten.
Also, du siehst ein Problem wenn mehrere Tabellen in der DB stehen könnten.

Aber du weisst schon, das du irgendwo den Text 'Bayern' bzw. 'Bavaria' in der DB ablegen musst? 

Der Hinweis zu ISO kam initial aus deinem DB-Modell
:autsch:


----------



## JavaGott (14. Okt 2013)

Naja es gäbe noch eine weitere Möglichkeit:

Tabelle: Country
 ----------- Colum1: ID (Primary Key - Int(10) )
 ----------- Column2: Created_at (Timestamp)
 ----------- Column3: ISO (Varchar (3) )
 ----------- Column4: Name ( Int(10) )

 Tabelle: State
 ----------- Colum1: ID (Primary Key - Int(10) )
 ----------- Column2: Created_at (Timestamp)
 ----------- Column3: ISO (Varchar (3) )
 ----------- Column4: Name (  Int(10) )

Tabelle: NLS
 ----------- Colum1: ID (Int(10) )
 ----------- Column2: Language (Varchar (2))
 ----------- Column3: Name (  Varchar (255))

Die Tabelle NLS nutzt du um deine unterschiedlichen Sprachen zu verwalten.

Beispiel Inhalt:
NLS
1 de Bayern
1 en Bavaria
1 fr keine ahnung wie das duie Franzosen nennen 

Über den Länderkürzel bekommst du dann immer die entsprechende Sprache heraus...

Ist zwar dann nicht mehr sonderlich schön in der DB verknüpft, ist jedoch immernoch ein denkbarer Ansatz dein NLS problem zu lösen.


----------



## Tom1969 (14. Okt 2013)

@Tortel: Meine erste Überlegung war hingehend zu JavaGott

@JavaGott: Ja das war auch meine erste Überlegung. 

Vielleicht hab ich mich am Anfang etwas missverständlich ausgedrückt.

Deshalb hier nochmal Nachtrag:
Ich bin seit 2 - 3 Monaten dabei ein Programm zu konzipierne. Das Konzept des Programms ist zu 98% abgeschlossen. Ich erkenne aber jetzt schon engpässe. Die Engpässe können u.a. auch in der Mehrsprachigkeit von Länder vs Staaten herrühren. Deshalb such ich ein DB Pattern um dieses ggf performance sicherer zu machen. 

Die sprachenabhängige Abfrage der Länder und Staaten wird oft erfolgen. Die Speicherung, Änderung und Löschung wird relativ selten erfolgen.

Wäre die Daten jetzt in einer Baumstruktur vorhaltig, dann hätte ich z.B. Nested Sets genommen. (nur mal um einen Vergleich aufzustellen). Vielleicht kennt ja jemand ein ähnliches Verfahren für oben benanntes Problem. 

JavaGott, dein Ansatz ist mein vorläufiges Design, sehe hier aber ggf. Ansatzschwächen hinsichtlich meines Problems. So sehe ich zuviele Datentabelle auf mich zukommen, bezogen auf mein gesammtes Datenmodel, da die Mehrsprachigkeit für zig unterschiedliche Datentabelle zutrifft. Das Land zu Staaten Model stellt aus meinem gesammt Programm nur ein maginalen Ausschnitt da.


----------

