2011-01-25 60 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