Stored-Procedures
報告 SQL 數據庫中不符合特定規則的數據
我需要在 Web 應用程序中為我的表中不符合特定規則的行生成報告。我想允許將數據插入表中,但我希望能夠標記它,以便使用者可以稍後返回並更正它。我正在檢查的一些規則的一個範例是字元串具有某些格式和長度(例如車牌),並且我還在檢查日期的有效性。我希望將來會出現更多此類規則,因此我正在尋找可擴展的解決方案。我的應用程序在 .NET 中,但有人告訴我最好在 DB 端而不是在程式碼中執行此操作。我是否應該考慮使用儲存過程實現某種類型的規則引擎?
如果您要維護某種標誌來指示哪些行有問題(如果您有很多行,這很有意義,其中 99.9%+ 會很好),那麼我會使用觸發器來檢查條件. 這樣,只有在實際添加或更改一行時才進行一次檢查。
我認為這在很大程度上可能取決於您的一些具體情況(應用程序的未來需求、性能、數據大小、易於維護等),但通常我喜歡在可能的情況下同時檢查數據庫和應用層。這確保瞭如果兩者中的一個由於某種原因而被更改,您(或現在維護它的任何人)不太可能不會失去此驗證,但是由於您希望允許錯誤數據,所以它有點棘手.
從長遠來看,這將嚴重影響您數據的完整性,並使您和應用程序的事情變得更加困難。我建議至少在某些情況下(如果不是全部情況下)執行約束以不讓他們首先輸入錯誤數據。
在這種情況下,我傾向於迴避觸發器,除非它們是絕對必要的,因為它們可能會成為性能問題的滑坡,但它們可能對您的需求是可行的。除了應用程序驗證邏輯之外,您可能還想查看使用者定義的數據類型以獲取諸如車牌號之類的內容。
如果您只是必須讓他們輸入錯誤數據,我可能會利用儲存過程來處理驗證邏輯和(可能)位標誌來指定無效值。我討厭數據庫中的業務邏輯,但如果我必須這樣做,儲存過程通常是放置 IMO 的最佳位置。