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

problema ON DELETE CASCADE

Estas en el tema de problema ON DELETE CASCADE en el foro de Mysql en Foros del Web. Hola Tengo 3 tablas y las siguientes claves: comp ->compid dep ->depid com_dep ->compid ->depid la tabla com_dep es donde se crea la relación "que ...
  #1 (permalink)  
Antiguo 18/04/2008, 08:21
 
Fecha de Ingreso: octubre-2004
Ubicación: En algún lugar de la República Oriental del Uruguay
Mensajes: 366
Antigüedad: 19 años, 6 meses
Puntos: 0
problema ON DELETE CASCADE

Hola

Tengo 3 tablas y las siguientes claves:

comp
->compid


dep
->depid


com_dep
->compid
->depid

la tabla com_dep es donde se crea la relación "que dep perteneces a que comp"
En un script de mi aplicación quiero borrar una registro de comp, al borrar este registro, tengo que también borrar el registro(s) en "com_dep", y (aquí viene mi problema), borrar los dep(s) que esten asociados en la tabla "dep"

Ejemplo:

comp
->compid=1


dep
->depid=9
->depid=10

com_dep
->compid=1
->depid =9
->compid=1
->depid =10

...entonces al borrar compid=1, se tendrían que borrar todos los registros del ejemplo, inclusive en la tabla "dep"

En mi estructura las las tablas "padre" serían "comp" y "dep", en estas tablas se generan las claves únicas, autoincrementadas.
Estos son los índices en la tabla "com_dep"
compid->comp->ON DELETE CASCADE
depid->dep->ON DELETE CASCADE

Dese ya gracias.
__________________
ratamaster
  #2 (permalink)  
Antiguo 18/04/2008, 10:54
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Re: problema ON DELETE CASCADE

Cita:
...entonces al borrar compid=1, se tendrían que borrar todos los registros del ejemplo, inclusive en la tabla "dep"
- Si borras ese dato desde la tabla com_dep, no se borrará de comp ni de dep. puesto que no son tablas hijas.
- Si borras ese dato desde la tabla com solo se borrará de la tabla com_dep, y no de dep ya que no es hijo de com

saludos!

PD: recuerda que la funcionalidad de Borrado en cascada solo se da en tablas del tipo InoDB
  #3 (permalink)  
Antiguo 18/04/2008, 11:09
 
Fecha de Ingreso: octubre-2004
Ubicación: En algún lugar de la República Oriental del Uruguay
Mensajes: 366
Antigüedad: 19 años, 6 meses
Puntos: 0
Re: problema ON DELETE CASCADE

Hola Genetix

1ero: las tablas son inodb
2do: "- Si borras ese dato desde la tabla com_dep, no se borrará de comp ni de dep. puesto que no son tablas hijas.". Yo lo que hago, es borrar de la tabla "comp", y dado que en "comp_dep" tengo definido compid ON CASCADE DELETE, el registro en "comp_dep" es borrado. El problema es que NO estoy borrado de la tabla "dep", y por lo tanto quedan registros colgados. Yo lo que quiero ( si es posible ), es que al borrar en "comp" se borre todo lo relacionado al registro seleccionado, me explico?
3ero: "- Si borras ese dato desde la tabla com solo se borrará de la tabla com_dep, y no de dep ya que no es hijo de com ". Si, es cierto, pero como hago para que se borre en las 3 tablas?? Tengo que hacer a "dep" hijo de "comp"?? Pero si hago esto creo que la tabla "comp_dep" sería obsoleta, no?
__________________
ratamaster
  #4 (permalink)  
Antiguo 18/04/2008, 11:20
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Re: problema ON DELETE CASCADE

Tienes que revisar bien tu diseño de DB, para que veas lo que realmente buscas.

Como dices una de las 2 tablas va quedar obsoleta, así que tienes que decidirte si borras comp_dep o dep.

Saludos
  #5 (permalink)  
Antiguo 18/04/2008, 11:22
 
Fecha de Ingreso: octubre-2004
Ubicación: En algún lugar de la República Oriental del Uruguay
Mensajes: 366
Antigüedad: 19 años, 6 meses
Puntos: 0
Re: problema ON DELETE CASCADE

ok, gracias!
__________________
ratamaster
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 13:27.