如果您的值僅取決於一個或多個其他字段的+/-常量(比如零售價格爲&折扣價格),那麼更好地存儲這些值還是計算他們「在飛行中」檢索數據時?存儲「衍生」值與提取時計算它們
6
A
回答
6
我同意托米斯拉夫 - 儘量避免冗餘,因爲你可以結束與多個表的數據彼此不同意。它使更新更加痛苦。
雖然有一些值得考慮的例外與數據庫性能無關。
- 當計算值(例如一些複雜的數學函數)很痛苦時,那麼存儲是有意義的(您可以將該列想象爲'最後計算的值')。
- 您可能有隨時間變化的輸入,例如,費用來自費用率,但是費率在配置表中作爲單個值存儲。您可能想要記錄費用,因爲歷史費用只能從當前費率計算得出。或者,您也可以按時間存儲費率以避免此問題。
- 如果派生值可以被用戶輸入或其他進程覆蓋,那麼再次存儲是有意義的。或者,您可以使用「計算」和「覆蓋」兩個狀態對此進行建模,以便僅在後一狀態中存儲值。
7
默認不存儲冗餘信息:third normal form通常是一個合理的初始目標。當出現「足夠好」的原因時會引入冗餘,例如當您必須計算派生值並計算密集時,您所採取的「足夠大」的性能受到影響。
很明顯,「足夠好」和「足夠大」是限定詞,它們只是指給定語境中的某些東西。對於它的價值來說,零售/折扣價格計算似乎太便宜並且很容易做到,以保證在大多數(顯然不是全部)情況下引入冗餘列。
相關問題
- 1. 衍生產品計算器
- 2. 衍生計算器使用LinkedList的C++
- 3. 如何計算衍生物千里馬
- 4. 如何建模計算並存儲它們的類?
- 5. 使用OpenCV計算X和Y衍生物的絕對值
- 6. 保存預先計算的數據與預先計算的數據並在檢索時計算它們
- 7. 提取模式計數並將它們轉儲到數組
- 8. 如何從一個表中提取值,計算它們和頁面
- 9. 你如何隨機生成x個值並存儲它們?
- 10. 提取號碼和可變它們存儲在Scala和星火
- 11. 快速的方式來存儲數據並提取它們
- 12. 註釋的存儲位置以及如何提取它們?
- 13. 存儲值時,進入它
- 14. 計劃「申請:不是程序」當計算衍生品
- 15. LINQ和計算列:它們的值何時更新?
- 16. 將值存儲在數據庫中或計算它?
- 17. 提取值,並繪製它們的Linux
- 18. 從類中獲取值並將它們存儲在ArrayList中
- 19. 內存泄漏 - 它們何時發生?
- 20. 獲取與衍合
- 21. 將計算值存儲到數組中
- 22. 將計算值存儲到數組中
- 23. 存儲VBA計算數組中的值
- 24. Google App Engine/JDO:存儲計算值
- 25. 提示以改善下面的代碼性能計算SOFTMAX衍生物
- 26. 與衍生文本框
- 27. 問題與WPF衍生CONTROLTEMPLATES
- 28. 與numpy.diff問題衍生物
- 29. 存儲計算結果與在運行時進行計算的標準
- 30. 關於PHP縮略圖 - 存儲它們或者動態生成它們
嗯。情況2和3實際上與冗餘無關,因爲在這兩種使用情況下,信息都是獨一無二的,即根據定義不是多餘的。 – 2013-04-08 12:55:00
@ TomislavNakic-Alfirevic有時候看看(和某些人可能認爲)相同的相鄰病例會有所幫助。但你是完全正確的。 – 2013-04-08 19:59:55
夠公平了... – 2013-04-08 20:41:48