2009-06-15 76 views

回答

2

您的假設是正確的。非規範化會提高性能,但不利之處在於它降低了正確性。

此主題的長度在此以前stackoverflow question

2

豈不行的在數據庫中的寬度增加了討論?

非規範化只應作爲最後手段的優化來完成。

它會增加數據庫的大小,並增加數據重複並使數據難以保持最新和同步。

+0

這就是爲什麼它非常適合數據倉庫(不保留任何最新信息),並且不適合在線交易數據庫。不同的用途對不同的設計會更好。 – 2009-06-15 20:33:11

+0

行的寬度會增加?抱歉。你能解釋一下嗎? – 2009-06-15 20:38:17

0

非規範化是一個相當廣泛的術語,所以沒有快速回答您的問題。

在避免加入的情況下,檢索速度可能會更快。但是,您正在增加更新和數據維護的複雜性,因此需要進行折衷。

您似乎在詢問在系統範圍內查詢次數或速度是否會得到提高,這也不完全是它的意義 - 最好將其視爲特定的本地優化在應用程序中遇到瓶頸,即要考慮使單個查詢或一組查詢運行得更快。

2

如果您碰巧在Microsoft SQL Server中工作,我強烈建議您將表格標準化並使用所謂的索引視圖進行非規範化。這些是半永久性的數據結構,只要基礎表被更新就更新。通過這種方式,您可以保持兩全其美 - 規範化模式和快速非規範化數據!

Oracle也可能存在類似的情況,不確定。

0

除了「與數據庫中的行」,你的答案都是正確的。

「反規範化」意味着在一行中存儲比絕對必要的更多信息。如果不增加行寬,這是不可能的。

但最重要的是:你沒有提出所有的問題。

你還在想,如果你故意在你的數據庫中引入Redencancy,那麼你不應該同時引入一些額外的數據庫約束,以防止你的數據庫包含損壞的數據(與自身相矛盾的數據)?

如果對這個問題的答案是'是',那麼也許你應該問自己,是否強制執行所有那些僅僅因爲你介紹贖回而需要的額外約束,不會導致你產生類似的(或多更新性能損失)。

相關問題