Solo trato de obtener algunas ideas sobre lo que la gente hace para este escenario. Tenemos una base de datos del sistema (SQL Server 2008 R2) que tiene tablas y cada tabla tiene un campo que podemos llamar "Eliminado". Básicamente es un campo de bits si es un 1, el registro se elimina, si es un 0, no se elimina. El campo no es anulable y su valor predeterminado es, por supuesto, 0.
No podemos permitir eliminaciones reales en la base de datos, por lo que para evitar esto, establecemos un campo de bits (Eliminado) en verdadero. En nuestra aplicación terminamos con consultas que se ven así:
SELECT blah FROM MyTable WHERE .. AND Deleted=0
Básicamente, filtramos los registros para que solo obtengamos filas no eliminadas. Nuestro problema son los registros relacionados que deben conectarse en cascada. ¿Qué prefiere la gente? ¿Deberíamos hacer esto en el código del lado del servidor para que cuando elimine un registro se elimine (establece el campo de bits eliminado en verdadero) para todos los registros relacionados? ¿O debería ser este un disparador que tiene que verificar este campo y establece el campo de bits para todos los registros relacionados en 1?
¿O estamos completamente en el camino equivocado?