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