Database 数据库设计:如何存储翻译后的数字?

Database 数据库设计:如何存储翻译后的数字?,database,database-design,localization,internationalization,Database,Database Design,Localization,Internationalization,这是一个一般的数据库设计问题。假设下表: ====================================================================== | product_translation_id | language_id | product_id | name | price | ====================================================================== | 1

这是一个一般的数据库设计问题。假设下表:

======================================================================
| product_translation_id | language_id | product_id | name   | price |
======================================================================
| 1                      | 1           | 1          | foobar | 29.99 |
----------------------------------------------------------------------
| 2                      | 2           | 1          | !@#$%^ | &*()_ |
----------------------------------------------------------------------
(假设语言_id=2是不基于拉丁字符等的语言)

我是否可以将翻译后的价格存储在DB中?虽然它允许我正确地显示翻译,但我担心当我想对翻译进行数学运算时,它会给我带来问题(例如,向
&*()添加10%的销售税)


处理数字翻译的好方法是什么?

如果您可以通过编程将“29.99”转换为“&*()\”,那么我会将价格放在产品表中,并将其翻译保留在显示层。如果存储两次,则会出现两个明显的问题:

  • 您最终会遇到一致性问题,因为您正在以两种不同的格式将相同的内容存储在两个不同的位置
  • 您将以文本格式存储数字数据
  • 当你需要更新你的价格时,第一个问题会让你头疼,你的会计师会因为你把账目弄得一团糟而讨厌你

    第二个问题将使您的数据库在需要在数据库中进行任何计算或比较时讨厌您。反复调用
    CONVERT(字符串为十进制)
    会有代价


    您可以将价格以数字形式保存在产品表中(用于计算、排序等),然后将本地化翻译作为字符串保存在您的翻译表中。不过,这种方法只是放大了上述两个问题。然而,如果您需要人类翻译您的数字,那么这种方法可能是必要的。如果您遇到这种情况,那么您可以通过在每次更新后运行某种类型的健全性检查程序来缓解一致性问题,您甚至可以将健全性检查程序包装在某种类型的触发器中。

    我的建议是将数量存储在一列中,将单位/区域设置/语言定义存储在另一列中。