数据库设计:如何存储转换后的数字?

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

======================================================================
| product_translation_id | language_id | product_id | name   | price |
======================================================================
| 1                      | 1           | 1          | foobar | 29.99 |
----------------------------------------------------------------------
| 2                      | 2           | 1          | !@#$%^ | &*()_ |
----------------------------------------------------------------------

(假设language_id = 2是一些不基于拉丁字符的语言,等等)

将我翻译的价格存储在数据库中对我来说是否正确? 虽然它允许我正确显示翻译,但我担心在我想对它们进行数学运算时会给我带来麻烦(例如,向&*()_ )添加10%的销售税。

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


如果你可以通过编程的方式将“29.99”转换为“&*()_”,那么我会把价格放在产品表中,并将其转换为显示层。 如果你存储了两次,那么你将会遇到两个明显的问题:

  • 你最终会遇到一致性问题,因为你在两个不同的地方以两种不同的格式存储相同的东西。
  • 您将以文本格式存储数字数据。
  • 当你需要更新价格时,第一个问题会导致很多头痛,而你的会计师会因为弄乱书本而讨厌你。

    第二个问题会让你的数据库憎恨你,只要你需要在数据库中进行任何计算或比较。 反复调用CONVERT(string AS DECIMAL)将会产生成本。

    您可以在产品表中将价格保留为数字形式(用于计算,排序等),然后以字符串的形式在翻译表中进行本地化翻译。 这种方法只是放大了上述两个问题。 但是,如果您需要人工翻译您的数字,那么这种方法可能是必要的。 如果你坚持这样做,那么你可以通过在每次更新之后运行某种完整性检查器来缓解一致性问题,甚至可以用某种触发器来包装完整性检查器。

    链接地址: http://www.djcxy.com/p/37461.html

    上一篇: Database Design: how to store translated numbers?

    下一篇: How to translate the fields of a database model?