选择sql server的查询

时间:2011-05-01 19:20:36

标签: sql sql-server-2008

我有一个产品表。 在我的表中有一个字段,如productid,price,quantity,total。

比我的多种价格,数量字段和存储在总字段中的答案。

2 个答案:

答案 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中受益。