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

[SOLUCIONADO] Llave foranea multiple error 1215 al crearla

Estas en el tema de Llave foranea multiple error 1215 al crearla en el foro de Mysql en Foros del Web. Reciban un cordial saludo Espero me pueda explicar y hacerme entender : Tengo dos tablas, tabla miembros y tabla asignar_líder, necesito hacer dos relaciones de ...
  #1 (permalink)  
Antiguo 11/05/2019, 21:43
Avatar de laureano59  
Fecha de Ingreso: febrero-2005
Mensajes: 395
Antigüedad: 19 años, 10 meses
Puntos: 1
Pregunta Llave foranea multiple error 1215 al crearla

Reciban un cordial saludo

Espero me pueda explicar y hacerme entender :
Tengo dos tablas, tabla miembros y tabla asignar_líder, necesito hacer dos relaciones de la tabla miembro hacia la tabla asignar_lider, una relación es de uno a uno y la otra de uno a n, las dos FK de asignar_lider refieren de la PK de la tabla miembro.

El problema es que me sale Error Code: 1215. Cannot add foreign key constraint y no puedo crear las relaciones, aquí pongo la tabla asignar_lider:

los campos de la FK son del mismo tipo de la PK de miembros por si tienen duda.

Código MySQL:
Ver original
  1. CREATE  TABLE IF NOT EXISTS `asistencia_avivamiento_bd`.`ASIGNAR_LIDER` (
  2.   `id_asignar_lid` INT NOT NULL ,
  3.   `lider_identificacion_mie` VARCHAR(30) NOT NULL ,
  4.   `identificacion_mie` VARCHAR(30) NOT NULL ,
  5.   PRIMARY KEY (`id_asignar_lid`, `lider_identificacion_mie`, `identificacion_mie`) ,
  6.   INDEX `fk_ASIGNAR_LIDER_MIEMBROS2_idx` (`lider_identificacion_mie` ASC) ,
  7.   INDEX `fk_ASIGNAR_LIDER_MIEMBROS1_idx` (`identificacion_mie` ASC) ,
  8.   UNIQUE INDEX `identificacion_mie_UNIQUE` (`identificacion_mie` ASC) ,
  9.   CONSTRAINT `fk_ASIGNAR_LIDER_MIEMBROS2`
  10.     FOREIGN KEY (`lider_identificacion_mie` )
  11.     REFERENCES `asistencia_avivamiento_bd`.`MIEMBROS` (`identificacion_mie` )
  12.   CONSTRAINT `fk_ASIGNAR_LIDER_MIEMBROS1`
  13.     FOREIGN KEY (`identificacion_mie` )
  14.     REFERENCES `asistencia_avivamiento_bd`.`MIEMBROS` (`identificacion_mie` )

muchas gracias por su ayuda.
__________________
http://www.weblaum.com
Laureano Melo Medina
:arriba:
  #2 (permalink)  
Antiguo 13/05/2019, 07:45
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Llave foranea multiple error 1215 al crearla

En la reference deberia de ir el nombre de la tabla a la cual va a hacer la referencia no el nombre de la tabla "origen"

Código MySQL:
Ver original
  1. REFERENCES `asignar_lider`.`MIEMBROS` (`identificacion_mie` )

Ahora porque 2 FK con la misma columna?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 13/05/2019, 09:17
Avatar de laureano59  
Fecha de Ingreso: febrero-2005
Mensajes: 395
Antigüedad: 19 años, 10 meses
Puntos: 1
Respuesta: Llave foranea multiple error 1215 al crearla

1. Las referencias están bien adjunto una imagne para aclarar confuciones


2. Cada miembro de la tabla miembros tiene un líder o un capitán, dentro de los mismos miembros, entonces para eso creo la tabla ASIGNAR_LIDER
Donde la relación uno a uno es cada miembro que viene de la tabla miembros y es una llave única (1ra. FK) y la relación uno a muchos (2da. FK) es el miembro que se asigna como líder o capitán a cada miembro, entonces supongamos que 500 miembros tienen un mismo líder ahí el porqué de uno a muchos.

Adjunto una imagen de la relación en las tablas para evitar confusión

__________________
http://www.weblaum.com
Laureano Melo Medina
:arriba:
  #4 (permalink)  
Antiguo 13/05/2019, 12:08
Avatar de 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: Llave foranea multiple error 1215 al crearla

Cita:
Cada miembro de la tabla miembros tiene un líder o un capitán, dentro de los mismos miembros, entonces para eso creo la tabla ASIGNAR_LIDER
Es una tabla absolutamente innecesaria...
Para crear una relación jerárquica de ese tipo simplemente creas una FK en la propia tabla MIEMBROS que apunte a sí misma, y que sea NULABLE.
De ese modo lo que haces es poner en ese campo, por ejemplo llamado "ID_LIDER" la clave del líder, y lo dejas en NULL cuando no hay nada sobre ése miembro.
Por su lado, si se requieren más capas de jerarquías sería recomendable una columna indicando el "cargo", pero la relación creada con esa FK permite N jerarquías diferentes.

Esa es la solución estándar universal. La encontrarás como ejercicio en todos los manuales de todos los DBMS que existen.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 13/05/2019, 13:09
Avatar de laureano59  
Fecha de Ingreso: febrero-2005
Mensajes: 395
Antigüedad: 19 años, 10 meses
Puntos: 1
Respuesta: Llave foranea multiple error 1215 al crearla

En realidad así la tengo hecha, pero creí conveniente crear la recursividad en una tabla independiente.

De todas maneras me queda la iquitud porque en MYSQL me sale ese error al crear dos relaciones apuntando a la misma llave primaria... ?
__________________
http://www.weblaum.com
Laureano Melo Medina
:arriba:
  #6 (permalink)  
Antiguo 13/05/2019, 17:49
Avatar de 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: Llave foranea multiple error 1215 al crearla

Cita:
Iniciado por laureano59 Ver Mensaje
En realidad así la tengo hecha, pero creí conveniente crear la recursividad en una tabla independiente.

De todas maneras me queda la iquitud porque en MYSQL me sale ese error al crear dos relaciones apuntando a la misma llave primaria... ?
Usualmente es una inconsistencia de datos o tipos muy fina. Por lo general suele suceder cuando hay datos en la tabla origen que no cumplen la restricción, por ejemplo. Pero es un caso que no debería suceder cuando se crea una tabla vacía como esta.
Un posibilidad en cuanto a tipos de dato, es que haya discrepancia entre los charset de los campos lider_identificacion_mie y identificacion_mie de esta tabla, respecto a la PK de la tabla "MIEMBRO. Si en uno es Latin1 y en el otro UTF-8, simplemente no machean. No pertenecen al mismo dominio y no pueden usarse como FK (el matching es a nivel binario).

Mi sugerencia sería que crees primero la tabla sin las FK y luego se las agregues de a una. Eso te permitirá al menos descubrir cuál es la relación que falla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 16/05/2019, 08:45
Avatar de laureano59  
Fecha de Ingreso: febrero-2005
Mensajes: 395
Antigüedad: 19 años, 10 meses
Puntos: 1
Respuesta: Llave foranea multiple error 1215 al crearla

Muchas gracias gnzsoloyo.
Creo que se puede dar por cerrado este post
__________________
http://www.weblaum.com
Laureano Melo Medina
:arriba:

Etiquetas: llave, tabla
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 10:56.