【问题标题】:Good database table design for storing localized versions of data [closed]用于存储本地化数据版本的良好数据库表设计[关闭]
【发布时间】:2010-09-13 02:18:24
【问题描述】:

我正在尝试设计一些表来存储一些数据,这些数据稍后必须转换为不同的语言。任何人都可以为此提供一些“最佳实践”或指南吗?

谢谢

【问题讨论】:

    标签: sql sql-server database-design localization


    【解决方案1】:

    假设您有一个如下所示的产品表:

    Products
    ----------
    id
    price
    
    Products_Translations
    ----------------------
    product_id
    locale
    name
    description
    

    然后您只需加入 product_id = product.id 和 where locale='en-US'

    当然这会对性能产生影响,因为您现在需要一个连接来获取名称和描述,但它允许以后使用任意数量的语言环境。

    【讨论】:

    • 我喜欢这样,聪明。使用 ORM 轻松工作。
    【解决方案2】:

    您能描述一下“动态数据”的性质吗?

    实现这一点的一种方法是使用 3 个不同的表:

    • 语言表
      • 此表将存储语言和密钥:
    [1、英文], [2、西班牙语]
    • 数据定义表
      • 当第一次输入动态数据时,在此表中使用数据的标识符和标识符进行记录:
    [1, '数据1'], [2,“数据2”]
    • Data_Language 表
      • 此表将链接语言、数据定义和翻译
    所以:[Data_Language,Data_Definition,语言,翻译] [1, 1, 1, '红色'] [2, 1, 2, '罗霍'] [3, 2, 1, '绿色'] [4, 2, 2, '佛得角'] 等等 ...

    输入动态数据后,创建默认的“英语”记录,然后在您空闲时进行翻译。

    【讨论】:

    • 为什么有 Data_Language 列?为什么不直接将 PK 设置为 (Data_Definition, Language)?
    • Data_Language 列看起来像列的 id。在我看来这不是一个糟糕的设计,所以对我来说 +1。
    【解决方案3】:

    我相信有关您正在做什么的更多信息会有所帮助。你能提供一些数据样本吗?你所说的动态是什么意思?随着时间的推移将插入大量数据并对数据进行大量更改,或者数据只需要在很短的时间内可用。

    【讨论】:

      【解决方案4】:

      一般来说,您可能应该查看具有常见非本地化数据的父表,以及具有本地化数据和语言键的子表。如果通过动态,您的意思是它经常更改,您可能想看看使用触发器和类似“translationRequired”标志的东西来标记更改后需要翻译的内容。

      【讨论】:

        猜你喜欢
        • 2010-09-05
        • 1970-01-01
        • 1970-01-01
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多