我正在尝试实现一个多语言系统,我遇到了一个关于stackoverflow的话题,我没有理解。
可以找到完整的问题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
表。它的工作是什么?这个问题也被问了一些评论,但他们没有得到关于这个问题的答案。
如何通过这种方法插入和选择产品?
答案 0 :(得分:2)
但我并不知道为什么我们需要T_TRANSLATION表。它的工作是什么?
我猜测它识别需要翻译的字段,并为T_TRANSLATION_ENTRY表中的FOREIGN KEY提供“目标”。因此对于特定字段,TRANSLATION_ID可能为1,对于某些其他字段(不一定在同一个表中),它可能是2等...这样,您可以只有3个表的有限结构,涵盖无限数量的翻译“可转换的“模型其余部分的表格。
话虽如此,我反对这样的结构,因为它没有正确地强制执行外键(DBMS不“知道”TRANSLATION_ID的含义,并且无法确保只有有效值)并且可以是对JOIN的表现感兴趣。
我认为最好在可翻译表和翻译之间建立直接的1:N关系,即使这意味着向模型添加许多新表(实际上每个可翻译表的一个新翻译表)。例如: