用于日志记录的数据库架构

Database Architecture for logging

这个问题困扰了我很久,一直找不到答案。

我有一个拥有许多不同功能的庞大系统。这个系统的共同点当然是我的 users 可以

create, update, read & delete

我系统的不同部分。

出于简单的原因,假设我有一个具有以下功能的应用程序:

(请注意,我随机拿了这些只是为了证明所有这些都有自己独立的 table 并且不一定连接)。

现在我想创建某种日志系统。因此,无论何时有人创建、更新或删除一个实体,它都会被记录下来。

现在据我所知我可以通过两种方式做到这一点。

1.

为我系统中的 4 个功能中的每一个创建一个日志记录 table。但是,使用这种方法,我需要为我添加到系统中的每个新功能创建一个日志记录 table。如果我想创建一个可能是一项巨大任务的日志,我还必须合并来自 X 个 table 的数据!

2.

我可以创建如下内容:

然而,我将不得不再次为我将添加的每个新功能添加一个列。

所以我的问题是创建日志数据库架构的最佳方式是什么

或者有更简单的方法吗?

您可以这样做,而不是每个功能一个 target_xx:

target_id | target_type
1           video
4           document
5           user
2           user

甚至更好。具有目标类型的 table 并仅在 target_type

上插入相应的 id

像这样:

如果您想捕获每个 table 创建和更新日期,我将只使用 mysql 中的默认值和更新事件。您可以为 table:

定义这样的字段
ALTER TABLE table 
ADD COLUMN CreateDate Datetime DEFAULT CURRENT_TIMESTAMP, 
ADD COLUMN LastModifiedDate Datetime ON UPDATE CURRENT_TIMESTAMP;

您可以在所有 table 中添加这 2 个字段。如果您想使用一个中央 table 进行日志记录(这可能更难管理,因为您总是需要创建连接,而且性能可能更差),那么我会使用触发器。