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

desactivar llave foranea para poder eliminar registro

Estas en el tema de desactivar llave foranea para poder eliminar registro en el foro de Mysql en Foros del Web. e aqui yo con un tropeson que no me di cuenta durante el analisis.. tengo dos tablas : libros , prestamos libros: -cod_libro -nom_libro -est_libro ...
  #1 (permalink)  
Antiguo 28/07/2013, 13:56
Avatar de cristo995  
Fecha de Ingreso: noviembre-2012
Mensajes: 187
Antigüedad: 11 años, 5 meses
Puntos: 0
desactivar llave foranea para poder eliminar registro

e aqui yo con un tropeson que no me di cuenta durante el analisis..

tengo dos tablas : libros , prestamos

libros:
-cod_libro
-nom_libro
-est_libro // estado del libro puede estar: disponible o prestado

prestamos:
-cod_pre
-est_pre // estado del prestamos : Activo o finalizado
-fec_pre // fecha del prestamo
-cod_libro // llave forane enlaza a libro

aqui voii.
cuando hago un prestamo automaticamente hago un update a la tabla libro cambiandole el estado de disponible a prestado.

cuando hago la finalizacion de este prestamos hago lo mismo, un UPDATE a la tabla libro cambiadole el estado de: prestado a disponible.

el problema va al momento de querer eliminar un libro, solo puedo eliminar un libro el cual nunca haya tenido ningun prestamo. mientras que si tiro a eliminar cualquier libro asi en su prestamo ya este finalizado no se deja. manda error por la conexion q tiene con prestamos..

mi pregunta es como podria hacer que al momento de cambiar el estado del prestamo de: activo a finalizado este pierda cualquier conexion que tenga con la tabla libro?? podria desactivar la llave foranea de ese registro ????

para asi si en algun caso poder eliminarlo normalemente el libro ???
  #2 (permalink)  
Antiguo 28/07/2013, 15:42
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: desactivar llave foranea para poder eliminar registro

Hay tres opciones que puedes usar:
1) No borres el libro. Decláralo dado de baja con un campo adicional fechaBaja que sea nulable, lo mismo que el fechaAlta sea NOT NULL. De ese modo podrás tener trazabilidad de las altas y bajas, y no te causará problemas con las dependencias. Por supuesto que ese esquema (que es el que se suele usar en la realidad, implica que tus consultas deben considerar siempre la posibilidad de que el libro buscado no esté activo.
2) Usa dos sentencias para dar de baja: Una para borrar todos los prestamos donde aparezca el libro, y otra para borrar el libro.
3) Redefine la constriaint FK como ON DELETE CASCADE ON UPDATE CASCADE, y deja que el problema lo resuelta MySQL.

¿Lo óptimo?
El primer caso.
__________________
¿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: desactivar, llave, poder, registro, tabla
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 12:06.