数据库本地化

Dón*_*nal 8 schema database-design internationalization

我有许多数据库表,包含需要本地化的列namedescription列.我最初尝试设计一个支持这种情况的数据库模式是这样的:

product
-------
id
name
description


local_product
-------
id
product_id
local_name
local_description
locale_id


locale
------
id
locale
Run Code Online (Sandbox Code Playgroud)

然而,这种解决方案需要一个新local_的,包含每个表的表name需要和description列localization.为了避免这种开销,我重新设计了模式,因此只需要一个localization

product
-------
id
localization_id


localization    
-------
id    
local_name
local_description
locale_id


locale
------
id
locale
Run Code Online (Sandbox Code Playgroud)

以下是有2个表(产品和国家/地区)需要本地化时将存储在此模式中的数据示例:

国家

id,     localization_id
-----------------------
1,      5
Run Code Online (Sandbox Code Playgroud)

产品

id,     localization_id
-----------------------
1,      2
Run Code Online (Sandbox Code Playgroud)

本土化

id,     local_name,   local_description,     locale_id
------------------------------------------------------
2,      apple,        a delicious fruit,     2
2,      pomme,        un fruit délicieux,    3
2,      apfel,        ein köstliches Obst,   4
5,      ireland,      a small country,       2
5,      irlande,      un petite pay,         3
Run Code Online (Sandbox Code Playgroud)

现场

id,     locale
--------------
2,      en
3,      fr
4,      de
Run Code Online (Sandbox Code Playgroud)

请注意,表的复合主键localization(id, locale_id),但表中的外键product仅引用此复合PK的第一个元素.从标准化的POV来看,这似乎是一件"坏事".

有什么方法可以解决这个问题,或者,是否有一个完全不同的架构支持本地化而不为每个可本地化的表创建单独的表?

更新: 许多受访者提出了一种解决方案,需要为每个可本地化的表创建单独的表.但是,这正是我想要避免的.我上面提出的模式几乎解决了我满意的问题,但我localization_id对外键只引用localization表中相应主键的一部分这一事实感到不满.

谢谢,唐

Dan*_*Dan 1

我认为正确的方法是创建额外的表,然后执行额外的步骤并从第一个表中删除所有特定于语言的资源。

\n\n

所以你会有:

\n\n

产品

\n\n
id \n-name removed\n-description removed\n
Run Code Online (Sandbox Code Playgroud)\n\n

产品本地化

\n\n
productid, locale_id, name,   description\n------------------------------------------------------\n1,         3,         pomme,  un fruit d\xc3\xa9licieux\n1,         4,         apfel,  ein k\xc3\xb6stliches Obst\n1,         1,         apple,  a delicious fruit\n
Run Code Online (Sandbox Code Playgroud)\n\n

语言环境

\n\n
id,     locale\n--------------\n1,      en\n3,      fr\n4,      de\n
Run Code Online (Sandbox Code Playgroud)\n