3

我正在启动一个新应用程序,并且想知道最好的日志记录方法是什么。数据库中的某些表需要记录每个更改以及进行更改的用户。其他表可能只需要记录最后修改时间。

在以前的应用程序中,我使用了不同的方法来做到这一点,但想听听其他人做了什么。

我尝试了以下方法:

  1. 向表中添加“修改的”日期时间字段以记录上次编辑的时间。
  2. 添加一个辅助表,仅用于记录主表中的更改。辅助表中的每一行代表主表中的一个更改字段。因此,主表中的一次记录更新可能会在辅助表中创建多条记录。
  3. 添加一个类似于 no.2 的表,但它记录了三个或四个表的编辑,在附加字段中引用它相关的表。

你使用什么方法并且会推荐?

还有什么是记录已删除数据的最佳方法?我从不喜欢用户可以从数据库中永久删除记录的想法,所以通常我有一个布尔字段“已删除”,当它被删除时它会更改为 true,然后它将在模型级别从所有查询中过滤掉. 对此有何其他建议?

最后一个.. 记录用户活动的最佳方法是什么?目前我有一个记录登录/注销/密码更改等的表,根据操作的不同,给它一个代码 1,2,3 等。

希望我没有过多地塞进这个问题。谢谢。

4

2 回答 2

2

我知道这是一个非常古老的问题,但我想添加更详细的答案,因为这是我在谷歌上搜索到的关于数据库日志的第一个链接。

记录数据更改的方法基本上有两种:

  • 在应用服务器层
  • 在数据库层

如果可以,只需在服务器端使用日志记录。它更加清晰和灵活。

如果您需要登录数据库层,您可以使用触发器,正如@StanislavL 所说。但是触发器会降低您的数据库性能并限制您将更改日志存储在同一个数据库中。

另外,您可以查看事务日志监控。例如,在 PostgreSQL 中,您可以使用逻辑复制机制将 json 格式的更改从数据库流式传输到任何地方。

在单独的服务中,您可以接收、处理和记录任何形式和任何数据库中的更改(例如,只需将您获得的 json 放入 Mongo)

于 2020-05-06T19:43:37.413 回答
1

您可以将触发器添加到任何跟踪表以监听插入/更新/删除。在触发器中,只需检查 NEW 和 OLD 值并将它们写入带有列的特殊表中

table_name
entity_id
modification_time
previous_value
new_value
user

很难找出进行更改的用户,但如果您changed_by在您收听的表中添加列,则可能。

于 2013-08-09T12:24:07.510 回答