Borrado total en cascada

Preguntado hace 1 año

Gabriel Molina
Votos
PositivosNegativosTotal
1 0 1
80 Visualizaciones
Compártelo: Compártelo en twitterCompártelo en Facebook

Hola, en la aplicación actual la tabla de usuarios no permitimos que se borre para mantener la integridad de datos, hacemos un borrado "lógico" pero no real. Tenemos un campo borrado de tipo bit. Si es igual a 1 está borrado.

Nos piden que se pueda hacer en ciertos casos, sólo los administradores, un borrado real. Es decir que los usuarios normales hagan el borrado como lo hacemos ahora, pero que los administradores puedan borrar de verdad.

Se me ocurre que hagamos un procedimiento almacenado para esto y que vaya borrando en el orden jerárquico todo lo relacionado con el usuario y luego borre el usuario, aunque me parece una solución bastante tediosa. ¿Sería posible-recomendable establecer una especie de delete cascade antes de borrar la fila y luego dejarlo como antes? ¿Otras soluciones?

Actualizando datos

1 Respuesta

Hace 1 año

Rafa

Rafa

1mDistinciones de plata2Distinciones de bronce8
Votos
PositivosNegativosTotal
303

Yo la solución más fácil que le veo a lo que te he entendido, es modificar las tablas para ponerles la cláusula on delete cascade a las tablas relacionadas con las de usuarios. Posteriormente en el código fuente discriminar qué tipo de usuario realiza el borrado, si es un usuario normal se hace un update para marcar el borrado "logico" y si es un administrador, se hace el delete real y le dejamos a oracle el borrado con delete cascade, que mejor que oracle nadie va a controlar la integridad de las entidades relacionadas :)

Si no puedes alterar las definiciones de las tabla entonces sí, yo haría un procedimiento, ya sea en pl/sql en oracle o en el programa. Y según qué usuario o realizo el borrado lógico, o invoco el delete real. Yo lo haría en pl/SQL para que te sirva de forma independiente del lenguaje de programación de la aplicación.

Cerrar

Me ha gustado la solución, desde luego es la que menos trabajo conlleva, lo malo es que todos entran con el mismo usuario de oracle... Basándonos en tu idea, hemos establecido el delete cascade ON, y borramos a través de un procedimiento almacenado, uno de los parámetros es si tiene que borrar de verdad o sólo poniendo borrado = 1. Gracias, Rafa. Gabriel Molina hace 1 año
Jajaja ¿y no es eso parte de nuestro día a día? ¿y qué pérfida mente inventó lo del "cliente siempre tiene razón", desde luego no trabajaba en desarrollo, eso o era el comercial? :D Gabriel Molina hace 1 año
Odio cuando el cliente va cambiando los requisitos y te acaba pidiendo lo qeu tu le ofreces el primer dia ... Rafa hace 1 año

Tu respuesta

Confirmación

Cerrar

Si sales ahora, perderás los cambios. ¿Estás seguro de querer salir?

Para participar en Babelias, debes estar convenientemente validado. Si ya eres usuario inicia sesión, si no lo eres, te puedes registrar.

Dar una respuesta

Trata de ser descriptivo, usa al menos 25 caracteres