postgresql – 存储多语言字符串的最佳实践

我需要在Postgres表中为不同语言(2-4种语言)存储不同版本的不长字符串.

这样做的最佳方式是什么?数组或JSON或类似的东西?

首先确保 database locale可以处理不同的语言.使用UTF-8服务器编码. (可选)将LC_COLLATE =’C’设置为中性点,或使用第一语言的排序规则来设置默认排序顺序.首先阅读手册中的章节 Collation Support.

我强烈建议您使用最新版本的PostgreSQL(撰写本文时为9.1),因为它具有出色的整理支持.

至于表结构:保持简单.听起来有一些低,固定数量的语言需要处理.您可以为每种语言添加一列:

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

即使使用多种语言,这也非常有效. NULL storage is very cheap.
如果您要处理不同数量的语言,则单独的表可能是更好的解决方案.此解决方案假定您具有“主语言”,其中字符串始终存在:

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

或者,如果(两个字母)缩写就足够了,只需创建一个enum type即可识别该语言.

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

不对主语言进行特殊处理并将所有语言变体保留在同一个表中可能会使您在应用程序中的处理更加简单.但这实际上取决于您的要求.

相关文章

文章浏览阅读601次。Oracle的数据导入导出是一项基本的技能,...
文章浏览阅读553次。开头还是介绍一下群,如果感兴趣polardb...
文章浏览阅读3.5k次,点赞3次,收藏7次。折腾了两个小时多才...
文章浏览阅读2.7k次。JSON 代表 JavaScript Object Notation...
文章浏览阅读2.9k次,点赞2次,收藏6次。navicat 连接postgr...
文章浏览阅读1.4k次。postgre进阶sql,包含分组排序、JSON解...