前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何设计一张合格的日志表

如何设计一张合格的日志表

作者头像
BUG弄潮儿
发布2022-06-30 16:19:32
1.1K0
发布2022-06-30 16:19:32
举报
文章被收录于专栏:JAVA乐园

管理系统的操作日志如何做成通用的模块我觉得一直是一个经久不衰的事。在做企业管理系统时,或多或少都有对数据的完整性有要求,比如要求业务数据不能物理删除记录,要求添加每一条数据时都要有系统记录、或者更新某条数据都需要跟踪到变化的内容、或者删除数据时需要记录谁删除了,何时删除了,以便误删后可以通过系统的某些功能来恢复误删的数据。我将这种功能称为系统操作日志。

哪些地方需要记录操作日志?执行insert、update、delete这3个操作的时候,就需要进行日志,而日志执行的先后顺序如下:

insert : 在insert后执行

update:在update前后都要执行,操作前获取操作前数据,操作后获取操作后数据

delete : 在delete前执行

为什么要做操作日志?

其实上面也描述了一些场景,其主要目的就是跟踪到每一个用户在系统的操作行为,如对数据进行查询、新增、编辑或删除甚至是登录等行为。更进一步的理解可以说是对用户使用系统情况的跟踪,对数据的跟踪防止数据意外删除、更改时有所记录,有所依据,以便对数据的还原,从某种程序上可以保护数据的完整性。

场景:

有一张表叫t_employee:

id

int

name

varchar(50)

gender

varchar(2)

date_created

datetime

create_user

varchar(50)

在jsp页面中可能会有EmployeeEdit.jsp(用来添加或更新Employee信息等操作),EmployeeList.jsp(用来查询或进行删除Employee信息等操作); 现在要对t_employee表操作的信息做一个系统日志,那怎么办?也许你可以建立多一个表跟t_employee表一模一样的,叫做t_employee_log

id

int

name

varchar(50)

gender

varchar(2)

date_created

datetime

create_user

varchar(50)

log_created

datetime

operation_type

int

其中加多了一些附属的信息如log_created(日志添加日期)和operation_type(查询、新增、删除、更新)。此时这种情况可能大家在做用户登录日志的时候是一件很常见的事件。但是问题来了,假如我需要对表t_employee_income(员工的收入情况)做日志那怎么办?好建立多一张表叫t_employee_income_log来记录员工收入情况的操作日志。假如又需要对表t_fixed_asset(固定资产)进行日志记录那又怎么办?大家可能意识到这样做不但会造成表数量的增倍,而且大大的增加了工作量和开发时间,对数据库表不易管理等情况。

因此我们需要一个能够通过简单的配置和编写就可以完成以上功能的日志管理的数据库设计

包括三个表,

LogSetting(日志设置):用来存储配置业务表名、业务名称、主键等

LogSettingDetail(日志设置明细):用来存储配置业务表需要记录的详细内容,如Employee表中,我们可能需要记录字段Name、Gender等信息。

LogOperation(操作日志):用来记录用户对各种业务操作的内容情况。

参考:http://www.cnblogs.com/hooray/archive/2012/09/05/2672133.html

http://www.cnblogs.com/samlin/archive/2010/02/08/log-operation-management.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BUG弄潮儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档