【问题标题】:Design for bi-lingual website双语网站设计
【发布时间】:2011-01-25 15:39:03
【问题描述】:

我正在建立一个双语网站,并且想知道用于产品数据库的最佳设计。该网站将永远只使用两种语言,绝对没有计划在未来修改网站以使用两种以上的语言。

因此,考虑到这一点,为产品数据库设计架构以支持两种语言的最简单方法是什么?我可以想到两种方法:

  1. 每个翻译都有单独的记录。像这样:

产品表:
身份证
创建日期
价格

product_info 表:
身份证
产品名称
说明
语言
product_id

通过这种设计,我们将在 product_info 表中为 product 表中的每个条目创建两个条目。产品信息表中的两个条目将由一个包含英文文本的记录和另一个包含日文文本的记录组成,并且语言字段充当标志以指示存储记录的语言。

  1. 第二种方法是简单地为两种翻译保留一个记录,但每条记录都有一个日语和一个英语字段来存储相应的翻译。像这样:

产品表:
身份证
创建日期
价格

product_info 表:
身份证
产品名称_zh
描述_zh
产品名称_jp
描述_jp
product_id

如果我们在网站中使用超过 2 种语言,或者如果我们计划在未来将网站扩展到 3 种以上的语言,我认为第一个设计是有意义的。但在我们的例子中,该网站永远不会使用超过 2 种语言。所以,如果我们在网站上只有 2 种语言,我不确定这是否是最好的设计方法。对于 2 种语言,第二种设计似乎是一种更简单的方法,但我担心我可能在这里忽略了一些东西,并且很难决定使用哪种方法。

对这些方法有什么想法/意见吗?我很想听。

谢谢!

【问题讨论】:

    标签: database-design


    【解决方案1】:

    永远不要说永远。我会选择一个单独的产品信息记录,其中包含一组信息和一种语言(第一个选项)。对多语言代码进行必要的检查是小菜一碟(如果构建正确,只需在少数查询中添加语言 ID)。

    您应该创建一个通用处理程序来确定您想要的语言。将生成输出的产品和每个其他元素应该具有一组使用该语言内部的属性。例如。如果你有一个 Product 对象,它会给你一个 getDate 和 GetPrice 方法,还有一个 getProductName 和 getDescription 方法。在内部,它将使用全球可用的语言来获取正确的信息并通过这些方法返回它们。

    这样,您只需要一个地方来根据(子)域或给定的会话变量确定正确的语言,并且您只需要少数几个地方,您从数据库中加载数据,以考虑到这种语言。 对于您网站的其余部分,唯一的例外是 CMS,甚至不会有语言这样的东西。一切都将完全透明。它只会显示“ProductName”,甚至不知道它可能有不同的翻译。

    这样做几乎不会花费您任何额外的开发成本,而且您的网站将支持未来所需的尽可能多的语言。

    【讨论】:

      【解决方案2】:

      由于您赞成在新建项目中开发架构,因此您应该始终选择最适合您的用例的选项。您谈论的是两种语言而不是更多,但这正是大多数数据库设计人员在考虑他们的项目之前,在他们的客户指示他们为您的案例添加更多功能或语言之前。

      如果有一个选项不会限制您轻松添加更多语言的可能性,至少不会增加实现它的复杂性和时间,那么您为什么要选择另一种?

      所以如果我是你,我的决定是第一个选择,不是因为你可以扩展它,而是因为它是一个简洁的设计,你可以轻松地在其他应用程序层中轻松抽象多语言的东西。

      您可以使用单个列来识别记录的语言,而不必为特定语言所需的每个属性处理多个列(按名称)。对于性能问题,您可以使用与您的搜索条件匹配的多列索引 (id+language_id)。

      【讨论】:

      • 更改 WHERE 中的参数比更改选择列表要好得多。
      猜你喜欢
      • 2011-01-29
      • 2013-01-11
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多