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

Delete en cascada

Estas en el tema de Delete en cascada en el foro de PostgreSQL en Foros del Web. hola amigos , mi consulta es la sgte: tengo 4 tablas (niño, padre, madre y familia) y tengo q hacer un delete en cascada para ...
  #1 (permalink)  
Antiguo 11/02/2009, 18:03
 
Fecha de Ingreso: diciembre-2007
Mensajes: 385
Antigüedad: 12 años, 10 meses
Puntos: 0
Delete en cascada

hola amigos , mi consulta es la sgte:

tengo 4 tablas (niño, padre, madre y familia) y tengo q hacer un delete en cascada para cuando se borre un niño se borren todos sus datos y los de sus padres y familia, pero antes de borrar debo comprobar si es q el niño tiene mas hermanos o no, para q si tiene mas hermanos solo debo borrar el los datos del niño y el id del niño presente en la tabla familia como clave foranea he intentado hacerlo pero no he podido :( estoy desesperado ya q esto me tiene estancado, porfavor alguien me puede guiar en cuanto a codigo a como hacer esto??? porfavor se los ruego estoy contratiempo y no lo he podido solucionar!!!!! :( de antemano gracias..... bye
  #2 (permalink)  
Antiguo 12/02/2009, 02:57
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: Delete en cascada

Primero, no repitas los hilos.
Segundo, da información más especifica, explica mejor el problema y seguramente obtendras mejores respuestas.
Cosas como "lo he intentado pero no he podido" sin decir que es lo que has intentado tampoco ayuda mucho.


No lo hagas con delete on cascada, que ademas (por la poca información que das) no creo que puedas,
Hazte un trigger donde compruebes los diferentes casos y actuas en consecuencia en cada uno.
Si tienes dudas sobre el trigger pregunta, diciendo que has hecho, que quieres hacer y que falla.

Salu2
  #3 (permalink)  
Antiguo 12/02/2009, 08:55
 
Fecha de Ingreso: diciembre-2007
Mensajes: 385
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Delete en cascada

Hola seyko bueno, tengo estre trigger q me elimina al padre madre y familia pero sin condicion es decir sin comprobar si la familia tiene mas hermanos o no el trigger es este:

Create or replace function eliminar_nino() returns trigger as

'
declare
Begin



delete from madre where old.id_madre=id_madre;
delete from padre where old.id_padre=id_padre;
delete from familia where old.id_nino=id_nino;
return new;
End;
'

language 'plpgsql';

create trigger eliminar_nino before
delete on nino
for each row execute procedure eliminar_nino();


lo q quiero yo y lo q no se como hacer dentro de este trigger como comprobar si el niño tiene mas hermanos para q si el niño tienes mas hermanos solo se elimine al niño q se desee y no a su familia completa q condicion debo poner???, la tabla familia la tengo asi: id_familia, familia_primer_apellido, familia_segundo_apellido (estas 3 son primary key) y id_nino, id_padre, id_madre (foreign key)

las key id_familia, id_nino, id_madre e id_padre las tengo komo integer y las autoincremento por codigo php

mi pregunta entonces como lo hago para comprobar si el niño es hijo unico o no y lo otro si no fuese hijo unico como podria borrar solo el id del niño y no los datos de toda su familia ya q id_nino en la tabla familia es clave foranea??? porfavor ayudaa amigos .... de antemano gracias!!!!!
  #4 (permalink)  
Antiguo 13/02/2009, 03:40
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: Delete en cascada

que diseño más raro, pon la definicion de todas las tablas implicadas.

La idea es hacer algo del tipo:
Código:
IF (select tiene_hermanos = true)
THEN
  borrar_solo_niño
ELSE
  borrar_familia_entera
ENDIF;
La select para comprobar si tiene hermanos no se como hacerla, porque no entiendo tu diseño de las tablas.

Salu2
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 21:59.