1

这是一个通用的数据库设计问题。下表假设:数据库设计:如何存储转换后的数字?

====================================================================== 
| product_translation_id | language_id | product_id | name | price | 
====================================================================== 
| 1      | 1   | 1   | foobar | 29.99 | 
---------------------------------------------------------------------- 
| 2      | 2   | 1   | [email protected]#$%^ | &*()_ | 
---------------------------------------------------------------------- 

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

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

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

+0

我的建议是将数量存储在一列中,将单位/区域/语言定义存储在另一列中。 – 2011-05-12 03:48:28

回答

2

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

  1. 您将结束与一致性问题,因为你是在两个不同的地方存放在两个不同的格式同样的事情。
  2. 您将以文本格式存储数字数据。

第一个问题会导致你很多头痛,当你需要更新你的价格和你的会计师会讨厌你弄乱书。

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

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

相关问题