sql >> Base de Datos >  >> RDS >> PostgreSQL

Mejores prácticas para almacenar cadenas multilingües

Primero asegúrese de que la región de la base de datos puede tratar con diferentes idiomas. Utilice una codificación de servidor UTF-8. Opcionalmente establezca LC_COLLATE = 'C' estar en un terreno neutral o usar una colación para que su primer idioma tenga un orden de clasificación predeterminado. Comience leyendo el capítulo Soporte de intercalación en el manual.

Le sugiero encarecidamente que use la última versión de PostgreSQL (9.1 en el momento de escribir este artículo) porque tiene un soporte de intercalación superior.

En cuanto a la estructura de la tabla :mantenlo simple. Parece que hay un número fijo y bajo de idiomas con los que lidiar. Entonces podría tener una columna para cada idioma:

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

Esto es bastante efectivo, incluso con muchos idiomas. El almacenamiento NULL es muy económico.
Si tiene que lidiar con un número variable de idiomas, una tabla separada podría ser la mejor solución. Esta solución asume que tiene un "idioma maestro", donde la cadena siempre está presente:

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

O, si una abreviatura (de dos letras) es suficiente, simplemente cree un enum escribir para identificar el idioma.

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

No tratar el idioma maestro de manera especial y mantener todas las variantes de idioma en la misma tabla podría simplificar el manejo en su aplicación. Pero realmente depende de sus requisitos.