Dúvidas sobre atualização em cascata em banco de dados

  • Autor Autor emaasteer
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
E

emaasteer

Beta
Usuário com poucas negociações! Use sempre o saldo do 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:
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
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:

Inserir CODE, HTML ou 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 edição:
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í.
 
Voltar
Topo