我正在寻求意见,是否有更好/不同/常见的解决方案来解决以下问题:
我有一个产品数据库,其中包含产品的英文名称(该应用程序的默认语言),如果有可用的翻译,我需要这些名称的翻译。
目前我有以下设置:
一个产品表
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格式。