2012-02-27 47 views
4

我目前正在開發一個ASP.NET MVC 3項目,在該項目中我必須記錄具有特定屬性的字段更改。例如:如何在主管批准更改前保留新舊版本的記錄?

public class MyModel 
{ 
    public String PropertyOne { get; set; } 

    // Need to keep track of these properties 
    [RequiresSupervisorKey] 
    public String PropertyTwo { get; set; } 
} 

只要其中一個字段被更改,它就需要主管批准這些字段更改。 在更改被批准之前,記錄將處於未決狀態,並且我不知何故需要保留舊記錄和新記錄直到這樣的時間!

有關存儲這些記錄的最佳做法是什麼?我應該在數據庫中的表中有2條記錄,還是應該有一個審計表,可以存儲這些數據直至獲得批准。

謝謝。

回答

1

我會把它們保存在一張桌子上。使用組合鍵識別唯一行。具有autoincretment ID的行ID。和datetime作爲組合鍵的第二部分。當第三行可以存儲狀態。這也允許你進行版本控制。如果你選擇顯示的字段,你可以通過id order by datetime desc來選擇其中狀態被認可的限制1.希望這會有所幫助;-)

+0

但這也取決於您的數據庫的大小和速度,它的記錄。對於真正龐大的系統,我寧願建議使用第二個表來跟蹤這些變化。我最好的做法是讓這兩個表總是像上面描述的那樣具有相同的模式。 – Manuel 2012-02-27 15:01:38

+0

儘管每個人都給出了非常好的反饋,但我會說這與我的情況最相關。謝謝。 – jacqijvv 2012-02-28 08:48:19

+0

Thx,你可以投票答案給我信貸;-) – Manuel 2012-03-01 16:23:01

1

這是我從其他項目的.02,但我會添加一個版本或狀態列到表中,並保留n表中的記錄數。我不知道在你的系統中是否有可能改變兩個不同用戶的記錄,但這種情況通常是這樣的。審計表是一個可以接受的解決方案,但總的來說,我更喜歡將事情保存在一張表中。

1

我會保留表中的兩個記錄(舊的和新的)狀態(例如活動,掛起,刪除,拒登)(或者您認爲需要的狀態)。

然後,我將創建一個僅顯示活動記錄(用於大多數用途)和僅顯示待處理記錄(用於主管批准頁)的視圖。

我會在表上創建一個觸發器,以確保一次只有一條記錄處於活動狀態。因此,如果主管將記錄從掛起更改爲活動,則會將舊記錄更改爲刪除狀態。如果主管拒絕更改,則會進入拒登狀態。

爲了保持表格的靈活性(您表示不需要永久存儲舊狀態),我會在夜間運行一項作業,以刪除處於刪除狀態或已拒登狀態的所有記錄。

相關問題