我做了一个简单的清单应用程序。在一个表中,我有Quantity、Price和TotalPrice列。哪个更好,将TotalPrice作为数量*价格,还是在我的应用程序中进行此计算并将其保存在TotalPrice中?
发布于 2011-01-16 22:36:55
数据库设计中的一条规则是(通常):不要存储也可以很容易检索到的信息。
在您的示例中,我不会创建计算列,而是在检索期间执行乘法。通过直接选择price * quantity
或通过创建包含此计算的视图。
该视图有一个额外的好处,即您可以轻松地更改公式(例如,包括增值税),而无需更改应用程序中的所有语句。
发布于 2011-01-16 22:48:07
如果您更新价格或数量,您将被迫在TotalPrice上进行2cd更新。如果另一个开发人员忘记了2cd更新怎么办?现在你有坏的数据了。
您可以使用触发器使其保持同步,但错误数据的可能性仍然存在。在一些RDMS中,触发器不会为基于集合的update中更新的每一行触发。
但有时需要它来存储计算字段。如果表很大,并且您计划搜索计算字段。(您必须存储数据以对其进行索引)。在某些设计中,您不仅存储计算字段,而且还存储聚合计算。
存储计算字段并不总是错误的,只需确保您了解其中的权衡。
编辑*编辑*另一个点。如果您计算的是Amount_Paid,当您更改计算公式时,客户实际支付的金额将会丢失。
设计来解决这个问题。如果这意味着打破一条经验法则,那就打破一些拇指。* END EDIT *
发布于 2011-01-16 22:36:05
既然可以在查询中进行计算,为什么还要存储计算列呢?
SELECT (Quantity * Price) as TotalPrice FROM my_table
https://stackoverflow.com/questions/4708539
复制相似问题