我有许多数据库表,其中包含需要本地化的名称和描述列.我最初尝试设计支持这种情况的数据库模式是这样的:
product ------- id name description local_product ------- id product_id local_name local_description locale_id locale ------ id locale
但是,此解决方案需要为包含需要本地化的名称和描述列的每个表创建一个新的local_ table.为了避免这种开销,我重新设计了模式,因此只需要一个本地化表
product ------- id localization_id localization ------- id local_name local_description locale_id locale ------ id locale
以下是有2个表(产品和国家/地区)需要本地化时将存储在此架构中的数据示例:
国家
id,localization_id ----------------------- 1,5
产品
id,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
请注意,本地化表的复合主键是(id,locale_id),但product表中的外键仅指该复合PK的第一个元素.从标准化的POV来看,这似乎是一件“坏事”.
有什么方法可以解决这个问题,或者,是否有一个完全不同的架构支持本地化而不为每个可本地化的表创建单独的表?
更新:
许多受访者提出了一种解决方案,需要为每个可本地化的表创建一个单独的表.但是,这正是我想要避免的.我上面提出的模式几乎解决了我满意的问题,但我不满意的是,localization_id外键只引用了本地化表中相应主键的一部分.
谢谢,
唐
解决方法
我认为没关系.您描述的是产品与其本地化文本之间的一对多关系.
我想知道你是否应该本地化英语而不是在产品表中对其进行非规范化.