假设我想记录数据库中活动日志中的某些内容。在某些情况下,这些活动与用户(例如,用户创建的东西)相关联。在某些情况下,这些活动由应用程序自动完成(例如,系统由于某种原因更新了某些记录)。我希望能够跟踪谁在系统中做了什么。跟踪用户的行为似乎很简单:
TABLE: user
- user_id (PK)
TABLE: activity_log
- activity_log_id (PK)
- user_id (FK)
上述设计允许我将每个活动与特定用户相关联(因此,强制参照完整性)。但是,如果这是采取行动的系统呢?它没有user_id
我可以插入activity_log
。
我应该:
0
表格中不存在activity_log.user_id
,也可以0
作为user
插入代表系统? InnoDB不会让我这样做,对吗?建议?
答案 0 :(得分:1)
您可以允许activity_log.user_id
包含NULL,然后NULL表示没有用户执行该操作,“no user”表示“系统执行了”。
如果您不想使用NULL来表示“系统执行了”,那么您可以将用户添加到您的users表中,并将该用户用作“系统执行它”的占位符。
答案 1 :(得分:0)
在日志记录和审核应用程序中强制引用完整性的一个问题是您无法删除用户。 (或者你正在审计的任何事情。)你可以为这两种情况做出好的论据,