良好的数据库表设计用于存储本地化数据版本

7

我正在尝试设计一些表格来存储数据,这些数据以后需要转换为不同的语言。有人能提供一些相关的“最佳实践”或指南吗?

谢谢

4个回答

16

假设你有一个产品表格,看起来像这样:

Products
----------
id
price

Products_Translations
----------------------
product_id
locale
name
description

那么,您只需加入 product_id = product.id 并且 locale='en-US' 进行连接。

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


我喜欢那个,聪明。并且可以无痛地使用ORM。 - Ivan G.

1

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

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

  • 语言表
    • 这个表将存储语言和一个键:
    [1, 英语], 
    [2, 西班牙语]
  • 数据定义表
    • 当首次输入动态数据时,在这个表中创建一个带有标识符的记录:
      [1, '数据1'], 
      [2, '数据2']
  • 数据语言表
    • 这个表将链接语言、数据定义和翻译
      所以:[数据语言, 数据定义, 语言, 翻译]
          [1, 1, 1, '红色']
          [2, 1, 2, '红色']
          [3, 2, 1, '绿色']
          [4, 2, 2, '绿色']
等等...

当输入动态数据时,先创建默认的“英语”记录,然后随时进行翻译。


为什么你有一个Data_Language列?为什么不直接将PK设置为(Data_Definition,Language)? - Hannes Ovrén
数据语言列看起来像是列的标识符。在我看来,这不是一个坏设计,所以对我来说加1。 - Ignacio Soler Garcia

0

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


0
通常情况下,您应该查看具有常见非本地化数据的父表和具有本地化数据和语言键的子表。如果您所说的动态是指它经常变化,您可能需要查看使用触发器和类似“translationRequired”标志的内容,以标记在更改后需要翻译的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接