Pregunta:
Fecha: 28-06-2017 04:52:21
(En Español)
Me ha surgido una duda, es posible hacer una foreign key sin una tabla pivote o intermedia?.
Estoy intentando hacer una y no me deja, me da el error 1452 - Cannot add or update a child row: a foreign key constraint fails.
Tengo varias tablas, por ejemplo Proveedores y Provincias y la tabla proveedores_provincias es la pivote, ahí realizo las foreign key perfectamente y si borro un proveedor se borra su provincia
Pero ahora tengo una tabla de imágenes de proveedor y quiero que si borro un proveedor se borre su registro de imagenes pero me da este fallo y claro en este caso intento hacer la foreign key desde la tabla de proveedores porque no tengo tabla pivote para esta relación... esto es posible hacerlo?, o lo estoy haciendo mal? Votos: 0 - Respuestas: 6 - Vistas: 10 Compartir en: Google Facebook Twitter LinkedIn Link
¿Es posible hacer una foreign key sin tener una tabla pivote?[Resuelta]
Hola compañer@s,Me ha surgido una duda, es posible hacer una foreign key sin una tabla pivote o intermedia?.
Estoy intentando hacer una y no me deja, me da el error 1452 - Cannot add or update a child row: a foreign key constraint fails.
Tengo varias tablas, por ejemplo Proveedores y Provincias y la tabla proveedores_provincias es la pivote, ahí realizo las foreign key perfectamente y si borro un proveedor se borra su provincia
Pero ahora tengo una tabla de imágenes de proveedor y quiero que si borro un proveedor se borre su registro de imagenes pero me da este fallo y claro en este caso intento hacer la foreign key desde la tabla de proveedores porque no tengo tabla pivote para esta relación... esto es posible hacerlo?, o lo estoy haciendo mal? Votos: 0 - Respuestas: 6 - Vistas: 10 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 28-06-2017 18:28:25 Cuando creaste la llave foránea estableciste algo como:
ON DELETE CASCADE???? Votos: 2 - Link respuesta -
Fecha: 29-06-2017 04:11:36 Si por supuesto pero me da el error que te comento, yo siempre he creado las claves foráneas en tablas pivote, pero en este caso lo he querido hacer como te digo y me da el error.
Leyendo por internet vi que a algunas personas si la tabla tiene datos no le deja, entonces los borré pero tampoco me ha dejado.... :( Votos: 0 - Link respuesta -
Fecha: 29-06-2017 05:27:14 Hola Fran, la clave foránea básicamente identifica una columna o grupo de columnas en una tabla (tabla hija) que se refiere a una columna o grupo de columnas en otra tabla (tabla maestra o referenciada), donde dicha clave foránea es primaria.
En MySQL, como en muchos DBMS, al crear una relación de clave foránea se crea una restricción referencial (la famosa "constraint") para garantizar la integridad referencial (garantizar la no existencia de registros huérfanos en la tabla hijo), esta es quien no te permite borrar un registro de la tabla maestra sin antes borrar el/los registros referenciados de la tabla hijo, y para automatizar esta tarea (es considerada mala práctica su uso) existen estos "ON DELETE CASCADE" y "ON UPDATE CASCADE" que deben estar declarados en todas las relaciones intervinientes (y aquí es donde puede que te este faltando en alguna, y por eso tu error), y muy importante también es considerar que como en MySQL se permiten implementar distintos motores para tablas (los famosos "Storage Engines") estos deben dar soporte a este tipo de acciones, por ejemplo el motor MyISAM no soporta "constraint" (no garantiza la integridad referencial) y por ende no aplica el ON XXXXX CASCADE (ojo con esto), típicamente tus tablas deberán estar implementadas con InnoDB.
En resumen:
* todas las tablas intervinientes deben implementar el motor InnoDB (u otro motor con soporte para esta acción).
* todas las relaciones entre dichas tablas deben implementar el ON DELETE CASCADE.
Espero que mi respuesta te sea de ayuda.
Saludos y buen código! Votos: 3 - Link respuesta -
Fecha: 30-06-2017 01:05:41 Hola Fernando,
Muchas grcias por esta explicación!. Voy a revisar a ver que está pasando porque son innoDB y tienen el ON DELETE cascade, por lo tanto no se que puede estar pasando, por eso preguntaba si es obligatorio hacer una tabla pivote para esto!
Voy a seguir investigando a ver Votos: 0 - Link respuesta -
Fecha: 02-07-2017 04:23:37 Sino compartinos la estructura para ver los campos y los atributos que le pusiste. a mi me paso una vez ese código de error porque me había olvidado ponerle el atributo `UNSIGNED`
osea deben tener las mismas características las columnas a vincular. Votos: 1 - Link respuesta -
Fecha: 21-08-2017 21:32:39 Revisando mis preguntas he visto que esta no la cerré. Al final era exactamente lo que decíais, que no eran exactamente del mismo tipo.
Gracias a todos y marco como resuelta. Votos: 0 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
