【发布时间】:2010-11-22 07:31:41
【问题描述】:
我有许多包含需要本地化的name 和description 列的数据库表。我最初尝试设计一个支持这一点的数据库模式是这样的:
product
-------
id
name
description
local_product
-------
id
product_id
local_name
local_description
locale_id
locale
------
id
locale
但是,此解决方案需要为每个包含 name 的表和需要 localization 的说明列创建一个新的 local_ 表。为了避免这种开销,我重新设计了架构,以便只需要一个 localization 表
product
-------
id
localization_id
localization
-------
id
local_name
local_description
locale_id
locale
------
id
locale
以下是当有 2 个表(产品和国家/地区)需要本地化时存储在此架构中的数据示例:
国家
id, localization_id
-----------------------
1, 5
产品
id, localization_id
-----------------------
1, 2
本地化
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
语言环境
id, locale
--------------
2, en
3, fr
4, de
注意localization表的复合主键是(id, locale_id),但product表中的外键只指这个复合PK的第一个元素。从规范化的 POV 来看,这似乎是“一件坏事”。
有什么办法可以解决这个问题,或者,是否有一个完全不同的架构支持本地化,而无需为每个可本地化的表创建单独的表?
更新:
许多受访者提出了一种解决方案,该解决方案需要为每个可本地化的表创建一个单独的表。然而,这正是我想要避免的。我上面提出的架构几乎可以让我满意地解决问题,但我对localization_id 外键仅引用localization 表中相应主键的一部分这一事实感到不满。
谢谢, 唐
【问题讨论】:
-
“但我对 localization_id 外键仅引用本地化表中相应主键的一部分这一事实感到不满”。我没看出问题,产品和本地化是一对多的关系,数据库结构符合要求,你找到了一个很好的解决方案。
-
这应该发布在dba.stackexchange.com
标签: database-design internationalization schema