Part of my table design is to include a IsDeleted BIT column that is set to 1 whenever a user deletes a record. Therefore all SELECTS are inevitable accompanied by a WHERE IsDeleted = 0 condition.
I read in a previous question (I cannot for the love of God re-find that post and reference it) that this might not be the best design and an ‘Audit Trail’ table might be better.
How are you guys dealing with this problem?
Update
I’m on SQL Server. Solutions for other DB’s are welcome albeit not as useful for me but maybe for other people.
Update2
Just to encapsulate what everyone said so far. There seems to be basically 3 ways to deal with this.
- Leave it as it is
- Create an audit table to keep track of all the changes
- Use of views with WHERE IsDeleted = 0
If you have to have this kind of Deleted Bit column, then you really should consider setting up some VIEWs with the WHERE clause in it, and use those rather than the underlying tables. Much less error prone.
For example, if you have this view:
Then someone who wants to see current products can simply write:
This is much less error prone than writing:
As you say, people will forget that WHERE clause, and get confusing and incorrect results.
P.S. the example SQL comes from Microsoft’s Northwind database. Normally I would recommend NOT using spaces in column and table names.