我正在研究跟踪和处理工单/门票的应用程序。每张票都链接到通过级联MySQL中的任何更改的外键创建/拥有票的用户。显然,如果用户由于某种原因曾经删除他们的账户,我们仍然希望记录他们的门票和他们的基本信息。存储已删除用户数据的最佳方法?
实现这个想法的第一种方法是在用户表中有一列表示它们是处于活动状态还是非活动状态,即是否已删除。这样当他们关闭/删除他们的账户时,他们只是翻转这个值,然后无法访问应用程序。
我的另一个想法是当账户被删除时,将用户记录移到已删除的用户表中。通过这种方式可以将用户表的性能保持在最佳状态,这在增大时可能是一笔巨大的交易,但会增加额外的查询来移动记录。
显然这部分可以是首选项,但我对性能方面感兴趣。本质上,问题是选择查询与插入查询相比如何,以及在什么时候通过将插入查询(将记录移动到已删除的用户表)添加到混合中来提高总体性能?
我的意思是数百万当我说大。我对“物化视图”并不了解,因为(我确信这很明显),我不是一个真正的数据库人员。但是,这听起来像是我应该研究的东西。 我知道每个查询都需要最少量的资源和时间作为基准,并且我认为使用它可以计算何时添加额外的查询会对整体有利。 无论如何,很好的答案,谢谢。 – 2011-12-21 18:36:47
“你可以计算何时添加额外的查询会对整体有利”。你无法计算它。由于数据库设计和实现的各种自由度,这几乎是不可能的。您只能对您的设计和实施选择进行实证研究。 – 2011-12-21 18:48:50
* is_deleted *列的一个令人讨厌的缺点是你不能完全使用UNIQUE键,除非你把NULL放在它里面而不是TRUE。 – 2015-12-11 14:08:28