如何设计一张合格的日志表
java设计模式之观察者模式
一大波视频分享
Mysql代理中间件Atlas安装和配置
管理系统的操作日志如何做成通用的模块我觉得一直是一个经久不衰的事。在做企业管理系统时,或多或少都有对数据的完整性有要求,比如要求业务数据不能物理删除记录,要求添加每一条数据时都要有系统记录、或者更新某条数据都需要跟踪到变化的内容、或者删除数据时需要记录谁删除了,何时删除了,以便误删后可以通过系统的某些功能来恢复误删的数据。我将这种功能称为系统操作日志。
哪些地方需要记录操作日志?执行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
看完本文有收获?请转发分享给更多人
欢迎关注“JAVA乐园”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构!打造最有价值的架构师圈子和社区。
长按下方的二维码可以快速关注我们
如何设计一张合格的日志表相关推荐
- logging 日志表的设计
Netkiller MySQL 手札 MySQL MariaDB... Mr. Neo Chan, 陈景峰(BG7NYT) 中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 131136 ...
- 如何设计一张数据库表
如何设计一张数据库表 1.前言 如何设计一张数据库表,或者说设计一张数据库表需要注意些什么,这是我最近在思考的问题,刚开始,我简单的罗列了一下注意事项: 设置合理的主键: 根据字段更改的频率程度 ...
- plsql 查看表结构所有的字段_产品操作MySQL第2篇 – 设计一张表
本资料为产品岗位作为日常工作参考,语言口语化 At 2019/4/16 By David.Yang 了解数据表的"字段"概念 我们前面说到,Excel.数据表都有一个表头, 比如学 ...
- 传智播客韩顺平老师2011ssh实战项目校内网的数据库设计32张表全解
------------------------------------------- 用户表 users ------------------------------------------- id ...
- 如何创建一张表mysql_如何创建一张规范的MySQL表
到底怎样才能创建一张规范的MySQL表? 为什么必定需要有无业务意义的主键,并且还需要自增? 应该在哪些字段添加索引? 或许有些人会有以上类似的疑问.这几天通过本身的整理加上好友的指导,整理了一份稍微 ...
- mysql性能调优与架构设计 51cto_MySQL 数据库性能优化之表结构优化
很多人都将 数据库设计范式 作为数据库表结构设计"圣经",认为只要按照这个范式需求设计,就能让设计出来的表结构足够优化,既能保证性能优异同时还能满足扩展性要求.殊不知,在N年前被奉 ...
- QPW 手机短信验证码发送日志表(tf_sms_send_log)
文章目录 手机短信验证码发送日志表 需求说明 手机短信验证码发送日志表 CREATE TABLE `tf_sms_send_log` (`send_id` bigint(11) NOT NULL AU ...
- QPW 操作日志表(tl_operate_log)
操作日志表 前端每次调后端服务时,会往这张表插入一条记录,作为接口调用日志,出现 bug 时可以查询这张表追溯问题. CREATE TABLE `tl_operate_log` (`operate_l ...
- QPW 邀请日志表(tf_invite_log)
邀请日志表 被邀请者注册成功后,往这张表插入一条记录,记录在何时谁邀请了谁. CREATE TABLE `tf_invite_log` (`invite_id` bigint(20) NOT NULL ...
- QPW 点评点赞日志表(tf_appraise_praise)
点评点赞日志表 CREATE TABLE `tf_appraise_praise` (`praise_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '点 ...
最新文章
- vue小项目总结与笔记【五】——一个轮播图插件vue-awesome-swiper
- C#写的NoSQL开源项目/系统(系列)
- 旅游网站的主页代码_一个在优化的网站主页内容应该如何设计?
- Openresty使用
- 《MySQL实战45讲》实践篇 9-15讲 学习笔记
- 周正宁:研发最大的挑战是不断否定常规 否定自己
- SAP CRM和Cloud for Customer的organization unit
- OpenCV学习笔记(十四):重映射:remap( )
- 通用线程 -- sed 实例
- 庖丁解牛获取连接状态数的awk数组命令
- UC3842好坏的判断方法
- Python三大神器之Virtualenv
- Python爬虫入门教程【6】:蜂鸟网图片爬取之一
- 1024: 例题3-2 计算存款利息
- python rasterio库和gdal库匹配与冲突问题安装办法
- InnoDB——锁、事务和复制
- NOI OJ 1.3 11:计算浮点数相除的余数 C语言
- 牧场物语gb模拟器JAVA_3DS GBC模拟器+GB/GBC游戏合集下载
- 89C51单片机数码管显示
- vmware安装win10 Stopcode: KMODE EXCEPTION NOT HANDLED