2008-10-10 68 views
3

我正在構建一個新的應用程序,具有較高的讀寫比。在我目前的僱主中,出於性能考慮,我們在桌面上有大量非正規化數據。最好有3NF表格,然後使用索引視圖來完成所有的非規格化操作嗎?我應該對錶或視圖運行查詢嗎?使用非規範化索引視圖的規範化表是否是個好主意?

我感興趣的一些事物的示例是列子表的聚合(例如,將用戶發佈計數存儲在某處)。

回答

3

如果您需要非常頻繁地訪問多個標準化表,通常最好有非規範化視圖。在大多數情況下,與使用連接和直接查詢表相比,這將顯着提高性能,並且通常不會有任何可維護性,因爲您的視圖或連接可以被編寫爲不可知關於表的某些部分的更改它不使用。

是否全部你的表格應該是第三範式還是另外一個問題。在大多數應用程序中,我使用的答案是大多數表應該用這種方式標準化,但也有例外。是否要制定例外與數據的使用方式有關,以及您是否可以非常有信心地認爲未來不會改變。

之後必須回去重新規範化,因爲你做錯了某些事情可能代價高昂,但是過度規範化應該直接使用和理解的數據會使事情變得更加複雜和難以維護,是。你的旅費可能會改變。

3

如果您要使用視圖向用戶呈現非規範化數據(並且您使用的是SQL Server),則應該查看SCHEMABINDING子句。如果視圖是模式綁定的,則可以對其進行索引,並且在更新基礎表時更新索引。通過這種方式,如果索引設置良好,那麼正在查找數據的人員可以從索引中進行實際選擇,因此無需爲每個查詢重建複雜視圖,但用戶仍然可以看到最新的日期時基礎表更改。