標籤:
前言
我們在做企業管理系統時,有多多少少都有對資料的完整性有所要求,比如要求系統不能物理刪除記錄,要求添加每一條資料時都要有系統記錄、或者更新某條資料都需要跟蹤到變化的內容、或者刪除資料時需要記錄誰刪除了,何時刪除了,以便誤刪後可以通過系統的XXX功能來恢複誤刪的資料。
我將這種功能稱為動作記錄
為什麼要做動作記錄?
其實上文也描述了一些,其主要目的就是跟蹤到每一個使用者在系統的操作行為,如對資料進行查詢、新增、編輯或刪除甚至是登入等行為。更進一步的理解可以說是對使用者使用系統情況的跟蹤,對資料的跟蹤防止資料意外刪除、更改時有所記錄,有所依據,以便對資料的還原,從某種程式上可以保護資料的完整性。
系統設計
情境
我們現在有一張表叫Employee:
ID |
int |
Name |
nvarchar(50) |
Gender |
nvarchar(2) |
DateCreated |
datetime |
CreateUser |
nvarchar(50) |
在aspx頁面中可能會有EmployeeEdit.aspx(用來添加或更新Employee資訊等操作),EmployeeList.aspx(用來查詢或進行刪除Employee資訊等操作)
好了,現在我們要對Empoyee表操作的資訊做一個系統日誌,那怎麼辦?
也許你可以建立多一個表跟Employee表一模一樣的,叫做EmployeeLog:
ID |
int |
Name |
nvarchar(50) |
Gender |
nvarchar(2) |
DateCreated |
datetime |
CreateUser |
nvarchar(50) |
LogCreated |
datetime |
OperationType |
int |
其中加多了一些附屬的資訊如LogCreated(日誌添加日期)和OperationType(查詢、新增、刪除、更新)
此時這種情況可能大家在做使用者登入日誌的時候是一件很常見的事件。
但……問題來了,假如我需要對錶EmployeeIncome(員工的收入情況)做日誌那怎麼辦?
好建立多一張表叫EmployeeIncomeLog來記錄員工收入情況的動作記錄。
假如又需要對錶FixedAsset(固定資產)進行日誌記錄那又怎麼辦?
好了,大家可能意識到我們這樣做不但會造成表數量的增倍,而且大大的增加了工作量和開發時間,對資料庫表不易管理等情況。
因此我們需要一個能夠通過簡單的配置和編寫就可以完成以上功能的日誌管理
資料庫設計
包括三個表,
LogSetting(日誌設定)——用來儲存配置業務表名、業務名稱、主鍵等
LogSettingDetail(日誌設定明細)——用來儲存配置業務表需要記錄的詳細內容,如Employee表中,我們可能需要記錄欄位Name、Gender等資訊。
LogOperation(動作記錄)——用來記錄使用者對各種業務操作的內容情況。
下篇將討論用代碼如何?日誌管理的功能,下面先來幾張圖:
日誌列表:
查看日誌內容:
系統動作記錄設計(轉)