2010-07-04 94 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(从字面上来看,我认为你明白了) 。

这可能看起来有些过顶,但我想我会采用这种方法。