gpt4 book ai didi

sql - 数据库本地化

转载 作者:太空狗 更新时间:2023-10-30 01:44:07 26 4
gpt4 key购买 nike

如果以下问题可能有更好/不同/通用的解决方案,我正在征求意见:


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

目前我有这个设置:

产品表

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 格式存储。

最佳答案

我觉得不错。我可能会改变的一件事是你处理语言的方式:那可能应该是一个单独的表。因此,您将拥有:

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
)

除此之外,我认为您已经找到了可能的最佳解决方案。

关于sql - 数据库本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/189680/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com