微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

原文地址:https://www.jb51.cc/postgresql/192842.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐