多语言数据库设计方法
问题描述:
我想实现多语言系统和我碰到一个话题来了计算器,我没有得到的想法。多语言数据库设计方法
完整的问题,可以发现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
表的结构。它的工作是什么?这个问题也被问了一些意见,但他们没有得到有关这个问题的答案。
如何通过这种方式插入,然后选择产品?
答
但我没有得到这个想法为什么我们需要T_TRANSLATION表。它的工作是什么?
我猜测它识别领域什么需要翻译,并提供了从T_TRANSLATION_ENTRY表的外键的“目标”。所以对于一个特定的字段TRANSLATION_ID可能是1,对于其他字段(不一定在同一个表中),它可能是2等等......这样,你可以有一个有限的结构,只有3个表格覆盖翻译为无限数量的“在模型的其余部分可翻译“表格。
这就是说,我反对这样的结构,因为它没有正确执行外键(DBMS不知道“TRANSLATION_ID意味着什么,并且不能确保只有有效的值)”,并且可以一个性能猪JOIN。
我认为这是最好有一个直1:翻译表和翻译之间N的关系,即使这意味着增加了许多新的表到模型(每个翻译表基本上是一个新的翻译表)。例如:
什么,如果我有一个表与许多外键也需要翻译,例如(人[NationalityId,MaritalStatusId,CourtesyId,名字,中间名,姓氏])国籍,MaritalStatus,礼貌是表,做你所提供的解决方案仍然有效和合适的,因为数量加入将会有太多 – Monah 2015-07-24 15:36:15
那么,它基本上是翻倍了需要连接的表数:不是加入N“正常”的表,你现在_also_加入N个翻译表。这是否是一个问题,必须在有代表性的环境下进行衡量但是,没有其他解决方案能够动态地选择语言,可以避免某种额外的“连接”,无论是以数据库还是其他方式表达,数据库通常都很擅长加入... – 2015-07-24 16:34:39