Dot-Net
交易和報告數據庫 - 如何?
在建構具有高度規範化數據庫的事務系統時,執行報告樣式查詢甚至查詢以在 UI 上顯示數據可能涉及多個連接,這在數據繁重的場景中會並且通常會影響性能。連接很昂貴。
通常,所支持的指導是,您永遠不應該在事務數據庫模型之外執行這些查詢,而應該使用為特定 UI 視圖或報告量身定制的非規範化扁平模型,從而消除了對許多連接的需求。在這種情況下,數據重複不是問題。
這個概念非常有道理,但是當專家發表這些聲明時,我很少看到正是如何實現這一點。例如,(坦率地說,我很欣賞一個使用任何平台的例子)在一個執行在 sql server 後端的中型系統中,你有一個規範化的事務模型。您還有一些需要查詢的報告和網站。因此,您創建了一個“報告”數據庫,將標準化數據展平。你如何保持同步?事務日誌傳送?如果是這樣,您如何轉換數據以適應報告模型?
在我們的商店中,我們設置了從 OLTP 系統到另一個用於報告的數據庫伺服器的連續事務複製。您不希望為此目的使用日誌傳送,因為它每次恢復日誌時都需要對數據庫進行排他鎖,這會阻止您的使用者執行報告。
使用今天 SQL Server 中的優化器,我認為規範化數據庫上的連接對於報告來說“過於昂貴”的概念有點過時了。我們的設計完全是第 3 範式,主表中有幾百萬行,執行任何報表都沒有問題。話雖如此,如果迫在眉睫,您可以考慮在您的報告伺服器上創建一些索引視圖以提供幫助。