操作日志怎么做?大哥,我急。

叶恭介叶恭介 2020-08-17 10:05:46
需求是系统要记录用户的操作到数据库,用户的操作如添加用户,编辑用户,删除用户......等。

问题1:数据库日记表保存操作用户的标识并且外键到用户表,那我删除这个用户的时候,此不是会把这个用户的所有操作日志给删除掉,但是我想不删除,怎么做,难道把ON DELETE时NO ACTION吗?

问题2:数据库日记表保存操作用户的标识,我查询日记表时,我知道用户的名称,但如果这个用户在用户表已经删除了怎么办?


希望各位做过的大佬指导一下。
...全文
505 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶恭介叶恭介 2020-10-21
  • 打赏
  • 举报
回复
引用 16 楼 hanhui1211 的回复:
[quote=引用 15 楼 叶恭介1989 的回复:][quote=引用 14 楼 hanhui1211 的回复:][quote=引用 13 楼 叶恭介1989 的回复:][quote=引用 11 楼 hanhui1211 的回复:]那就把ID和名称都存上,操作员有改动或删除,都会记录在日志表中啊,查的时候直接查询就行了,什么人操作的,操作的什么内都能看出来
按你说的,问题在于操作员用户会删除的,这样名称哪里来。[/quote] 不能设置删除状态吗?不用物理删除,只修改删除状态[/quote] 删除状态。举个例子,一个组织下有设备,组织下的设备名称是不能相同的,那我创建了个UNIQUE 约束(组织和设备名称约束)。那你不用物理删除,只修改删除状态的话,那个下次再添加设备相同的名称时候,就会约束不成功,添加失败,但用户其实已经删除了这个设备,怎么办了?[/quote] 是我没理解么?你说的操作员用户会删除什么??是删除日志表的数据还是什么?我说的删除状态是日志表中的数据状态,好像前面也有人提出这个方法了。。。[/quote] UNIQUE 约束怎么办?
hanhui1211 2020-10-19
  • 打赏
  • 举报
回复
引用 13 楼 叶恭介1989 的回复:
[quote=引用 11 楼 hanhui1211 的回复:]那就把ID和名称都存上,操作员有改动或删除,都会记录在日志表中啊,查的时候直接查询就行了,什么人操作的,操作的什么内都能看出来
按你说的,问题在于操作员用户会删除的,这样名称哪里来。[/quote] 不能设置删除状态吗?不用物理删除,只修改删除状态
hanhui1211 2020-10-19
  • 打赏
  • 举报
回复
引用 15 楼 叶恭介1989 的回复:
[quote=引用 14 楼 hanhui1211 的回复:][quote=引用 13 楼 叶恭介1989 的回复:][quote=引用 11 楼 hanhui1211 的回复:]那就把ID和名称都存上,操作员有改动或删除,都会记录在日志表中啊,查的时候直接查询就行了,什么人操作的,操作的什么内都能看出来
按你说的,问题在于操作员用户会删除的,这样名称哪里来。[/quote] 不能设置删除状态吗?不用物理删除,只修改删除状态[/quote] 删除状态。举个例子,一个组织下有设备,组织下的设备名称是不能相同的,那我创建了个UNIQUE 约束(组织和设备名称约束)。那你不用物理删除,只修改删除状态的话,那个下次再添加设备相同的名称时候,就会约束不成功,添加失败,但用户其实已经删除了这个设备,怎么办了?[/quote] 是我没理解么?你说的操作员用户会删除什么??是删除日志表的数据还是什么?我说的删除状态是日志表中的数据状态,好像前面也有人提出这个方法了。。。
叶恭介叶恭介 2020-10-19
  • 打赏
  • 举报
回复
引用 14 楼 hanhui1211 的回复:
[quote=引用 13 楼 叶恭介1989 的回复:][quote=引用 11 楼 hanhui1211 的回复:]那就把ID和名称都存上,操作员有改动或删除,都会记录在日志表中啊,查的时候直接查询就行了,什么人操作的,操作的什么内都能看出来
按你说的,问题在于操作员用户会删除的,这样名称哪里来。[/quote] 不能设置删除状态吗?不用物理删除,只修改删除状态[/quote] 删除状态。举个例子,一个组织下有设备,组织下的设备名称是不能相同的,那我创建了个UNIQUE 约束(组织和设备名称约束)。那你不用物理删除,只修改删除状态的话,那个下次再添加设备相同的名称时候,就会约束不成功,添加失败,但用户其实已经删除了这个设备,怎么办了?
叶恭介叶恭介 2020-10-16
  • 打赏
  • 举报
回复
引用 11 楼 hanhui1211 的回复:
那就把ID和名称都存上,操作员有改动或删除,都会记录在日志表中啊,查的时候直接查询就行了,什么人操作的,操作的什么内都能看出来
按你说的,问题在于操作员用户会删除的,这样名称哪里来。
叶恭介叶恭介 2020-10-16
  • 打赏
  • 举报
回复
目前我是将用户表,设备表等其它表添加或修改数据时,通过触发器,往另一个名称表里添加标识,名字。查询日志的时候,将日志的名称从名称表时获取。暂时只想到这样的解决方案
hanhui1211 2020-09-30
  • 打赏
  • 举报
回复
那就把ID和名称都存上,操作员有改动或删除,都会记录在日志表中啊,查的时候直接查询就行了,什么人操作的,操作的什么内都能看出来
tds__609 2020-09-29
  • 打赏
  • 举报
回复
操作员名还能修改? 设计问题。 你应该操作员名字一单注册不能修改,再来个昵称。 日志建议永久保存
叶恭介叶恭介 2020-08-31
  • 打赏
  • 举报
回复
顶一下,各位做过日志的朋友指导一下你们是怎么做的。
an_bachelor 2020-08-22
  • 打赏
  • 举报
回复
引用 7 楼 叶恭介1989 的回复:
[quote=引用 6 楼 mmcanyu 的回复:]楼上正解,标记为删除,不是彻底删除,确实是比较便宜的方式,很多人也是这么做的。
引用 5 楼 陈仲甫 的回复:
你的问题并不是设计问题,而是需求 不如回到这个日志本身的需求 问自己是需要一份永久的操作历史 还是一份现存用户的操作历史 也许回头看业务需求就会明白 如果你不能确定 可以采取保守一些的策略 保存所有曾经出现过的操作 比如重要的对象不允许删除(标记为删除,并且不提供完全删除操作)
标记为删除,那其实SQL用到这个用户表的SQL就要注意排除删除的用户,这改动也超多,因为有很多SQL要改[/quote]这说明硬编码导致的代码重复很多,你可以尝试重构这部分,例如将筛选用户的动作封装到一个函数中,比较将就的方式是把这种筛选放在呈现层,你也可以在删除的时候将被标记为删除的数据放到另一个表、库中,这部分通常会是冷数据。
叶恭介叶恭介 2020-08-21
  • 打赏
  • 举报
回复
引用 6 楼 mmcanyu 的回复:
楼上正解,标记为删除,不是彻底删除,确实是比较便宜的方式,很多人也是这么做的。
引用 5 楼 陈仲甫 的回复:
你的问题并不是设计问题,而是需求 不如回到这个日志本身的需求 问自己是需要一份永久的操作历史 还是一份现存用户的操作历史 也许回头看业务需求就会明白 如果你不能确定 可以采取保守一些的策略 保存所有曾经出现过的操作 比如重要的对象不允许删除(标记为删除,并且不提供完全删除操作)
标记为删除,那其实SQL用到这个用户表的SQL就要注意排除删除的用户,这改动也超多,因为有很多SQL要改
mmcanyu 2020-08-20
  • 打赏
  • 举报
回复
楼上正解,标记为删除,不是彻底删除,确实是比较便宜的方式,很多人也是这么做的。
an_bachelor 2020-08-20
  • 打赏
  • 举报
回复
你的问题并不是设计问题,而是需求 不如回到这个日志本身的需求 问自己是需要一份永久的操作历史 还是一份现存用户的操作历史 也许回头看业务需求就会明白 如果你不能确定 可以采取保守一些的策略 保存所有曾经出现过的操作 比如重要的对象不允许删除(标记为删除,并且不提供完全删除操作)
叶恭介叶恭介 2020-08-20
  • 打赏
  • 举报
回复
引用 3 楼 mmcanyu 的回复:
存名称又怕名称改了,存id又怕被删了。 其实,错了就错了,这是没办法的事。 建议,不能用外键同步删除,id和名称都存数据库,id存在时读取操作员表的名称,id不存在时读取日志表的名称。
每个操作的ID,都从数据库找名称不麻烦吗?操作日志是这样做的吗?
mmcanyu 2020-08-18
  • 打赏
  • 举报
回复
存名称又怕名称改了,存id又怕被删了。 其实,错了就错了,这是没办法的事。 建议,不能用外键同步删除,id和名称都存数据库,id存在时读取操作员表的名称,id不存在时读取日志表的名称。
叶恭介叶恭介 2020-08-17
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
建议 操作日志单独建表, 操作员名就以字符串字段直接存储
你说的方法,保存操作员名的话,操作员名改变,你这日记表的名字就错了,另外用户操作只是传用户ID和操作对象的ID过来,我此不是每个接口都要查询用户ID和操作对象ID这么麻烦
zgl7903 2020-08-17
  • 打赏
  • 举报
回复
建议 操作日志单独建表, 操作员名就以字符串字段直接存储

4,018

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧