Cita:
alguien puede ayudarme a solucionar esto???? 1452 - Cannot add or update a child row: a foreing key constrain fail .......
| |||
Crear llave foránea bueno tengo una tabla que contiene el nombre de los pacientes de un Hospital. En otra tabla (cambios_MP) almaceno el ID_paciente además de contener un campo ID qeu se autoincrementa. Cunado intento crear una llave foranea en la tabla cambios_mp me da un error 1452 que dice Cita: alguien puede ayudarme a solucionar esto???? 1452 - Cannot add or update a child row: a foreing key constrain fail ....... |
| ||||
Respuesta: Crear llave foránea Es un problema muy común: Al menos uno de los valores que existe en un registro de la tabla cambios_MP, donde el valor que existe en el campo ID_paciente, no existe en la tabla referida. Esto es muy habitual cuando estás agregando FKs en tablas que ya contienen datos, y que no han sido correcamente verificadas. Postea la estructura de la tabla Pacientes, la de cambios_MP y la sentencia que estás usando para intentar crear la FK.
Código SQL:
Ver original
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| |||
Respuesta: Crear llave foránea esta es la tabla paciente
Código MySQL:
Ver original y esta es la tabla de cambios
Código MySQL:
Ver original AHHHH la llave foránea la estoy creando desde navicat Última edición por reyvi; 20/03/2014 a las 15:54 |
| ||||
Respuesta: Crear llave foránea Cita: Bueno, eso implica que tienes datos sucios, es decir, en la tabla "cambios", hay registros que no están relacionados con la tabla "pacientes", o al menos los valores que existen no se corresponden a Ids de los mismos.la llave foránea la estoy creando desde navicat Para verificar qué casos no cumplen la restricción, ejecuta esto:
Código SQL:
Ver original Además de esto, estoy viendo que estás usando VARCHAR para almacenar fechas y eso está muy, pero muy mal. Ese es el tipo de metidas de pata que no debes cometer. Los datos de tipo fecha deben ser DATE o DATETIME, pero jamás se deben usar VARCHAR. NUNCA.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| |||
Respuesta: Crear llave foránea BUno, ya realicé la consulta que me dijsite que ejecutara y me sale vacía, sin ningún dato, en cuanto a lo demás (el campo fecha) eso es algo que ya voy a solucionar, que me recomiendas que siga haciendo a ver si logro hace la FK??? |
| ||||
Respuesta: Crear llave foránea Uhhh! Ya vi donde está el error... Tienes una de esas metidas de pata mayúsculas. ¿Me puedes decir por qué creas una PK compuesta para la tabla pacientes?
Código MySQL:
Eso no tiene ningún sentido desde el momento en que el primer campo es AUTO_INCREMENT. Ver original Allí está el problema. Se me pasó porque al ver el AI no tenía por qué ponerme a mirar la definición de la PK. Solemos asumir que ese campo AI será la PK también. Recordemos: Una FK es un campo o conjunto de campos que referencia a la PK de otra tabla. Y cuando la PK de referencia es compuesta, la FK debe tener la misma cantidad de campos, del mismo tipo y en el mismo orden, cosa que no se cumple en tu caso. En otras palabras, ya la tabla "Pacientes" está mal definida.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Crear llave foránea Es exactamente eso que estás haciendo: Declarando una PK que se compone de más de un campo de la tabla:
Código MySQL:
Ver original Una pregunta: ¿Tienes claro lo que es una PK, para qué existe, y cómo impacta en el modelo de datos? ¿Y para qué es una FK? Sin ofender, son temas críticos. Por cierto, no veo de dónde sale ese campo "`Numero_HC`" de tu tabla, por lo que deduzco que no estás posteando la estructura completa. ¿Me equivoco?
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| |||
Respuesta: Crear llave foránea BUeno mira las PK siempre he tenido clro que son muy importantes a la hora de relacionar tablas, esto de las FK, es algo en lo que me estooy iniciando pues te explico bien como es el caso de todo esto. La tabla paciente es la tabla principal pero esta tiene una relación de uno a varios en otras tablas, en la cuales cada una de ella posee el campo Id_pacienbte, tales como cambios, factores_riesgo, etc. LA duda que tienes sobre el campo Numero_HC eso es un valor que se inserta y no es más que el número de historia clínica que tiene un paciente. La relación de todas estas tablas las manejo desde PHP, pero quisiera realizar una relación mediante una FK para actualiza o eliminar en cascada, ya que si elimino un paciente el mismo sql mediante la FK va a hacer lo demás sino tendría que generar varias consultas para limpiar los datos del paciente que se eliminó. Me hago entender, gracias por tu tiempo, y tranquilo que no me ofendes en lo apsoluto, estoy aprendiendo y es necesario todo lo que me dices y las dudas que te surgen. Gracias por todo... aquí seguimos Última edición por gnzsoloyo; 21/03/2014 a las 12:46 Razón: Texto ilegible. |
| |||
Respuesta: Crear llave foránea Tienes muchísima razón en todo lo que expones me puse a revisar todo devidamente y he tenido que hacer varios cambios. Gracias por tu ayuda. AHHHH ya logré hacer la FK, resulta ser que habían datos en las tablas hice una copia sin ellos y pude hacerlo todo perfectamente bien |
Etiquetas: |