gpt4 book ai didi

mysql - 数据库设计 : how to enforce integrity

转载 作者:搜寻专家 更新时间:2023-10-30 20:44:00 27 4
gpt4 key购买 nike

假设我想在数据库的事件日志中记录某些内容。在某些情况下,这些事件与用户相关联(例如,用户创建了一些东西)。在某些情况下,这些事件是由应用程序自动完成的(例如,系统出于某种原因更新了一些记录)。我希望能够跟踪谁在系统中做了什么。跟踪用户的行为似乎很简单:

TABLE: user
- user_id (PK)

TABLE: activity_log
- activity_log_id (PK)
- user_id (FK)

上述设计允许我将每个事件关联到特定用户(并因此强制执行参照完整性)。但是,如果是系统采取了行动呢?它没有我可以插入到 activity_log 中的 user_id

我应该:

  • 只需将 0 作为 activity_log.user_id 来表示系统,即使 user< 中不存在 0/表? InnoDB 不允许我这样做,对吧?
  • 创建一个用户专门代表系统。问题是我的应用程序中的每个帐户所有者可能都需要它自己的“系统用户”,这样我以后就可以区分一个帐户的系统用户和另一个帐户的系统用户。也许这会变得丑陋。不确定。

建议?

最佳答案

您可以允许您的 activity_log.user_id 包含 NULL,然后 NULL 表示没有用户执行该操作,“没有用户”意味着“系统执行了它”。

如果您不想使用 NULL 来表示“系统完成了”,那么您可以将用户添加到您的用户表并将该用户用作“系统完成”的占位符。

关于mysql - 数据库设计 : how to enforce integrity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7962429/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com