我制作了一个简单的库存应用程序。在表格中,我有列数量,价格和总价格。
哪个更好,将TotalPrice设为Computed Column
作为数量*价格或在我的应用程序中进行此计算并将其保存在TotalPrice中?
答案 0 :(得分:2)
数据库设计中的一条规则(通常):不存储也可以轻松检索的信息。
在你的情况下,我不会创建计算列,而是在检索期间进行乘法运算。通过直接选择price * quantity
或创建包含此计算的视图。
该视图还有一个额外的好处,即您可以轻松更改公式(例如包含增值税),而无需更改应用程序中的所有语句。
答案 1 :(得分:1)
如果您更新价格或数量,您将被迫在TotalPrice上进行2cd更新。如果其他开发人员忘记2cd更新怎么办?现在你有糟糕的数据。
您可以使用触发器使其保持同步,但仍存在错误数据的可能性。在某些RDMS中,触发器不会针对基于集合的更新中更新的每一行触发。
但有时需要存储计算字段。如果表格很大并且您计划搜索计算字段。 (您必须存储数据以对其进行索引)。在某些设计中,您不仅可以存储计算字段,还可以存储聚合计算。
存储计算字段并不总是错误,只需确保您知道权衡。
*编辑* 还有一点。如果计算“Amount_Paid”,则更改计算公式时,客户支付的实际金额将会丢失。
设计解决问题。如果这意味着违反经验法则,那就打破一些拇指。 * END EDIT *
答案 2 :(得分:0)
为什么在可以在查询中进行计算时存储计算列?
SELECT (Quantity * Price) as TotalPrice FROM my_table