2011-01-25 55 views
0

我在建立一個雙語網站,並且想知道用於產品數據庫的最佳設計。該網站將只使用兩種語言,絕對沒有計劃修改該網站將來使用兩種以上的語言。針對雙語網站的設計

因此,考慮到這一點,設計產品數據庫模式以支持兩種語言的最簡單方法是什麼?我可以想到兩種方法:

  1. 爲每個翻譯都有單獨的記錄。事情是這樣的:

產品表:
ID
DATE_CREATED
價格

產品的詳細信息表:
ID
PRODUCT_NAME
描述
語言
product_id

使用此設計,我們將在product_info表中爲產品表中的每個條目創建兩個條目。產品信息表中的兩個條目將由一個包含英文文本的記錄和另一個包含日文文本的記錄組成,並且語言字段用作標記來指示記錄存儲的語言。

  1. 第二種方法是簡單地爲兩個翻譯保留一條記錄,但每條記錄都有一個日文和一個英文字段來存儲相應的翻譯。事情是這樣的:

產品表:
ID
DATE_CREATED
價格

產品的詳細信息表:
ID
product_name_en
description_en
product_name_jp
description_jp
PRODUCT_ID

我認爲第一個設計纔有意義,如果我們用兩種以上的語言在現場工作,或者如果我們計劃到現場延伸到3+語言的未來。但在我們的案例中,該網站將永遠不會使用兩種以上的語言。所以,我不確定這是否是最好的設計方法,如果我們只在網站上有兩種語言。第二種設計看起來對於2種語言來說是更簡單的方法,但恐怕我可能在這裏忽略了一些東西,並且很難決定使用哪種方法。

對這些方法有什麼想法/意見?我很想聽到。

謝謝!

回答

4

永遠不要說永遠。我會選擇一個單獨的產品信息記錄,其中包含一組信息和一種語言(第一個選項)。對多語言代碼進行必要的檢查是一件小巧的事情(如果您正確地構建,只需在少數查詢中添加一個語言ID)。

您應該制定一個確定所需語言的常規處理程序。將生成輸出的產品和每個其他元素應具有一組使用該語言的屬性。例如。如果你有一個Product對象,它會給你一個getDate和GetPrice方法,但也是一個getProductName和getDescription方法。在內部它將使用全球可用的語言來獲取正確的信息並通過這些方法返回它們。

這樣,您將只需要一個地方根據(子)域或給定的會話變量確定正確的語言,並且您只需要少量的地方,從數據庫加載數據,考慮到這種語言。 對於您網站的其餘部分,唯一的例外是CMS,甚至不會有語言這樣的東西。一切都會完全透明。它只會顯示'ProductName',不知道它甚至可能有不同的翻譯。

這樣做幾乎不會花費任何額外的開發,並且您的網站將支持將來所需的多種語言。

+0

upvote for「Never say never」 – Leslie 2011-01-25 19:50:02

1

由於您贊成在綠地項目中開發模式,您應該始終選擇最適合您的用例的選項。你談論的是兩種語言,而不是更多,但是大多數數據庫設計人員都在考慮他們的項目,然後纔得到客戶的指示,在你的案例中添加更多的功能或語言。

如果有一個選項不會限制您輕鬆添加幾種語言的可能性,那至少不會延長實現它的複雜性和時間,那麼爲什麼要選擇另一種呢?所以如果我是你,我的決定是第一個選擇,不是因爲你可以擴展它,而是因爲它是一個乾淨的設計,你可以很容易地在其他應用程序層容易地抽取多語言的東西。

您可以使用單個列標識記錄的語言,並且不必針對特定語言所需的每個屬性尋址多個列(按名稱)。對於性能問題,您可以使用符合搜索條件的多列索引(id + language_id)。

+0

在WHERE中更改參數比改變選擇列表要好得多,好得多。 – 2011-01-25 16:41:33