Dón*_*nal 8 schema database-design internationalization
我有许多数据库表,包含需要本地化的列name
和description
列.我最初尝试设计一个支持这种情况的数据库模式是这样的:
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
表中相应主键的一部分这一事实感到不满.
谢谢,唐
我认为正确的方法是创建额外的表,然后执行额外的步骤并从第一个表中删除所有特定于语言的资源。
\n\n所以你会有:
\n\n产品
\n\nid \n-name removed\n-description removed\n
Run Code Online (Sandbox Code Playgroud)\n\n产品本地化
\n\nproductid, 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\nid, locale\n--------------\n1, en\n3, fr\n4, de\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
3274 次 |
最近记录: |