开发者社区> 问答> 正文

数据库本地化

我正在寻找以下问题是否有更好/不同/共同的解决方案的意见:

我有一个产品数据库,其中包含英语(该应用程序的默认语言)产品名称,如果需要,我需要翻译名称。

目前我有此设置:

产品表

CREATE TABLE products ( id serial NOT NULL, "name" character varying(255) NOT NULL, CONSTRAINT products_pkey PRIMARY KEY (id) ) 和产品本地化表

CREATE TABLE products_l10n ( product_id serial NOT NULL, "language" character(2) NOT NULL, "name" character varying(255) NOT NULL, CONSTRAINT products_l10n_pkey PRIMARY KEY (product_id, language), CONSTRAINT products_l10n_product_id_fkey FOREIGN KEY (product_id) REFERENCES products (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE ) 并且我使用以下查询来检索本地化产品列表(在这种情况下为德语),并使用默认英语名称:

SELECT p.id, COALESCE(pl.name, p.name) from products p LEFT JOIN products_l10n pl ON p.id = pl.product_id AND language = 'de'; SQL代码使用postgres方言。数据存储为UTF-8。

问题来源于stack overflow

展开
收起
保持可爱mmm 2019-11-18 15:49:15 352 0
1 条回答
写回答
取消 提交回答
  • 对我来说看上去很好。我可能要更改的一件事是您处理语言的方式:应该可能是一个单独的表。因此,您将拥有:

    CREATE TABLE products_l10n ( product_id serial NOT NULL, language_id int NOT NULL, "name" character varying(255) NOT NULL, CONSTRAINT products_l10n_pkey PRIMARY KEY (product_id, language), CONSTRAINT products_l10n_product_id_fkey FOREIGN KEY (product_id) REFERENCES products (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE CONSTRAINT products_l10n_language_id_fkey FOREIGN KEY (language_id) REFERENCES languages (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE )

    CREATE TABLE languages ) id serial not null "language" character(2) NOT NULL ) 除此之外,我认为您将获得最佳解决方案。

    2019-11-18 15:49:26
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
数据库2025 V3 立即下载
阿里云数据库案例集下载 立即下载
阿里云数据库产品手册 立即下载