PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Best Practice zum Speichern mehrsprachiger Zeichenfolgen

Stellen Sie zunächst sicher, dass das Datenbankgebietsschema kann mit verschiedenen Sprachen umgehen. Verwenden Sie eine UTF-8-Servercodierung. Setzen Sie optional LC_COLLATE = 'C' auf neutralem Boden sein oder eine Sortierung für Ihre Muttersprache verwenden, um eine Standardsortierreihenfolge zu haben. Beginnen Sie mit dem Lesen des Kapitels Collation Support im Handbuch.

Ich würde dringend empfehlen, dass Sie die neueste Version von PostgreSQL (9.1 zum Zeitpunkt des Schreibens) verwenden, da sie eine überlegene Sortierungsunterstützung bietet.

Wie für die Tabellenstruktur :halte es einfach. Es hört sich so an, als gäbe es eine geringe, feste Anzahl von Sprachen, mit denen man sich befassen muss. Sie könnten dann einfach eine Spalte für jede Sprache haben:

CREATE TABLE txt (
  txt_id serial PRIMARY KEY
 ,txt    text NOT NULL -- master language NOT NULL?
 ,txt_fr text -- others can be NULL?
 ,txt_es text
 ,txt_de text
);

Das ist ziemlich effektiv, selbst bei vielen Sprachen. NULL-Speicher ist sehr billig.
Wenn Sie mit einer unterschiedlichen Anzahl von Sprachen zu tun haben, ist eine separate Tabelle möglicherweise die bessere Lösung. Diese Lösung geht davon aus, dass Sie eine "Mastersprache" haben, in der die Zeichenfolge immer vorhanden ist:

CREATE TABLE txt (
  txt_id serial PRIMARY KEY
 ,txt    text NOT NULL -- master language NOT NULL?
);

CREATE TABLE lang (
  lang_abbr text PRIMARY KEY -- de, es, fr, ...
 ,lang      text NOT NULL
 ,note      text
);

Oder, wenn eine (aus zwei Buchstaben bestehende) Abkürzung ausreicht, erstellen Sie einfach ein enum Typ um die Sprache zu identifizieren.

CREATE TABLE txt_trans (
  txt_id    int REFERENCES txt(txt_id) ON UPDATE CASCADE ON DELETE CASCADE
 ,lang_abbr text REFERENCES lang(lang_abbr) ON UPDATE CASCADE
 ,txt       text NOT NULL -- master language NOT NULL?
 ,CONSTRAINT txt_trans_pkey PRIMARY KEY (txt_id, lang_abbr)
);

Nicht Wenn Sie die Hauptsprache speziell behandeln und alle Sprachvarianten in derselben Tabelle halten, wird die Handhabung in Ihrer App möglicherweise einfacher. Aber es hängt wirklich von Ihren Anforderungen ab.