sql >> Databáze >  >> RDS >> PostgreSQL

Nejlepší postup pro ukládání vícejazyčných řetězců

Nejprve se ujistěte, že místo databáze umí pracovat s různými jazyky. Použijte serverové kódování UTF-8. Volitelně nastavte LC_COLLATE = 'C' být na neutrální půdě nebo použít řazení pro svůj první jazyk, aby bylo výchozí pořadí řazení. Začněte přečtením kapitoly Podpora shromažďování v návodu.

Důrazně doporučuji, abyste používali nejnovější verzi PostgreSQL (9.1 v době psaní), protože má vynikající podporu řazení.

Pokud jde o strukturu tabulky :Udržujte to jednoduché. Zdá se, že existuje nízký, pevně stanovený počet jazyků, se kterými je třeba se vypořádat. Pak byste mohli mít sloupec pro každý jazyk:

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
);

To je docela efektivní, dokonce i v mnoha jazycích. NULL úložiště je velmi levné.
Pokud máte k dispozici různý počet jazyků, může být lepším řešením samostatná tabulka. Toto řešení předpokládá, že máte "master language", kde je řetězec vždy přítomen:

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
);

Nebo, pokud stačí (dvoupísmenná) zkratka, vytvořte enum typ k identifikaci jazyka.

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)
);

Ne speciální zpracování hlavního jazyka a ponechání všech jazykových variant ve stejné tabulce může usnadnit manipulaci ve vaší aplikaci. Ale opravdu záleží na vašich požadavcích.




  1. Optimalizujte datová volání v JDBC na JTable

  2. Omezení, aby se zabránilo porušení omezení FK ve třetí tabulce

  3. Před spuštěním skriptů Delete/Load data uzamkněte databázi Oracle

  4. Rozdělit (rozložit) hodnoty sloupců oddělené čárkou na řádky