2010-01-26 154 views
1

我有一個問題,請問什麼是執行此操作的最佳方法: 我有一個數據庫讓我們假設它有4個表(表的數量可以增加得多),當我想對table1,table2和table3執行任何CRUD(插入,更新,刪除)操作我必須對table4執行相同的操作,現在table4非常重要,所以我必須確保所有操作都準確且快速,最終這個表將被用來獲取系統報告,所以我需要它要快 現在它的以下兩種方式會更好:執行此操作的最佳方式

-The第一種方法發生在數據庫中,所以我創建一個存儲過程或觸發 當任何操作都在任何操作中執行(table1,table2,table3),這激活了執行相同操作的觸發器在表4中

第二種方法發生在程序代碼(asp.net和c#)中,當對任何表執行任何操作時,table2,table3)我使用類或任何代碼對table4執行相同的操作。

,並且是我們需要記住,當我們選擇兩種方式,如安全性,數據庫大小,應用架構的事,與... ..

感謝

回答

1

如果你的意思是表4只是什麼對於只讀用於生成報告,它應該是一個視圖而不是表格。但是,如果它應該是一個表格,那麼使用觸發器在數據庫級別上執行操作就不錯。由於它更快,更安全,並且將來如果其他應用程序更新其他表,數據將自動更新到表4中,並且不需要重新實施應用程序邏輯。

0

我喜歡Teja使用table4視圖的想法(如果該視圖不起作用)(即該表不包含任何不在table1,table2或table3中的數據)。

在考慮使用存儲過程時,請考慮如果對任何表的模式進行了任何更改,會發生什麼情況。如果您必須重新訪問每一個存儲過程並修改它,會怎麼樣?如果有很多,這可能需要很多努力,並引入創建錯誤的機會。

觸發器比存儲過程更容易改變。但他們確實帶有性能成本。如果大量表格對每個寫入操作都有觸發器,它們可以真正減慢應用程序的速度。

+0

感謝所有的及時答覆,,, 據我所知,使用觸發器是一個不錯的選擇一些點,但我在想,要是: 我創造一個功能(插入/更新/刪除)在表C並且這個函數可以從任何存儲過程中調用(插入/更新/刪除)tableA和tableB。這將允許我管理一個函數,如果需要更改而不是修改每個存儲過程中的代碼。另外,我可以在每個存儲過程中使用事務來保持所有表中的數據一致。 – students 2010-01-26 17:39:06

+0

我真的很喜歡你的想法。它避免了使用觸發器的開銷,並保留了一段代碼(在由其他存儲過程調用的函數或存儲過程中),因此很容易維護。並測試。此外,如果證明符合要求,您可以包含觸發器不可用的數據。對你有好處! – DOK 2010-01-27 14:35:44

相關問題