规范化联结表

时间:2016-02-09 15:07:15

标签: mysql sql database-design

我有以下设计。 deleted_by引用三个联结表的相同users表。我是否应该进一步规范化此架构,并将deleted_bydate_deletedreason_of_delete(以及added_bydate_added放入“我尚未展示”中单独的表,如果是,如何?

旁注。我是否应该使用术语many-to-many表,或cross表,或join表或其他东西,我一直在努力。如果我应该使用不同的术语,请提供建议,以便我可以编辑此帖子或直接编辑。谢谢编辑。改为"交界处"表格基于RBarryYoung的评论。

enter image description here

3 个答案:

答案 0 :(得分:1)

多对多很好地描述了这种模式。在不了解系统的所有要求的情况下,很难做出任何明确的陈述。最大的问题是,那些删除列是参考文档本身还是参考该文档与另一个表的关系(例如table2)。假设他们参考了关系本身,那么将它们放在表中就可以了。虽然多对多模式通常在表中只有两个ID,但这根本不是必需的。

如果这些删除列是对文档本身的引用,那么它们应该被移动到该表,否则您将在多个位置复制数据,并且不得不担心将它们全部保持同步,这是一个巨大的头痛。

答案 1 :(得分:0)

如果您要跟踪许多列中跟踪状态更改的更深层次的审计跟踪,我会说在这种情况下,您应该有一个单独的审计跟踪表,这些表也会在处理事务时保留。因为你基本上只关心整个表的3个状态变化(即CrUD操作),我认为只需要有额外的审计跟踪列就可以了:create_datetime,update_datetime和status_flag,它指示状态 - 或者性质更新(例如,这是删除操作,更新操作还是描述修改的其他值得注意的状态)。你当然也可以有第4列,描述字段,描述状态变化的性质。

答案 2 :(得分:0)

也许使用超级?我将不胜感激。

enter image description here