I'm wondering if someone can provide various rationales/solutions for knowing when to delete records from a database vs. simplying hiding them during read operations via a field value, e.g., `is_hidden=1`. 

My application is a social network/e-commerce web application. I tend to favor the `is_hidden` strategy but as one's site grows I can see this leading to a really badly performing site.

Here's my list. What items on the list am I missing? Is the list's prioritization good?

`Delete`:

1. rationale: Reduce table size/improve database performance
2. rationale: Useful if data is trivial to create
3. solution: SQL `DELETE`

`is_hidden`:

1. rationale: allow users/DBA to restore data/useful for sensitive & hard to `CREATE` data
2. rationale: can `DELETE` it later if necessary
3. solution: SQL `SELECT ... WHERE is_hidden!=1`

Thoughts?