我討厭觸發器。我被他們絆倒太多次了。但是我想知道每次更新行時指定時間還是更好,或者讓觸發器負責保持代碼最小化?使用觸發器記錄行更新的時間是否是個好主意?
只是爲了澄清,表中的觸發器將是對將有一個名爲像LastModified
列我負責的是我的存儲誰使用數據庫與400的開發者之一的特定場景程序。大約有20個表格會有這個LastModified
列。這些表格將被每個約10個不同的存儲過程更新。
我討厭觸發器。我被他們絆倒太多次了。但是我想知道每次更新行時指定時間還是更好,或者讓觸發器負責保持代碼最小化?使用觸發器記錄行更新的時間是否是個好主意?
只是爲了澄清,表中的觸發器將是對將有一個名爲像LastModified
列我負責的是我的存儲誰使用數據庫與400的開發者之一的特定場景程序。大約有20個表格會有這個LastModified
列。這些表格將被每個約10個不同的存儲過程更新。
觸發器肯定是一個巨大的問題,特別是如果它們有多個層次的話。它使調試,性能調整和理解數據邏輯幾乎不可能。但如果你將設計保留在單層(表格的觸發器)上,並且它用於審計(即放置更新的時間),我認爲這不會是一個大問題。所有。同樣,如果你正在使用存儲過程作爲你的表和視圖的actor,我認爲它會讓你的存儲過程變得同樣有意義(並且更容易記住和回顧)放入當前的日期時間戳。我認爲這是一個很棒的設計。
但是,如果您使用即席查詢,並且您的datetime
字段爲not null
,那麼記住調用當前日期時間將是一個障礙。顯然這對存儲過程或觸發器的上述兩個想法不會有問題。
所以我覺得在這種情況下應該是個人喜好(只要你不做字符串成爲意大利麪條的觸發器)。
您可以隨時使用TimeStamp列(在MySql中)。如果是MSSQL,請注意timestamp列是序列號,而不是DateTime數據類型。
通常,我避免像鼠疫這樣的觸發器(接近與光標對齊),因此總是手動更新列。對我來說,它有助於加強業務邏輯。但事實上,「更好」是個人意見。
通常情況下,如果您有一張需要爲每次更新應用特定業務邏輯的表,並且您有來自不同來源的更新,則觸發器作爲瓶頸最爲有用。
例如,假設您有使用數據庫的php和python應用程序。你可以試着記住每次更新php時更新python代碼,反之亦然,並且希望它們的工作方式都一樣。或者你可以使用觸發器,這樣無論客戶端連接什麼,表格中都會發生同樣的事情。
在大多數其他情況下,觸發器是一個壞主意,會造成比他們更大的痛苦。
確實,某些觸發器在調試時經常會引起混淆和沮喪,特別是在級聯外鍵更新時。
但他們確實有用。 在這種情況下,您可以選擇更新400個存儲過程並手動更新日期。如果你錯過了其中一個存儲過程,那麼該領域就像無用的一樣好。 此外,雖然觸發器'隱藏'功能,可以說在存儲過程中明確更新它。當有人編寫新的存儲過程時會發生什麼,您需要記錄該字段應該更新。
就個人而言,如果它的關鍵領域是最新的,我會使用觸發器。使用INSTEAD OF觸發器,以便不必執行更新並觸發觸發器,只需重寫插入語句即可。