我的表设计的一部分是包含一个 IsDeleted BIT 列,只要用户删除记录,该列就会设置为 1。因此,所有 SELECT 都不可避免地伴随着 WHERE IsDeleted = 0 条件。
我在上一个问题中读到(看在上帝的份上,我无法重新找到该帖子并引用它)这可能不是最好的设计,“审计追踪”表可能会更好。
你们是如何处理这个问题的?
更新 我在 SQL Server 上。欢迎使用其他数据库的解决方案,尽管对我来说没那么有用,但可能对其他人有用。
更新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/