我正在寻找以下问题是否有更好/不同/共同的解决方案的意见:
我有一个产品数据库,其中包含英语(该应用程序的默认语言)产品名称,如果需要,我需要翻译名称。
目前我有此设置:
产品表
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
对我来说看上去很好。我可能要更改的一件事是您处理语言的方式:应该可能是一个单独的表。因此,您将拥有:
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 ) 除此之外,我认为您将获得最佳解决方案。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。