Ver Mensaje Individual
  #4 (permalink)  
Antiguo 17/12/2013, 09:44
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: CakePHP - Cannot add or update a child row: a foreign key constraint fails

Cita:
Bien decis al final, el usuario tiene q tener la FK y no el perfil... Ahi es cuando me trabo, cuando la relacion es uno a uno no se cual toma como FK, si el campo de uno o el campo del otro.
Por eso te digo que tu problema no es con CakePHP, es con Bases de Datos.
Saber programar no significa que sepas diseñar bases de datos. Son sistemas de razonamiento y lógica totalmente diferentes (eso decían mis profesores, y mi experiencia les ha dado la razón).

Es difícil de entender cuando te inicias, pero mirar las cosas como diseñador de DATOS no es lo mismo que mirarlo como PROGRAMADOR. No se ven las cosas de la misma forma.

Sería mejor que te concentraras en la aplicación en CakePHP, pero preguntes los temas más profundos de BBDD en el foro de BBDD. Así no confundimos ni mezclamos las cosas.

PD: "Integridad referencial" es una propiedad esperable del modelo relacional. Pero no ES el modelo relacional. El problema que tienes no es exactamente de integridad sino de dependencia funcional, que es otra parte del modelo.
El inconveniente se suscita porque una FK es una restricción puesta en la base, tal que no puede insertarse un valor en un campo X de una tabla A, si no existe previamente como PK de la tabla B, a la que hace referencia.
En tu caso, si creas una relación circular (A depende de B y B depende de A), nunca podrás meter los registros porque no se meten al mismo tiempo en ambas tablas, ni siquiera en el más poderoso servidor de BBDD. Siempre entran en forma secuencial, y por ende si metes en A, no existe aun eb B y falla. Pero si lo metes en B, como en A no existe, también falla.
¿Se entiende la idea?
Bueno, eso es lo que se denomina "dependencia circular" y es un fallo gravísimo en un modelo de bases de datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)