sql >> Databasteknik >  >> RDS >> PostgreSQL

Bästa praxis för att lagra flerspråkiga strängar

Se först till att databasspråket kan hantera olika språk. Använd en UTF-8-serverkodning. Ange eventuellt LC_COLLATE = 'C' att vara på neutral mark eller använda en sortering för att ditt första språk ska ha en standardsortering. Börja med att läsa kapitlet Sorteringsstöd i manualen.

Jag rekommenderar starkt att du använder den senaste versionen av PostgreSQL (9.1 i skrivande stund) eftersom den har överlägset stöd för sortering.

När det gäller tabellstrukturen :håll det enkelt. Det låter som att det finns ett lågt, fast antal språk att hantera. Du kan bara ha en kolumn för varje språk då:

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

Detta är ganska effektivt, även med många språk. NULL-lagring är väldigt billig.
Om du har ett varierande antal språk att hantera kan en separat tabell vara den bättre lösningen. Denna lösning förutsätter att du har ett "master language", där strängen alltid finns:

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

Eller, om en (tvåbokstavs) förkortning räcker, skapa bara en enum typ för att identifiera språket.

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

Inte Att behandla masterspråket speciellt och behålla alla språkvarianter i samma tabell kan göra hanteringen i din app enklare. Men det beror verkligen på dina krav.




  1. Hur gör man en LIKE-sökning med krypterad data?

  2. Hur byter man värden på två rader i MySQL utan att bryta mot unika begränsningar?

  3. Tidsinställda händelser med php/MySQL

  4. node.js async/await med MySQL