[數據庫觸發器/交易新]應該在應用程序級別或數據庫級別上觸發MySQL觸發器嗎?
在我的應用程序中,允許我的用戶創建,編輯和刪除房間。如果分配有物品的房間被移除,我想將其房間位置默認爲名爲「未分配」的通用房間。現在我正在應用程序級別執行此操作。我的問題是,我應該在數據庫級別進行此操作嗎?如果這確實發生在使用觸發器的MySQL中,那麼我該如何讓我的應用程序知道任何失敗或成功?
[數據庫觸發器/交易新]應該在應用程序級別或數據庫級別上觸發MySQL觸發器嗎?
在我的應用程序中,允許我的用戶創建,編輯和刪除房間。如果分配有物品的房間被移除,我想將其房間位置默認爲名爲「未分配」的通用房間。現在我正在應用程序級別執行此操作。我的問題是,我應該在數據庫級別進行此操作嗎?如果這確實發生在使用觸發器的MySQL中,那麼我該如何讓我的應用程序知道任何失敗或成功?
現在,我在應用層面
這通常是最好的事情了。
代碼屬於應用程序。
數據屬於數據庫。在應用程序代碼比數據屬於
規範不屬於數據庫,任何更多。
Truggers通常是一個非常糟糕的主意,因爲他們的分段處理邏輯到兩個地方 - 應用程序和數據庫。
通常最好是將應用程序邏輯放在一個地方。數據庫之外。
數據是應用程序中最有價值的部分。不要用觸發器或其他應用邏輯來污染它。
[這個答案將通過誰喜歡在數據庫中的存儲過程和觸發器的鄉親被downvoted]
就個人而言,我會在應用層業務邏輯。正如您已經指出的那樣,您的業務應用程序必須知道房間是否已分配或未分配。通過在應用層執行此操作,您不會失去任何效率,並且您的代碼將更易於閱讀,因爲它將全部位於同一個位置。
就個人而言,我會用幾乎完全觸發數據庫功能,如日誌記錄的更改。觸發器非常適合這種情況,通過使用觸發器,您可以保證對記錄的任何更改都將被執行,而不管業務層在做什麼。
謝謝您的明確解釋! – luckytaxi