2013-10-04 67 views
2

我有一個系統(c#/ asp.net/sqlserver),用戶可以在其中登錄和管理商店的產品。我需要在產品上的用戶所做的每一項更改都登錄數據庫。例如:如何記錄系統用戶所做的更改?

Product A 
Inserted by USER1 on 10/03/2013 10:00 
Description changed to "Product AA" by USER2 on on 10/03/2013 12:00 

其實我有一個PRODUCT_LOG表類似於PRODUCT表,每對產品的一些記錄被改變時,記錄插在PRODUCT_LOG。以這種方式進行,我可以將「可讀」日誌返回給系統管理員(如上所述)。

但是,在日誌上維護FK時會產生很大的問題,經過一段時間的日誌記錄後,很多寄存器不會從系統中刪除,因爲它們在日誌表中被引用爲FK。 :(

我會問是否有其他選項,或者一些更好的方法,如果你知道的名稱的方法產生這種類型的日誌。 ,請告訴我,這樣我就可以谷歌它。

+2

這就是所謂的審計。 –

+0

與論壇網站不同,我們不使用「謝謝」或「任何幫助表示讚賞」,或在[so]上簽名。請參閱「[應該'嗨','謝謝',標語和致敬從帖子中刪除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be –

回答

1

刪除FK約束條件,那麼它就可以工作了,你想要的東西被稱爲「審計表」,它們不需要參照完整性,因爲它們本來是不可變的,一旦書面而且永恆,它就不會將它們包含在與其他表的聯接中是沒有意義的

1

參照完整性(外鍵消失)是數據庫保留的這種日誌的問題之一,但是您也可以將表添加到schem您從FK表中移動「已刪除」行的位置。然後,使用「實時」FK表和「已刪除」FK表的聯合計算日誌表上的聯接。巴姆@!沒有失蹤FK的。

或者您可以將日誌文件中的數據非規範化(將FK鏈接字段展開到日誌文件中的數據列)。是的,這需要更多的空間,但保存查詢時間並記錄事件發生時顯示的信息。

+0

這也將使審計實際上成爲可能,如果您對日誌條目#5感興趣,而有人在日誌條目#1958中更改了同一產品,那該怎麼辦?您將很難追溯到如果您允許修改PRODUCT表並將您的PRODUCT_LOG錶鏈接到該表,那麼該產品就是確切的狀態。 –

相關問題