Dudas sobre actualización en cascada en base de datos

  • Autor Autor emaasteer
  • Fecha de inicio Fecha de inicio
E

emaasteer

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola buenos días, hace poco que empecé con las base de datos y tengo una duda con la actualización en cascada.
Suponiendo que tengo las siguientes tablas:

tabla.webp
Me dicen:
Cambia las reglas de comportamiento de SUMINISTRO.IdProveedor a Actualización en cascada.
Por lo que entiendo:
Si modifico el “IdProveedor” de la tabla “Proveedor” se mantendría la integridad y también se actualizaría en la tabla “Suministro” y viceversa. Es esto correcto o solo podría actualizarlo en la tabla suministro y no en proveedor?

gracias:encouragement::encouragement:
 
Hola [MENTION=185474]emaasteer[/MENTION], en primer lugar si necesitas cambiar las Primary Key de cualquier tabla, es que tu diseño de la base de datos está mal, porque esto nunca se debe hacer.

Volviendo al tema, tenemos dos formas de cascada en SQL, ON DELETE CASCADE y ON UPDATE CASCADE. En tu caso sería "ON UPDATE CASCADE", lo cual significa que si Proveedor.IdProveedor cambia, lo harán todas las foreign keys de esa columna que tengan la propiedad "ON UPDATE CASCADE". La forma de setearlo es la siguiente:

Insertar CODE, HTML o PHP:
CREATE TABLE suministro(
    idProveedor INT, 
    idPieza INT,
    cantidad INT,
    FOREIGN KEY (idProveedor) 
        REFERENCES proveedor(idProveedor)
        ON UPDATE CASCADE
)

Entonces respondiendo tu pregunta:

Si modifico el “IdProveedor” de la tabla “Proveedor” se mantendría la integridad y también se actualizaría en la tabla “Suministro” y viceversa. Es esto correcto o solo podría actualizarlo en la tabla suministro y no en proveedor?

Sí, si cambias el ID de la tabla padre, lo harán los de las tablas hijas. Lo segundo no lo podrías hacer, ya que si tratas de cambiar en la tabla suministro el campo IdProveedor a un ID que no existe en la tabla de proveedores, te va a arrojar un error.

Saludos!
 
Última edición:
Gracias v0rix por responder y la explicación me ha quedado mucho más claro.
No se trata de una base de datos real aun estoy aprendiendo la “teoría” y es un caso práctico.

Si no te sabe mal aprovecho para preguntar una duda más:
En caso de DELETE CASCADE si elimino de proveedor el S1 se elimina de suministro. Pero si de suministro intento eliminar el S1 me dejaría o saldría error porque es clave foránea?

Graicas de nuevo !!
Saludos!
 
Gracias v0rix por responder y la explicación me ha quedado mucho más claro.
No se trata de una base de datos real aun estoy aprendiendo la “teoría” y es un caso práctico.

Si no te sabe mal aprovecho para preguntar una duda más:
En caso de DELETE CASCADE si elimino de proveedor el S1 se elimina de suministro. Pero si de suministro intento eliminar el S1 me dejaría o saldría error porque es clave foránea?

Graicas de nuevo !!
Saludos!

Efectivamente, con ON DELETE si eliminas el proveedor, se van a eliminar los suministros que tengan de IdProveedor el que eliminas, pero en suministro podes borrar sin problemas una fila que contenga un IdProveedor sin afectar al proveedor en sí.
 
Atrás
Arriba