在DB表中标记已删除的记录

Ema*_*sev 2 language-agnostic database-design database-schema

有时您想将数据库表记录标记为已删除而不是永久删除它,对吧?

你是怎样做的?

到目前为止,我一直在使用布尔"删除"字段,但我不确定它是否是一个很好的评论.

mar*_*pet 6

这就是它 - 一个布尔字段,表示记录被删除.我用过的那几次,我打电话给那个领域IsDeleted.

这通常称为逻辑删除.

您可以在报告中尊重该字段 - 这意味着将所有记录排除在外IsDeleted = true.如果你有很多表和关系,那些查询会变得有点复杂.

此外,如果您对表有唯一约束,则可能会遇到一些问题.例如,如果用户表中的用户表IsDeleted = true和电子邮件列是唯一的,则无法添加具有相同电子邮件地址的新用户.

有一些ORM会考虑这些字段 - 例如,如果存在名为"已删除"或"IsDeleted"的列,则SubSonic 2.2不会删除记录,而是将此字段设置为true.

一些相关资源:

作为替代方案,您可以添加审计表.