我有以下设计。 deleted_by
引用三个联结表的相同users
表。我是否应该进一步规范化此架构,并将deleted_by
,date_deleted
和reason_of_delete
(以及added_by
和date_added
放入“我尚未展示”中单独的表,如果是,如何?
旁注。我是否应该使用术语many-to-many
表,或cross
表,或join
表或其他东西,我一直在努力。如果我应该使用不同的术语,请提供建议,以便我可以编辑此帖子或直接编辑。谢谢编辑。改为"交界处"表格基于RBarryYoung的评论。
答案 0 :(得分:1)
多对多很好地描述了这种模式。在不了解系统的所有要求的情况下,很难做出任何明确的陈述。最大的问题是,那些删除列是参考文档本身还是参考该文档与另一个表的关系(例如table2)。假设他们参考了关系本身,那么将它们放在表中就可以了。虽然多对多模式通常在表中只有两个ID,但这根本不是必需的。
如果这些删除列是对文档本身的引用,那么它们应该被移动到该表,否则您将在多个位置复制数据,并且不得不担心将它们全部保持同步,这是一个巨大的头痛。
答案 1 :(得分:0)
如果您要跟踪许多列中跟踪状态更改的更深层次的审计跟踪,我会说在这种情况下,您应该有一个单独的审计跟踪表,这些表也会在处理事务时保留。因为你基本上只关心整个表的3个状态变化(即CrUD操作),我认为只需要有额外的审计跟踪列就可以了:create_datetime,update_datetime和status_flag,它指示状态 - 或者性质更新(例如,这是删除操作,更新操作还是描述修改的其他值得注意的状态)。你当然也可以有第4列,描述字段,描述状态变化的性质。
答案 2 :(得分:0)