Was ist der beste Weg, um eine mehrsprachige Datenbank zu erstellen? Das Erstellen einer lokalisierten Tabelle für jede Tabelle macht das Entwerfen und Abfragen komplex. In anderen Fällen ist das Hinzufügen einer Spalte für jede Sprache einfach, aber nicht dynamisch. Bitte helfen Sie mir zu verstehen, welche für Unternehmensanwendungen am besten geeignet ist
sql
database
database-design
Arsen Mkrtchyan
quelle
quelle
Antworten:
Wir erstellen zwei Tabellen für jedes mehrsprachige Objekt.
Beispielsweise enthält die erste Tabelle nur sprachneutrale Daten (Primärschlüssel usw.) und die zweite Tabelle enthält einen Datensatz pro Sprache, der die lokalisierten Daten sowie den ISO-Code der Sprache enthält.
In einigen Fällen fügen wir ein DefaultLanguage-Feld hinzu, damit wir auf diese Sprache zurückgreifen können, wenn für eine bestimmte Sprache keine lokalisierten Daten verfügbar sind.
Beispiel:
Mit diesem Ansatz können Sie so viele Sprachen wie nötig verarbeiten (ohne zusätzliche Felder für jede neue Sprache hinzufügen zu müssen).
Update (14.12.2014): In dieser Antwort finden Sie einige zusätzliche Informationen zur Implementierung, mit der mehrsprachige Daten in eine Anwendung geladen werden.
quelle
id
: D. Zur Erklärung stellt jedeid
eine Bedeutung dar, an die Sie Wörter aus einer beliebigen Sprache in einer relationalen Tabelle anhängen können. Sie erhalten also zwei Tabellen,meaning
(id) undword
(id, mean_id), wobei dieid
in derword
Tabelle die Wort-ID darstellt, dieid
in dermeaning
darstellt die Bedeutung, die universell ist.Ich empfehle die Antwort von Martin.
Sie scheinen jedoch besorgt darüber zu sein, dass Ihre Abfragen zu komplex werden:
Sie denken also vielleicht, anstatt einfache Abfragen wie diese zu schreiben:
... müssten Sie anfangen, solche Abfragen zu schreiben:
Keine sehr schöne Perspektive.
Anstatt dies manuell zu tun, sollten Sie eine eigene Datenbankzugriffsklasse entwickeln, die das SQL, das Ihr spezielles Lokalisierungs-Markup enthält, vorab analysiert und in das tatsächliche SQL konvertiert, das Sie an die Datenbank senden müssen.
Die Verwendung dieses Systems könnte ungefähr so aussehen:
Und ich bin sicher, dass Sie das noch besser machen können.
Der Schlüssel ist, dass Ihre Tabellen und Felder einheitlich benannt werden.
quelle
Ich finde, dass diese Art von Ansatz für mich funktioniert:
Die ProductDetail-Tabelle enthält alle Übersetzungen (für Produktname, Beschreibung usw.) in den Sprachen, die Sie unterstützen möchten. Abhängig von den Anforderungen Ihrer App möchten Sie möglicherweise die Ländertabelle aufteilen, um auch regionale Sprachen zu verwenden.
quelle
Ich benutze den nächsten Ansatz:
Produkt
ProductID OrderID, ...
Produktinformation
ProductID Titelname LanguageID
Sprache
LanguageID Name Kultur, ....
quelle
Martins Lösung ist meiner sehr ähnlich. Wie würden Sie jedoch mit Standardbeschreibungen umgehen, wenn die gewünschte Übersetzung nicht gefunden wird?
Wäre dafür für jedes Feld eine IFNULL () - und eine weitere SELECT-Anweisung erforderlich?
Die Standardübersetzung wird in derselben Tabelle gespeichert, wobei ein Flag wie "isDefault" angibt, ob diese Beschreibung die Standardbeschreibung ist, falls für die aktuelle Sprache keine gefunden wurde.
quelle