数据库设计问题.用于删除的BIT列

sup*_*er9 3 database sql-server database-design

我的表设计的一部分是包括一个IsDeleted BIT列,每当​​用户删除一条记录时,该列设置为1.因此,所有SELECTS都不可避免地伴随着WHERE IsDeleted = 0条件.

我在之前的一个问题(我不能因为上帝的爱重新找到那篇文章并参考它)中读到这可能不是最好的设计而且"审计追踪"表可能更好.

你们是怎么处理这个问题的?

更新 我在SQL Server上.其他DB的解决方案是受欢迎的,虽然对我没有用,但也许对其他人有用.

Update2 只是为了封装到目前为止所说的每个人.似乎基本上有3种方法可以解决这个问题.

  1. 保持原状
  2. 创建审计表以跟踪所有更改
  3. 使用WHERE IsDeleted = 0的视图

peu*_*feu 5

因此,所有SELECTS都不可避免地伴随着WHERE IsDeleted = 0条件.

这可能不是一个非常好的方法,正如您可能已经注意到的那样,它非常容易出错.你可以简单地创建一个VIEW

CREATE VIEW myview AS SELECT * FROM yourtable WHERE NOT deleted;
Run Code Online (Sandbox Code Playgroud)

然后你只需使用myview而不是mytable,你就不必在SELECT中考虑这个该死的列.

或者,您可以将已删除的记录移动到单独的"归档"表中,该表根据已删除与活动记录的比例,可能会使您的"活动"表格更小,更好地缓存在RAM中,即更快.