這是一個好的數據庫設計還是過渡?規範化為數據倉庫的非規範化
截至目前,在 sql server 中,我們有一個數據和一系列規範化表結構,該結構連接到一個 C# Web 應用程序(人力資源/招聘系統)(目前略中等(或小 12,000 行。)大小)確實創建,閱讀,更新和刪除。
在未來(2 年時間),我們計劃把這個數據庫變成一個數據倉庫。但是在數據倉庫規範化中並不完全需要。
我的高級程序員(他不是程序員,但更關注商業智能)建議我們應該對同一數據庫(Kimball 的數據倉庫)上的所有表進行非規範化,將其連接到 C# Web 應用程序,執行 crud,如果測試成功,則放入數據它在 azure 數據倉庫中。
所以我的主要問題是這是一件好事還是有更好的方法?就像從規範化表中提取數據並將其放入帶有非規範化表的新數據庫中?還有其他方法嗎?
請原諒,我更關注軟體開發,通常使用 ORM,而不是商業智能。
謝謝你們。
(目前略中等)
在談論數據大小時,您應該比這更精確。像小/中/大這樣的通用詞對不同的人來說意味著不同的東西,儘管在這種情況下它可能並不重要。
未來,我們計劃把這個數據庫變成一個數據倉庫。
您不應該將應用程序數據庫變成數據倉庫 - 保持應用程序數據庫為正常的實時應用程序使用而優化,並將數據從它饋送到倉庫數據庫以進行離線分析。
但是在數據倉庫規範化中並不完全需要。
正確的。倉庫解決方案通常以各種方式明確地去規範化,以使某些報告更容易高效地生成(尤其是通過自動化工具和相對不熟練的使用者)。
就像從規範化表中提取數據並將其放入帶有非規範化表的新數據庫中?
這通常是要走的路。
保持您的實時資料結構針對應用程序的主要工作流程和數據正確性進行優化(即保持正常形式以避免由於設計問題或其他錯誤導致的數據不一致),並使用一些應用程序數據庫從這些應用程序數據庫建構和更新(或重建)您的倉庫ETL過程的形式。生產數據庫中的實時、正常形式的數據是您的事實來源,如果出現問題,您可以從中重建倉庫。倉庫不應存在於一個應用程序實例的數據庫中,因為您稍後可能希望將來自多個應用程序(和/或同一應用程序的多個實例)的數據合併到倉庫中,以及實時應用程序和大型報告的不同 IO 和鎖定要求任務通常意味著您希望將這些任務分開而不是爭奪資源。
當然,這也有例外,就像所有事情一樣。例如,您可能希望在應用程序中對一些數據進行非規範化的實時報告,例如,儘管在這種情況下,您仍然需要針對數據一致性和應用程序的主要活動進行優化的核心應用程序表,以及建構/更新/重建的報告結構從那個真理的源頭。