2
A
回答
5
不要在表格中存储派生值 - 这是不好的设计。
由于总数是价格和数量的乘积,所以当您有这些数值时,您可以随时计算它 - 为什么要存储它?如果您这样做,您正在创建数据库中数据不一致的可能性。
直接从SQL检索这样的价值是微不足道的,而不需要存储它:
SELECT price, quantity, price * quantity AS total
FROM product
更新:
正如@马丁指出,2005+具有Computed Columns这是SQL服务器非持久性或索引列,作为方便返回计算结果。
我强调这些列是而不是持久存在。
1
可以为此
ALTER TABLE Products ADD total AS price * quantity
上述定义列既不坚持也不被索引创建一个计算列,因此是只为你的查询提供了方便。
如果您的查询需要在搜索谓词中使用total
,您可以考虑对这样的计算列进行索引。任何这样的持久值都由SQL Server自动维护,从而避免数据异常的潜在问题。
此外,在您正在进行此类查询的情况下,即使没有索引这些列,您的查询也可以从improved cardinality estimates due to statistics on the computed column中受益。
相关问题
- 1. SQL Server查询选择
- 2. SQL Server 2008,条件选择查询
- 3. SQL Server 2012 - 选择查询闰年
- 4. SQL Server - 选择不同的查询
- 5. SQL Server 2008选择查询难度
- 6. SQL Server XML查询:如何选择值?
- 7. SQL Server 2005中选择查询
- 8. SQL SERVER查询选择名字,姓氏
- 9. SQL Server查询 - 选择ID计数()
- 10. SQL Server:嵌套选择查询
- 11. 选择插入SQL Server子查询
- 12. SQL Server。选择日期范围查询
- 13. SQL Server查询 - 使用DISTINCT选择COUNT(*)
- 14. sql选择查询
- 15. SQL查询选择
- 16. SQL查询选择
- 17. 选择SQL查询
- 18. SQL - 选择查询
- 19. SQL:选择查询
- 20. 更改DB2选择查询到SQL Server查询
- 21. 要筛选SQL Server查询
- 22. SQL Server 2005将变量设置为选择查询的结果
- 23. 选择为SQL Server表
- 24. 将SQL选择查询更改为VBA
- 25. SQL查询,选择不为空
- 26. SQL插入选择选择查询
- 27. SQL查询:选择再选择
- 28. SQL更新查询选择查询
- 29. SQL Server查询行为
- 30. sql查询可供选择
完全取决于OP的查询内容。如果他们想要通过'total'排序的'TOP 10'产品,那么计算列将对此有利。计算列几乎否定了所有的论点,因为它们确保不存在不一致数据的可能性,并且不必持久化。 – 2011-05-01 21:52:31
@Martin - 所以你同意'total'列不会被保留。 – Oded 2011-05-02 04:43:45
我没有说过。这取决于OP的查询内容。如果他们想要运行查询,例如“查找总数> 10000的所有产品”,那么索引它可能是合理的。 – 2011-05-02 12:30:33