2013-03-18 107 views
1

我想实现多语言系统和我碰到一个话题来了计算器,我没有得到的想法。多语言数据库设计方法

完整的问题,可以发现here

在问题选项3,它具有像下面

CREATE TABLE T_PRODUCT (
    NAME_FK  int, 
    DESCRIPTION_FK int, 
    PRICE   NUMBER(18, 2) 
) 

CREATE TABLE T_TRANSLATION (
    TRANSLATION_ID 
) 

CREATE TABLE T_TRANSLATION_ENTRY (
    TRANSLATION_FK, 
    LANGUAGE_FK, 
    TRANSLATED_TEXT NTEXT 
) 

CREATE TABLE T_TRANSLATION_LANGUAGE (
    LANGUAGE_ID, 
    LANGUAGE_CODE CHAR(2) 
) 

但我没有得到这个想法为什么我们需要T_TRANSLATION表的结构。它的工作是什么?这个问题也被问了一些意见,但他们没有得到有关这个问题的答案。

如何通过这种方式插入,然后选择产品?

回答

2

但我没有得到这个想法为什么我们需要T_TRANSLATION表。它的工作是什么?

猜测它识别领域什么需要翻译,并提供了从T_TRANSLATION_ENTRY表的外键的“目标”。所以对于一个特定的字段TRANSLATION_ID可能是1,对于其他字段(不一定在同一个表中),它可能是2等等......这样,你可以有一个有限的结构,只有3个表格覆盖翻译为无限数量的“在模型的其余部分可翻译“表格。

这就是说,我反对这样的结构,因为它没有正确执行外键(DBMS不知道“TRANSLATION_ID意味着什么,并且不能确保只有有效的值)”,并且可以一个性能猪JOIN。

我认为这是最好有一个直1:翻译表和翻译之间N的关系,即使这意味着增加了许多新的表到模型(每个翻译表基本上是一个新的翻译表)。例如:

enter image description here

+0

什么,如果我有一个表与许多外键也需要翻译,例如(人[NationalityId,MaritalStatusId,CourtesyId,名字,中间名,姓氏])国籍,MaritalStatus,礼貌是表,做你所提供的解决方案仍然有效和合适的,因为数量加入将会有太多 – Monah 2015-07-24 15:36:15

+0

那么,它基本上是翻倍了需要连接的表数:不是加入N“正常”的表,你现在_also_加入N个翻译表。这是否是一个问题,必须在有代表性的环境下进行衡量但是,没有其他解决方案能够动态地选择语言,可以避免某种额外的“连接”,无论是以数据库还是其他方式表达,数据库通常都很擅长加入... – 2015-07-24 16:34:39