2010-04-21 44 views

回答

6

我同意托米斯拉夫 - 儘量避免冗餘,因爲你可以結束與多個表的數據彼此不同意。它使更新更加痛苦。

雖然有一些值得考慮的例外與數據庫性能無關。

  • 當計算值(例如一些複雜的數學函數)很痛苦時,那麼存儲是有意義的(您可以將該列想象爲'最後計算的值')。
  • 您可能有隨時間變化的輸入,例如,費用來自費用率,但是費率在配置表中作爲單個值存儲。您可能想要記錄費用,因爲歷史費用只能從當前費率計算得出。或者,您也可以按時間存儲費率以避免此問題。
  • 如果派生值可以被用戶輸入或其他進程覆蓋,那麼再次存儲是有意義的。或者,您可以使用「計算」​​和「覆蓋」兩個狀態對此進行建模,以便僅在後一狀態中存儲值。
+0

嗯。情況2和3實際上與冗餘無關,因爲在這兩種使用情況下,信息都是獨一無二的,即根據定義不是多餘的。 – 2013-04-08 12:55:00

+0

@ TomislavNakic-Alfirevic有時候看看(和某些人可能認爲)相同的相鄰病例會有所幫助。但你是完全正確的。 – 2013-04-08 19:59:55

+0

夠公平了... – 2013-04-08 20:41:48

7

默認不存儲冗餘信息:third normal form通常是一個合理的初始目標。當出現「足夠好」的原因時會引入冗餘,例如當您必須計算派生值並計算密集時,您所採取的「足夠大」的性能受到影響。

很明顯,「足夠好」和「足夠大」是限定詞,它們只是指給定語境中的某些東西。對於它的價值來說,零售/折扣價格計算似乎太便宜並且很容易做到,以保證在大多數(顯然不是全部)情況下引入冗餘列。