2010-07-04 57 views
1

如何在網站上使用多種語言時設計表格?舉例來說,我們有一個名爲product的表。這可能包含諸如SKU,價格,排序順序和其他設置等內容。但是,名稱和說明將以多種語言提供。應這些文本是在像單個表:如何在使用多種語言時設計表格

TBL product_lang_en
PRODUCT_ID |名稱|說明
tbl product_lang_de
product_id |名稱|說明

還是應該一切都在一個表
TBL product_lang
的product_id收集| lang |名稱|描述

後者感覺更加正確,並且如果添加新語言,將保持數據庫的完整性。當桌子變大時,記住的表現有什麼不同?易於維護等

乾杯

回答

4

第二個設計絕對更好。第一條清楚的提示:兩個表具有相同的列,關於數據的事實在表格名稱中(「en」,「de」)。

就性能而言,對於一張表比兩張(或更多)甚至更好。如果你創建了合適的索引(例如你需要一個索引),那麼只需要訪問一個表來查找任何產品的描述。

+0

謝謝Ned!這是我的想法,但我們還沒有來到學校的數據庫,我想先開始=) – 2010-07-04 14:38:57

+0

+1因爲不僅包括正確的答案,而且還提供了發現未來相同情況的提示:) – psmears 2010-07-04 15:46:15

0

我想提出另一種解決方案:

product 
-------------------------------------- 
id SKU(or any other internal name) 
//depending on the structure, you can skipp the id and replace it with the SKU/... 

lang 
-------------------------------------------------- 
id product_id name  lang  description 

這可能似乎是一個缺點,但對我來說將有一定的優勢:

  • 可以有相關的產品,更多信息真的屬於該產品,例如價格,增值稅,...
  • 當你刪除一個產品,你可以從我的例子也刪除匹配語言吧
  • SKU約束可以是幾乎任何幫助內部(意爲不暴露於用戶)號碼,姓名。通過這種方式,用戶無需查看某種產品的所有語言。在第二個設計中,人們可以很難用多種語言刪除產品。
  • 訪問數據的應用程序可以決定它自己應該提供什麼語言。在做UI時,你只需要擔心產品表中的唯一標識符,代碼就可以決定哪種語言是合適的,並相應地選擇行。
  • 正如Ned Batchelder上面提到的,索引非常重要,性能上的差異(當然這種方法會變慢)將會非常小,但由於不需要知道lang中發生了什麼,所以可維護性將更容易得到IMO(從字面上來看,我認爲你明白了) 。

這可能看起來有些過頂,但我想我會採用這種方法。