【问题标题】:How to design tables when using multiple languages使用多种语言时如何设计表格
【发布时间】:2010-07-07 01:36:33
【问题描述】:

在网站上使用多种语言时,您建议如何设计表格?例如,假设我们有一个名为 product 的表。那个可能包含 SKU、价格、排序顺序和其他设置等内容。然而,名称和描述将以多种语言提供。这些文本是否应该在单独的表格中,例如:

tbl product_lang_cn
产品编号 |姓名 |说明
tbl product_lang_de
产品编号 |姓名 |说明

还是应该把所有东西都放在一张桌子上
tbl product_lang
产品编号 |朗 |姓名 |说明

后者感觉更正确,如果添加新语言,它将保持数据库的完整性。当表变大时,是否有任何性能差异需要牢记?易于维护等

干杯

【问题讨论】:

    标签: database-design


    【解决方案1】:

    第二种设计肯定更好。关于第一个的明确提示:两个表具有相同的列,有关数据的事实在表的名称中(“en”、“de”)。

    就性能而言,一张桌子甚至可能比两张(或更多)桌子更好。如果您创建了正确的索引(例如,您需要一个关于 lang 的索引),那么只需访问一个表即可找到任何产品的描述。

    【讨论】:

    • 谢谢内德!我是这么想的,但是我们学校还没有到数据库,我想先开始=)
    • +1 不仅包括正确答案,还包括在未来发现相同情况的提示 :)
    【解决方案2】:

    我想提出另一个解决方案:

    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 上面提到的,索引非常重要,性能差异(这种方法当然会慢一些)会非常小,但是 IMO 更容易提供可维护性,因为不需要知道什么*s在lang 中进行(从字面上看,我想你明白了)。

    这似乎有点过头了,但我想我会采用这种方法。

    【讨论】:

      猜你喜欢
      • 2015-02-23
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多