SQL - 两个表之间的多重关系
SQL - Multiple Relationships Between Two Tables
我有一个用户 table 和一个任务 table。
在任务 table 中,我想要创建者和修改者列。
这两列都应该有用户的外键 table。
这就像从每一列创建外键到用户一样简单吗table或者我应该在这里采用推荐的方法吗?
这没什么奇怪的。 (恕我直言,你可能想多了。)
您的任务实体有两个用户(创建和修改)。每个列的列都可以配置为从您的任务到您的用户的自己的外键 table。没问题。
但我的经验告诉我,您应该考虑一种不同的方式来处理关联 User 和 Task 的问题。我建议您添加第三个 table,可能叫做 Action。
用户对任务执行的每个操作都会有一行。它可能看起来像这样。
action_id task_id user_id action ts description
214 48 97 create 2020-01-29T12:33:00
215 48 34 edit 2020-01-29T14:25:00 explain how to test
216 48 88 edit 2020-01-29T14:48:00 update explanation
action_id
是一个自动递增的 pk。 task_id
是任务 table 的 FK,而 user_id
是用户 table 的 FK。此操作 table 的目的是跟踪用户对任务所做的操作。并且可以直接查询对任务执行的第一个操作或最后一个操作。
我有一个用户 table 和一个任务 table。
在任务 table 中,我想要创建者和修改者列。
这两列都应该有用户的外键 table。
这就像从每一列创建外键到用户一样简单吗table或者我应该在这里采用推荐的方法吗?
这没什么奇怪的。 (恕我直言,你可能想多了。)
您的任务实体有两个用户(创建和修改)。每个列的列都可以配置为从您的任务到您的用户的自己的外键 table。没问题。
但我的经验告诉我,您应该考虑一种不同的方式来处理关联 User 和 Task 的问题。我建议您添加第三个 table,可能叫做 Action。
用户对任务执行的每个操作都会有一行。它可能看起来像这样。
action_id task_id user_id action ts description
214 48 97 create 2020-01-29T12:33:00
215 48 34 edit 2020-01-29T14:25:00 explain how to test
216 48 88 edit 2020-01-29T14:48:00 update explanation
action_id
是一个自动递增的 pk。 task_id
是任务 table 的 FK,而 user_id
是用户 table 的 FK。此操作 table 的目的是跟踪用户对任务所做的操作。并且可以直接查询对任务执行的第一个操作或最后一个操作。