sql-server - 数据库设计题。用于删除的 BIT 列

标签 sql-server database database-design

我的表设计的一部分是包含一个 IsDeleted BIT 列,只要用户删除记录,该列就会设置为 1。因此,所有 SELECT 都不可避免地伴随着 WHERE IsDeleted = 0 条件。

我在上一个问题中读到(看在上帝的份上,我无法重新找到该帖子并引用它)这可能不是最好的设计,“审计追踪”表可能会更好。

你们是如何处理这个问题的?

更新 我在 SQL Server 上。欢迎使用其他数据库的解决方案,尽管对我来说没那么有用,但可能对其他人有用。

更新2 只是为了概括到目前为止大家所说的内容。似乎基本上有 3 种方法来处理这个问题。

  1. 保持原样
  2. 创建一个审计表来跟踪所有的变化
  3. 使用 WHERE IsDeleted = 0 的 View

最佳答案

Therefore all SELECTS are inevitable accompanied by a WHERE IsDeleted = 0 condition.

这不是一个很好的方法,您可能已经注意到,它很容易出错。 您可以创建一个简单的 VIEW

CREATE VIEW myview AS SELECT * FROM yourtable WHERE NOT deleted;

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

或者,您可以将已删除的记录移动到一个单独的“存档”表,根据已删除记录与事件记录的比例,这可能会使您的“事件”表小很多,更好地缓存在 RAM 中,即更快。

关于sql-server - 数据库设计题。用于删除的 BIT 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1672849/

相关文章:

c# - SQL Server 一张或两张表?

sql - 存储过程检查参数是否为 NULL

数据库加密

python - 如何根据环境从我的 settings.py DATABASES 数组中激活数据库设置?

sql-server - 在数据库表中使用汇总列是否常见或良好的形式?

sql - 等于操作中 "SQL_Latin1_General_CP1_CI_AS"和 "Modern_Spanish_CI_AS"之间的排序规则冲突

database - 提高 JOIN 和子 SELECT 的查询性能

sql-server - 是否有适用于 SQL Server 2005 的数据大小调整工具?

sql - 名+姓+生日组合是否足够独特?

sql - 在 Sql 存储过程中使用 XML PATH