Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

ON DELETE ¿Qué?

Estas en el tema de ON DELETE ¿Qué? en el foro de Mysql en Foros del Web. Hola, tengo una duda y es que ya me esta matando.. A ver tengo una BBDD en MySQL y tengo una tabla padre (usuario) y ...
  #1 (permalink)  
Antiguo 02/02/2012, 11:03
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 15 años, 8 meses
Puntos: 3
ON DELETE ¿Qué?

Hola, tengo una duda y es que ya me esta matando..

A ver tengo una BBDD en MySQL y tengo una tabla padre (usuario) y una tabla hijo (acciones) con una clave ajena a la tabla padre, en esta clave tenía puesto un ON DELETE NO ACTION y ON UPDATE CASCADE, pensando que "NO ACTION" no ejecutaba ninguna acción sobre la fila de la tabla hijo, pero lo que no permite es eliminar la fila de la tabla padre si hay referencias desde la tabla hijo.
Mirando el manual de MySQL ha visto que puedo poner CASCADE, RESTRICT, NO ACTION, SET NULL

Entonces con NO ACTION y RESTRICT obtengo el mismo resultado entonces queda CASCADE, pero la intención es no perder ese registro de las acciones que hace un usuario aun este este eliminado, entonces podría ponerlo a NULL, pero en una de las tablas hijos ese campo es clave ajena pero también forma parte de la clave primaria con lo cual no puede valer null.

¿A alguien se le ocurre algo?

Gracias de ante mano y Saludos a todos.
  #2 (permalink)  
Antiguo 02/02/2012, 11:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ON DELETE ¿Qué?

Lo que se hace en esos casos es hacer lo que se denomina "baja lógica".
Se le agrega un campo adicional "fecha_Baja", como NULL, y cuando se da de baja se le asigna fecha.
Luego, toda consulta que involucre a esa tabla o tablas afectadas, debe considerar esa condición en los datos: Si es NULL, está activo, si no es NULL, está dado de baja.
Así es como se procede habitualmente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 02/02/2012, 14:21
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: ON DELETE ¿Qué?

Cuando te refieres a una fecha de baja te refieres al usuario ¿verdad? quedando registrado este en la tabla hijo no como null si no con el id del usuario, pero quedando este sin utilidad en el sistema.

Muchas gracias gnzsoloyo!!
  #4 (permalink)  
Antiguo 02/02/2012, 14:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ON DELETE ¿Qué?

No exactamente. Agregar el id del usuario es una buena idea, para saber quién lo dio de baja. Eso también se hace.
Pero si te estoy diciendo "fecha_baja" como nombre de campo, es exactamente eso: La fecha en que se dio de baja.
Saber la fecha en que un artículo se dio de baja es muy importante para realizar reportes discriminados por fecha. De lo contrario el dato desaparecería de todas las consultas, y luego las cuentas no cierran.
¿Ahora se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: delete, sql, tabla, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:38.