系统操作日志设计
2015-11-20 11:49
429 查看
前言
我们在做企业管理系统时,有多多少少都有对数据的完整性有所要求,比如要求系统不能物理删除记录,要求添加每一条数据时都要有系统记录、或者更新某条数据都需要跟踪到变化的内容、或者删除数据时需要记录谁删除了,何时删除了,以便误删后可以通过系统的XXX功能来恢复误删的数据。
我将这种功能称为操作日志
为什么要做操作日志?
其实上文也描述了一些,其主要目的就是跟踪到每一个用户在系统的操作行为,如对数据进行查询、新增、编辑或删除甚至是登录等行为。更进一步的理解可以说是对用户使用系统情况的跟踪,对数据的跟踪防止数据意外删除、更改时有所记录,有所依据,以便对数据的还原,从某种程序上可以保护数据的完整性。
系统设计
场景我们现在有一张表叫Employee:
ID | int |
Name | nvarchar(50) |
Gender | nvarchar(2) |
DateCreated | datetime |
CreateUser | nvarchar(50) |
好了,现在我们要对Empoyee表操作的信息做一个系统日志,那怎么办?
也许你可以建立多一个表跟Employee表一模一样的,叫做EmployeeLog:
ID | int |
Name | nvarchar(50) |
Gender | nvarchar(2) |
DateCreated | datetime |
CreateUser | nvarchar(50) |
LogCreated | datetime |
OperationType | int |
此时这种情况可能大家在做用户登录日志的时候是一件很常见的事件。
但……问题来了,假如我需要对表EmployeeIncome(员工的收入情况)做日志那怎么办?
好建立多一张表叫EmployeeIncomeLog来记录员工收入情况的操作日志。
假如又需要对表FixedAsset(固定资产)进行日志记录那又怎么办?
好了,大家可能意识到我们这样做不但会造成表数量的增倍,而且大大的增加了工作量和开发时间,对数据库表不易管理等情况。
因此我们需要一个能够通过简单的配置和编写就可以完成以上功能的日志管理
数据库设计
包括三个表,
LogSetting(日志设置)——用来存储配置业务表名、业务名称、主键等
LogSettingDetail(日志设置明细)——用来存储配置业务表需要记录的详细内容,如Employee表中,我们可能需要记录字段Name、Gender等信息。
LogOperation(操作日志)——用来记录用户对各种业务操作的内容情况。
下篇将讨论用代码如何实现日志管理的功能,下面先来几张图:
日志列表:
查看日志内容:
相关文章推荐
- python3中替换python2中cmp函数的新函数分析(lt、le、eq、ne、ge、gt)
- Java中,你遇到的错误 :程序包不存在
- csipsimple 下载地址
- 数据库连接池的原理
- Quartz2D使用(图片剪切)
- Quartz2D使用(矩阵操作)
- ant脚本部署RCP产品
- RelativeLayout和LinearLayout的属性
- 关于hql一些不常见但好用的技巧(个人总结)
- 55、Android网络图片 加载缓存处理库的使用
- 关于指针的引用的讲解
- 使用jQuery快速解决input中placeholder值在ie中无法支持的问题
- 使用jQuery快速解决input中placeholder值在ie中无法支持的问题
- 关于TS流的解析
- 第二章 传输层:TCP、UDP和SCTP(3)—端口号
- .Net中用smtpclient发送邮件后放到“已发送”之调查
- JVM优化
- 单击Main.StoryBoard文件,XCODE自动关闭
- android多线程Handler
- Java内存分配的原理