Ver Mensaje Individual
  #10 (permalink)  
Antiguo 17/12/2013, 11:10
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: 16 años, 4 meses
Puntos: 2658
Respuesta: CakePHP - Cannot add or update a child row: a foreign key constraint fails

Cita:
Iniciado por reborn Ver Mensaje
Ademas dice:


Yo relaciono perfil con usuario. Es logico q tiene q existir un usuario antes de asignarle un perfil... por lo q perfil tiene q relacionarse con el id del usuario, de lo contrario, no existiria...

Y volviendo al tema principal, el del error, era eso lo q me pasaba. La FK no tenia un valor y no podia ser relacionada

Aquí es donde se produce la confusión.
Cuando dices "asignarle un perfil", estás hablando de asignar permisos, no de publicar un cuadro de datos compartibles.
En este caso, por tu descripción, es una red social, y el perfil lo crea el usuario para si mismo. Por ende, como usuario debe existir, y en ese caso el perfil está relacionado con el usuario en una relación 1:1.
Ahora bien, el caso de las cardinalidades 1:1 es un caso que se debe manejar con cuidado, porque puede generar ese tipo de errores de relaciones circulares.
Nunca se debe establecer una relación de FK circular. Eso por lo pronto. Pero en el caso de las 1:1, lo que se debe analizar es cual es la entidad de mayor jerarquía conceptual, y esa será la entidad "padre", por así decirlo.
Básicamente, en una red social, donde el usuario es la entidad fuerte, el perfil es una entidad débil y por tanto carece de PK propia, por lo que hereda la de la entidad fuerte de la que depende.
Para que lo visualices: Un usuario puede existir sin definir el perfil, pero un perfil no puede existir sin pertenecer a un usuario. Por consecuencia, "perfil" es una entidad débil dependiente de "user", y según el modelo relacional, no debe tener PK propia sino que hereda la del usuario.
En ese caso, la única de las dos tablas que posee FK es "perfil", y esta FK apunta ala PK de user.

¿Se entiende?


Detalle importante: Si el perfil es OPCIONAL, entonces no debe ser declarado como NOT NULL en el campo usado como FK de la tabla Perfil.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)