我有一个产品表。 在我的表中有一个字段,如productid,price,quantity,total。
比我的多种价格,数量字段和存储在总字段中的答案。
答案 0 :(得分:5)
不要在表格中存储派生值 - 这是糟糕的设计。
由于总和是价格和数量的乘积,因此您可以随时计算出这些值 - 为什么存储它?如果这样做,您将在数据库中创建不一致数据的可能性。
直接从SQL中检索这样的值是微不足道的,无需存储它:
SELECT price, quantity, price * quantity AS total
FROM product
更新
正如@Martin指出的那样,SQL Server 2005+有Computed Columns个非持久化或索引列,方便返回计算结果。
我强调这些是不持久的列。
答案 1 :(得分:1)
您可以为此
创建计算列ALTER TABLE Products ADD total AS price * quantity
根据上面的定义,该列既不会持久存储也不会编入索引,因此只是方便您的查询。
如果您的查询需要在搜索谓词中使用total
,您可以考虑索引此类计算列。 SQL Server会自动维护任何此类持久值,从而避免数据异常的潜在问题。
此外,如果您正在进行此类查询,那么即使不对此类列表编制索引,您的查询也可以从improved cardinality estimates due to statistics on the computed column中受益。