2010-10-08 54 views
1

像外鍵,約束,默認值等項目應該由數據庫管理系統(在這種情況下,MS Sql 2005)或應用程序?我聽到了雙方的意見,我真的不知道要走哪條路。我的RDBMS或我的應用程序句柄數據庫參照完整性?

我原本打算將其建成數據庫,但是我發現這並不總是可能與當前數據庫的設計,我有。例如,某些表格包含循環引用,並且不能使用ON UPDATE CASCADE進行鏈接。我遇到的另一個問題是我們將有可能使用多個數據庫/服務器,並且外鍵約束在連接的服務器上不起作用。

我有一些開發商建議我做應用層上的數據驗證和離開數據庫只是 - 一個存儲數據的地方。我喜歡這個想法,但是我在很多地方讀到,最好在數據庫中構建參照完整性以允許不通過應用程序層的事務。我同意,雖然我們完成所有數據庫交易應該通過應用程序。即使我們稍後決定構建插件,我們也使用ObjectModel框架,因此插入/更新/刪除查詢不需要重寫。

所以我的問題是,在這種情況下,你會仍然建議建立參照完整性到數據庫或者是確定其建成應用層呢?爲什麼?

回答

5

您應該儘可能在數據庫中執行儘可能多的數據完整性維護。一旦你聲明它是「免費的」,並且無論如何數據到達數據庫,保證應用。對我而言,這似乎是一件容易的事。

你長大了無法在數據庫中聲明指定的數據庫完整性類型的多個實例。在這些情況下,顯然,您必須將完整性編入中間層或前端,並希望獲得最佳效果。

+1

它並不真正「免費」。由於數據庫必須確保RI,所以在插入,刪除和上載過程中涉及一些性能成本。 – 2011-11-21 15:36:24

2

數據庫管理系統什麼時候可以,應用什麼時候不能。你希望執行最遠的技術,所以任何建立在它之上的東西都可以利用它。

4

將數據庫用於最擅長的功能。包括參照完整性 - 它已內置到數據庫中,並確保您的數據處於一致狀態。

如果這不適合於特定的應用程序中的東西,圍繞它建立在你的應用程序邏輯/域模型。

個人而言,如果可能的話我會確保參考邏輯添加到應用程序和數據庫(縱深防禦)。