Database design 双语网站的设计

Database design 双语网站的设计,database-design,Database Design,我正在建立一个双语网站,我想知道产品数据库的最佳设计。该网站将永远只使用两种语言,绝对没有计划修改该网站使用两种以上的语言在未来 因此,考虑到这一点,为支持两种语言的产品数据库设计模式的最简单方法是什么?我可以想出两种方法: 每个翻译都有单独的记录。大概是这样的: 产品表: id 创建日期\u 价格 产品信息表: id 产品名称 说明 语言 产品标识 通过这种设计,我们将在product_info表中为product表中的每个条目创建两个条目。product info表中的两个条目将由一条包含英

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

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

  • 每个翻译都有单独的记录。大概是这样的:
  • 产品表:
    id
    创建日期\u
    价格

    产品信息表:
    id
    产品名称
    说明
    语言
    产品标识

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

  • 第二种方法是简单地为两个翻译保留一个记录,但每个记录都有一个日语和一个英语字段来存储相应的翻译。大概是这样的:
  • 产品表:
    id
    创建日期\u
    价格

    产品信息表:
    id
    产品名称\u en
    说明\u en
    产品名称\u jp
    说明\u jp
    产品标识

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

    对这些方法有何想法/意见?我很想听


    谢谢

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

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

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


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

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

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

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


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

    由于您支持在绿地项目中开发模式,您应该始终选择最适合您的用例的选项。您谈论的是两种语言,而不是更多,但在客户指示他们在您的案例中添加更多功能或语言之前,大多数数据库设计师都在考虑他们的项目

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

    因此,如果我是你,我的决定是第一个选择,不是因为你可以扩展它,而是因为它是一个干净的设计,你可以很容易地在其他应用层中抽象出多语言的东西

    您可以使用单个列标识记录的语言,而不必为特定语言所需的每个属性寻址多个列(按名称)。对于性能问题,可以使用符合搜索条件(id+la)的多列索引