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

Error relacion

Estas en el tema de Error relacion en el foro de Mysql en Foros del Web. HOLA BUENOS DIAS TENGO LA SIGUIENTE ESTRUCTURA DE TABLAS, A LAS CUALES QUISIERA INGRESAR UNA RELACIÓN ENTRE AMBAS, PERO AL HACERLO ME DA ERROR "Cannot ...
  #1 (permalink)  
Antiguo 05/03/2010, 10:54
 
Fecha de Ingreso: febrero-2008
Mensajes: 133
Antigüedad: 16 años, 2 meses
Puntos: 0
Exclamación Error relacion

HOLA BUENOS DIAS TENGO LA SIGUIENTE ESTRUCTURA DE TABLAS, A LAS CUALES QUISIERA INGRESAR UNA RELACIÓN ENTRE AMBAS, PERO AL HACERLO ME DA ERROR "Cannot add or update a child row" EL SCRIPT UTILIZADO PARA AGREGAR LA RELACIÓN ES EL SIGUIENTE:

ALTER TABLE `customers`
ADD CONSTRAINT `FK_Zon_Cust` FOREIGN KEY (`CustomerZone`) REFERENCES `zone` (`zone`);

Y LAS ESTRUCTURAS DE LAS TABLAS:

--
-- Estructura de tabla para la tabla `customers`
--

CREATE TABLE `customers` (
`CustomerId` int(11) NOT NULL,
`CustomerName` varchar(100) NOT NULL,
`CustomerZone` int(11) default NULL,
`Mon` tinyint(1) NOT NULL,
`Tue` tinyint(1) NOT NULL,
`Wed` tinyint(1) NOT NULL,
`Thu` tinyint(1) NOT NULL,
`Fri` tinyint(1) NOT NULL,
`Sat` tinyint(1) NOT NULL,
PRIMARY KEY (`CustomerId`),
KEY `CustomerZone` (`CustomerZone`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;



--
-- Estructura de tabla para la tabla `zone`
--

CREATE TABLE `zone` (
`zone` int(11) NOT NULL,
`MerchandizerId` int(11) ,
PRIMARY KEY (`zone`),
KEY `MerchandizerId` (`MerchandizerId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


AGRADECIDO DE ANTEMANO
  #2 (permalink)  
Antiguo 05/03/2010, 11:21
 
Fecha de Ingreso: enero-2010
Ubicación: Sevilla
Mensajes: 202
Antigüedad: 14 años, 3 meses
Puntos: 5
Respuesta: Error relacion

El problema es que para establecer la relación, la clave principal de la tabla "zone" debe ser el campo zone, que es por el que quieres establecer la relación.
__________________
Mi blog de temas más o menos técnicos

Y aquí el Jamón jamon de Jabugo
  #3 (permalink)  
Antiguo 05/03/2010, 11:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error relacion

Puede ser una cuestión de orden, porque en esta secuencia no hay problemas:

Primero:

Código MySQL:
Ver original
  1. CREATE TABLE `zone` (
  2. `zone` int(11) NOT NULL,
  3. `MerchandizerId` int(11) ,
  4. PRIMARY KEY (`zone`),
  5. KEY `MerchandizerId` (`MerchandizerId`)

Luego:

Código MySQL:
Ver original
  1. CREATE TABLE `customers` (
  2. `CustomerId` int(11) NOT NULL,
  3. `CustomerName` varchar(100) NOT NULL,
  4. `CustomerZone` int(11) default NULL,
  5. `Mon` tinyint(1) NOT NULL,
  6. `Tue` tinyint(1) NOT NULL,
  7. `Wed` tinyint(1) NOT NULL,
  8. `Thu` tinyint(1) NOT NULL,
  9. `Fri` tinyint(1) NOT NULL,
  10. `Sat` tinyint(1) NOT NULL,
  11. PRIMARY KEY (`CustomerId`),
  12. KEY `CustomerZone` (`CustomerZone`)

Y después:

Código MySQL:
Ver original
  1. ALTER TABLE `customers`
  2. ADD CONSTRAINT `FK_Zon_Cust` FOREIGN KEY (`CustomerZone`) REFERENCES `zone` (`zone`);
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 05/03/2010, 11:49
 
Fecha de Ingreso: enero-2010
Ubicación: Sevilla
Mensajes: 202
Antigüedad: 14 años, 3 meses
Puntos: 5
Respuesta: Error relacion

Pero creo que si estableces la relación por un campo que no es PK, como el campo 'zone' las búsquedas pierden eficiencia.
__________________
Mi blog de temas más o menos técnicos

Y aquí el Jamón jamon de Jabugo
  #5 (permalink)  
Antiguo 05/03/2010, 12:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error relacion

No puedes establecer una FK sobre un campo no clave.
MySQL Requiere que sea entre un campo y la PK de otra tabla, o si no la hay, con un campo UNIQUE.

El error se da en ese script si y sólo si se altera el orden de creación, porque la tabla referida debe existir antes de crear la FK...

Por eso dije que era una cuestión de orden de creación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 05/03/2010, 13:03
 
Fecha de Ingreso: enero-2010
Ubicación: Sevilla
Mensajes: 202
Antigüedad: 14 años, 3 meses
Puntos: 5
Respuesta: Error relacion

Mi problema, según he visto, es que no me había dado cuenta que el campo 'zone' SI era la clave primaria de la tabla.
Saludos
__________________
Mi blog de temas más o menos técnicos

Y aquí el Jamón jamon de Jabugo
  #7 (permalink)  
Antiguo 05/03/2010, 13:06
 
Fecha de Ingreso: febrero-2008
Mensajes: 133
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Error relacion

Si fue definida como PK miren la linea 4 en la estructura de la tabla 'zone' y en cuanto a lo que sugiere gnzsoloyo respecto al orden esta exactamente en ese con algunas tablas de por medio pero ese es el orden, y bueno eso funcionó a la perfección en algún momento y no entiendo porque de repente dejó de funcionar, de un día para otro
  #8 (permalink)  
Antiguo 05/03/2010, 13:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error relacion

¿Se hizo alguna tarea en la base que desactivase el check de FK (SET FOREIGN_KEY_CHECKS=0;)?
Una de las posibilidades de error es la existencia de valores en la tabla secundaria que no sean válidos en la tabla referida (ZONAS). En ese caso es imposible crear la relación.
Si había datos en las tablas antes de usar el ALTER TYABLE puede ser esa la razón.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 05/03/2010, 13:43
 
Fecha de Ingreso: febrero-2008
Mensajes: 133
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Error relacion

GNZSOLOYO, las opciones que me das las evalué y no creo sean posibles

1. la BD la estoy creando nueva porque se trata de data maestra que se esta generando en una aplicación movil (dispositivo movil) con emulador de plataforma Cliente-Servidor llamado MoWes
2. Evalue la sentencia:

Cita:
SELECT *
FROM customers
WHERE customerzone NOT
IN (

SELECT zone
FROM zone
)
y no me arrojó ningún resultado por lo que estoy seguro de que no hay datos en la tabla hija que no estén la tabla padre de hecho todos los datos aqui descargados vienen de una BD centralizada basada en SQL Server con la misma estructura aqui mostrada,

Agradecido

Etiquetas: relacion
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 17:38.