I'm looking for the pros and cons of any approaches people have used to handle virtual deletes.

Is it better to save off the records using triggers into a generic table using XML?
How does one handle child records?
Should all records simply be marked with a Deleted_Flg?
Are such records ignored using fine-grained transaction control?
Are such fields added to all indexes?
Do such fields get histograms?
Are such records periodically archived?
Are deleted records instead copied to exact copies of each table?
How are un-deletes handled?

Any and all thoughts are welcome.

Thanks,

- Chris