我正在建立一个双语网站,我想知道用于产品数据库的最佳设计。该网站将只使用两种语言,绝对没有计划在未来修改网站使用两种以上的语言。
因此,考虑到这一点,为产品数据库设计架构以支持两种语言最简单的方法是什么?我可以想到两种方法:
产品表:
ID
DATE_CREATED
价格
product_info table:
ID
PRODUCT_NAME
说明
语言
product_id
通过这种设计,我们将在product_info表中为product表中的每个条目创建两个条目。产品信息表中的两个条目包含一个包含英文文本的记录和另一个包含日文文本的记录,语言字段用作指示记录存储所用语言的标志。
产品表:
ID
DATE_CREATED
价格
product_info table:
ID
product_name_en
description_en
product_name_jp
description_jp
product_id
我认为,如果我们在网站上使用超过2种语言,或者我们计划将网站扩展到3种以上的语言,那么第一种设计就有意义了。但在我们的案例中,该网站永远不会使用超过2种语言。所以,如果我们在网站上只有2种语言,我不确定这是否是最好的设计方法。对于2种语言来说,第二种设计似乎是一种更简单的方法,但我担心我可能会在这里忽略一些东西并且很难决定使用哪种方法。
对这些方法的任何想法/意见?我很乐意听到。
谢谢!
答案 0 :(得分:4)
永远不要说永远。我会选择一个单独的产品信息记录,其中包含一组信息和一种语言(第一个选项)。对多语言代码进行必要的检查是一件小事(如果你正确构建它,只需在少数几个查询中添加语言ID)。
您应该创建一个确定所需语言的通用处理程序。将生成输出的产品和每个其他元素应该具有一组使用该语言内部的属性。例如。如果你有一个Product对象,它会给你一个getDate和GetPrice方法,还有一个getProductName和getDescription方法。在内部,它将使用全局可用的语言来获取正确的信息,并通过这些方法返回它们。
这样,你只需要一个地方来根据(子)域或给定的会话变量来确定正确的语言,你只需要一些地方,从数据库加载数据,到把这种语言记在帐户里。 对于您网站的其余部分,唯一的例外是CMS,甚至不会有语言这样的东西。一切都将完全透明。它只显示'ProductName',不知道它甚至可能有不同的翻译。
以这种方式进行任何额外的开发都不会花费你的成本,并且您的网站将支持将来需要的语言。
答案 1 :(得分:1)
当您赞成在绿地项目中开发模式时,您应该始终选择最适合您的用例的选项。你说的是两种语言而不是更多,但正是大多数数据库设计师都在考虑他们的项目,然后才指示他们的客户在你的案例中添加更多的功能或语言。
如果有一个选项不会限制您轻松添加更多语言的可能性,那至少不会延长实现它的复杂性和时间,那么为什么要选择另一个呢?
所以,如果我是你,我的决定是第一个选择,不是因为你可以扩展它,但由于它是一个干净的设计,你可以轻松地在其他地方轻松地抽象其他应用程序层中的多语言事物。
您可以使用单个列标识记录的语言,而不必为特定语言所需的每个属性寻址多个列(按名称)。对于性能问题,您可以使用符合搜索条件的多列索引(id + language_id)。