2013-03-18 161 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