2008-12-04 60 views

回答

5

觸發器是最好的方式,因爲這個邏輯與表格密切相關,而不是應用程序。這只是我能想到的唯一明顯正確使用觸發器,除了更詳細的參考完整性。

但我認爲「最後修改」日期無論如何都是一個有缺陷的概念。是什麼讓「最後更改」的時間戳比之前的更有價值?您通常需要更完整的審計線索。

+0

即時通訊使用的是患者網格所以醫生可以看到最後一個,他們修改,雖然我同意他們的最後一次訪問的日期似乎更加有用... – Shawn 2008-12-04 18:28:01

+0

如果這是他們最後修改的病人,而不是最後一次當他們修改每個病人的時候,那麼它甚至需要在一個單獨的表格中 - 或者在全球其他地方持續存在。 – dkretz 2008-12-04 18:30:44

+0

我認爲在過去的日子裏,他們說「對待」或「治癒」,而不是「修改」。 SCNR ;-)更嚴重的是,我同意@doofledorfer的意見,因爲LastModified日期並不是非常有用,因爲它幾乎沒有任何信息,可能會導致錯誤的結論。 – Tomalak 2008-12-04 18:41:28

2

您可以使用關鍵字DEFAULT,假設您有一個默認約束。 插入時,不需要指定值,您也可以在這裏使用關鍵字。

無觸發,並在同一個寫操作完成的「真實」數據

UPDATE 
    table 
SET 
    blah, 
    LastUpdatedDateTime = DEFAULT 
WHERE 
    foo = bar 
1

使用觸發器更新的最後修改列是要走的路。幾乎工作系統中的每個記錄都有一個添加和更改時間戳,這對我有很大幫助。不管它是如何啓動的,只要有任何變化,將它作爲觸發器就可以讓它蓋章。

約觸發器的另一個好處是,你可以輕鬆地擴展它來存儲的審計線索以及沒有太多的麻煩。

1

而且只要你這樣做,增加一個字段爲LAST_UPDATED_BY和更新用戶每次記錄被更新。不如真正的審計表,但比上次更新的日期好得多。

觸發器是唯一可以用來執行此操作的方法。對那些說觸發器是邪惡的人來說,不,他們不是。它們是迄今爲止最好的方式 - 維護比簡單的默認或約束更復雜的數據完整性。他們確實需要由真正知道自己在做什麼的人編寫。但是對於影響數據庫設計和完整性的大多數事情來說,情況都是如此

3

在不使用觸發器的情況下執行此操作的唯一方法是直接通過權限禁止任何插入/更新/刪除操作,並堅持所有這些操作都是通過存儲過程來執行的,這些存儲過程將負責設置修改日期。

管理員可能仍然能夠在不使用存儲過程來修改數據,但管理員還可以禁用觸發器。

如果有很多需要這種功能的表,我會因爲它簡化了代碼青睞觸發器。簡單,編寫良好且索引良好的審計觸發器通常不會太邪惡 - 當您嘗試在觸發器中放置太多邏輯時,它們只會變得很糟糕。

相關問題