Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/03/2007, 06:09
Avatar de Pip
Pip
 
Fecha de Ingreso: noviembre-2003
Ubicación: Málaga
Mensajes: 280
Antigüedad: 20 años, 5 meses
Puntos: 0
Constraint para borrar varios campos ON DELETE

Hola a todos.

La duda es si puedo crear una constraint para que la cláusula ON DELETE SET NULL afecte a varios campos de una sola vez, ya que me sucede lo siguiente. En una tabla tengo tres referencias foráneas a un mismo campo y en esos tres campos tengo puesto ON DELETE SET NULL. Al intentar borrar los datos a los que hacen referencia, el error comienza en el segundo campo, ya que si los tres campos los pongo como ON DELETE SET NULL, ON DELETE CASCADE y ON DELETE CASCADE, no sucede el error.

Mi idea de lo que sucede es que al borrar la fila a la que hacen referencia los tres campos, sólo se "activa" en ese mismo momento el primer ON DELETE SET NULL y en los otros provoca error porque la clave foránea que contienen ya no existe. Sin embargo, si hago una constraint para los tres campos, y cada campo no hiciera referencia a la misma fila, me borraría campos que no debería.

Espero haber conseguido explicar el problema. Por si acaso, pongo un ejemplo simplificado de como lo tengo hecho:

Código PHP:
CREATE TABLE usuario (
  
COD_USUARIO INTEGER PRIMARY KEY
);

CREATE TABLE sub_usuario (
 
COD_SUB_USUARIO INTEGER PRIMARY KEY,
 
DEPENDE1 REFERENCES usuario ON DELETE SET NULL,
 
DEPENDE2 REFERENCES usuario ON DELETE SET NULL,
 
DEPENDE3 REFERENCES usuario ON DELETE SET NULL
); 
Como veréis si lo probáis y no me estoy confundiendo, si los tres SUB_USUARIOS apuntan al mismo usuario, sucede que sólo afecta al primer SET NULL y los demás dan error porque parecen no ejecutarse.

Nota: si pusiera ON DELETE CASCADE no daría error, pero no quiero borrar a los sub_usuarios que no hagan referencia a ese usuario que haya sido borrado.
__________________
por Pip