1

我正在尝试实现一个多语言系统,但我在 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桌子。它的工作是什么?这个问题也被问了一些评论,但他们没有得到关于这个问题的答案。

如何通过这种方法插入和选择产品?

4

1 回答 1

4

但我不明白为什么我们需要 T_TRANSLATION 表。它的工作是什么?

它确定了需要翻译的字段并为 T_TRANSLATION_ENTRY 表中的 FOREIGN KEY 提供“目标”。所以对于一个特定的字段 TRANSLATION_ID 可能是 1,对于其他一些字段(不一定在同一个表中)它可能是 2 等等......这样,你可以有一个有限的结构,只有 3 个表,涵盖无限数量的翻译“模型其余部分中的可翻译”表。

话虽这么说,我反对这样的结构,因为它没有正确执行外键(DBMS 不“知道” TRANSLATION_ID 的含义,也无法确保其中只有有效值)并且可能会导致性能下降加入。

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

在此处输入图像描述

于 2013-03-18T13:37:29.890 回答