可能重复:
What to do when I want to use database constraints but only mark as deleted instead of deleting?
在一个使用频繁的数据库中设置某种“IsDeleted”标志来简单地标记要删除的记录(然后在以后删除它们),还是应该直接删除它们更合适?
我喜欢IsDeleted标志方法,因为它提供了一个简单的选项来恢复数据,以防出现严重错误,我甚至可以为用户提供某种“撤销”功能。我正在处理的数据非常重要。
我不喜欢IsDeleted,因为它真的与数据检索查询混淆,因为除了常规查询之外我还必须通过IsDeleted标志的状态进行过滤。查询只使用一个索引,所以我还假设除非我创建复合索引,否则会大大减慢速度。
那么,更合适的是什么?是否有更好的“中间道路”来获得两者的好处,以及您使用的是什么?为什么呢?
答案 0 :(得分:4)
根据经验,我从不删除任何数据。我在那里的业务类型总是存在一些问题,例如,取消其中有多少人拥有4号小部件的客户如果我删除了客户,我怎么能得到它。或者更有可能的是,如果从窗口小部件表中删除了大小为4的窗口小部件,则会导致引用完整性问题。 “Active”位标志似乎对我有用,并且索引没有大的性能损失。
答案 1 :(得分:1)
我会受到业务需求的驱使。如果客户端希望您立即恢复已删除的数据,并且取消删除数据是业务逻辑和/或用例的一部分,那么 isDeleted 标志是有意义的。
否则,通过将已删除的数据保留在数据库中,可以解决更适合数据库备份和维护过程解决的问题。
答案 2 :(得分:0)
答案是,这取决于情景。
是否需要撤消删除?
用户这样做的频率是多少?
随着时间的推移会产生多少记录?
如果需要,可以创建名称为_DELETED后缀的相同结构的表 Customers__DELETED。
我认为您还应该考虑当您取消删除记录并且其他一些用户输入了具有相似内容的记录时发生冲突会发生什么。
答案 3 :(得分:0)
答案 4 :(得分:0)
我了解到删除数据很少有意义,因为总会有一些报告需要数据,或者更常见的是一些人错误地删除并需要它。我个人将所有“已删除”的项目移动到数据库的存档版本。然后,这会逐步备份,报告可以使用它。主数据库大小保持精简,恢复数据并不是一个大问题。
但正如其他人所说,这取决于您的业务需求和数据库的规模/大小。存档/删除字段可能就足够了。