用于日志记录的数据库架构
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 进行日志记录(这可能更难管理,因为您总是需要创建连接,而且性能可能更差),那么我会使用触发器。
这个问题困扰了我很久,一直找不到答案。
我有一个拥有许多不同功能的庞大系统。这个系统的共同点当然是我的 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 进行日志记录(这可能更难管理,因为您总是需要创建连接,而且性能可能更差),那么我会使用触发器。