Database 多语言数据库设计方法

Database 多语言数据库设计方法,database,tsql,database-design,multilingual,Database,Tsql,Database Design,Multilingual,我正在尝试实现一个多语言系统,我遇到了一个关于stackoverflow的主题,我没有想到 完整的问题可以找到 问题中的选项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

我正在尝试实现一个多语言系统,我遇到了一个关于stackoverflow的主题,我没有想到

完整的问题可以找到

问题中的选项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_条目表中的外键提供了“目标”。因此,对于一个特定的字段,转换ID可能是1,对于其他一些字段(不一定在同一个表中),它可能是2,等等。。。这样,您就可以拥有一个只有3个表的有限结构,覆盖模型其余部分中无限数量的“可翻译”表的翻译

也就是说,我反对这种结构,因为它不能正确地强制执行外键(DBMS不“知道”TRANSLATION_ID的意思,也不能确保其中只有有效值),并且可能会影响性能

我认为最好在可翻译表和翻译之间建立一个1:N的直接关系,即使这意味着向模型中添加许多新表(基本上每个可翻译表都有一个新的翻译表)。例如:


如果我有一个包含许多外键的表,这些外键也需要翻译,例如(Person[NationaryID,MaritalStatusId,CourtSyID,FirstName,MiddleName,LastName])国籍,MaritalStatus,礼貌是表,那么您提供的解决方案是否仍然有效和合适,因为连接的数量太多了,实际上,它将需要联接的表的数量增加了一倍:不再联接N个“普通”表,而是联接N个翻译表。这是否是一个问题,必须在具有代表性的环境中进行衡量。但是,任何其他动态选择语言的解决方案都无法避免某种额外的“连接”,无论它是用数据库还是其他方式表示的,而且数据库通常擅长连接。。。