Está en la página 1de 3

28/6/22, 12:19 Error al crear Foreign Key en MySQL Workbench - Stack Overflow en español

Results from the 2022 Developer Survey are now available

Error al crear Foreign Key en MySQL Workbench


Formulada
hace 5 años y 7 meses Modificada
hace 5 años y 7 meses Vista
22k veces

Tengo una tabla llamada "mantenimiento_eventos" y otra llamada


"mantenimiento_invitaciones". Ambas tablas tienen una columna llamada "fecha" de tipo
0 "DATE" y NN.

Al crear el Foreign Key entre estas columnas recibo el siguiente error:

tabla "mantenimiento_invitaciones":

tabla "mantenimiento_eventos":

No me deja seleccionar ninguna columna de referencia y si lo hago me da error:

Tu privacidad
Presionando "Aceptar todas las cookies", aceptas que Stack Exchange puede guardar cookies en tu dispositivo
y mostrar información de acuerdo a nuestra política de cookies.

Aceptar todas las cookies Personalizar las configuraciones


¿Cuál podría ser el error, cómo puedo arreglar esto?.

https://es.stackoverflow.com/questions/36519/error-al-crear-foreign-key-en-mysql-workbench 1/3
28/6/22, 12:19 Error al crear Foreign Key en MySQL Workbench - Stack Overflow en español

mysql

Compartir Mejora esta pregunta editada el 28 nov. 2016 a las 20:41 formulada el 28 nov. 2016 a las
20:37
Seguir Shaz
28.8k 18 37 61 RRGT19
1,961 9 30 58

Poniendo el error de lado, ¿estás seguro de que tiene sentido crear la clave foránea for la columna
fecha? Eso es muy inusual.
– sstan
el 28 nov. 2016 a las 20:45

pues, la idea era, al crear una invitacion, esta debe tener un nombre, el evento (nombre de un evento
creado), y por ultimo la fecha del evento (la fecha del evento creado). Tengo otra clave foránea para los
invitados (nombre del invitado de mi tabla invitados) La idea es que estos datos me los hale
automáticamente. Creo una invitacion nueva, eligo usuarios, selecciono el evento, y la fecha se copie
automatico. no es buena idea?. por qué quería seleccionar una fecha distinta a la fecha del evento?.
–  RRGT19
el 28 nov. 2016 a las 20:51

La respuesta de Luiggi cubre muy bien el punto que quería comunicar.


– sstan
el 28 nov. 2016 a las
21:08

Si estás aprendiendo, te recomiendo evitar usar las herramientas que generan el código por ti. Lo mejor
es ensuciarte las manos y aprender de verdad.
– user227
el 28 nov. 2016 a las 21:10

@LuiggiMendoza estoy aprendiendo todavía y no uso ninguna herramienta para generar código. Trato
de hacer todo yo mismo, pidiendo consejos y preguntando. Lo único que me ha dado mas trabajo es el
diseño de la base de datos, es mi primera vez y el tema de claves foráneas, uno a muchos, uno a uno,
etc.. es algo confuso para mí en estos momentos. La idea era que al crear una invitación, se seleccione
uno de los eventos ya creados, y la fecha de la invitación la hale automático, ya que no tiene sentido
invitar a una persona a un evento con una fecha errónea.
–  RRGT19
el 28 nov. 2016 a las 21:20

Ordenado por:
1 respuesta
Mayor puntuación (por defecto)

En MySQL las llaves foráneas solo se pueden aplicar haciendo referencia a una columna que
tenga un índice asociado, tal como se explica en la documentación oficial.
2
Por ejemplo, revisemos este script:

-- Creamos una tabla T1 (padre)


CREATE TABLE t1(
campo1 VARCHAR(10) NOT NULL,
fecha DATE NOT NULL);

-- Creamos una tabla T2 (hija)


CREATE TABLE t2(
campo2 VARCHAR(10) NOT NULL,
Tu privacidad
fecha DATE NOT NULL,
fechaT1 DATE NOT NULL -- intentaremos referenciar la fecha de T1
Presionando "Aceptar todas las cookies", aceptas que Stack Exchange puede guardar cookies en tu dispositivo
);
y mostrar información de acuerdo a nuestra política de cookies.
-- Intentamos crear una llave foránea en t2
-- sobre la columna fechaT1
Aceptar todas las cookies Personalizar las configuraciones
-- que se asocie a la columna FECHA de la tabla T1.
-- Esto va a fallar.
ALTER TABLE t2
https://es.stackoverflow.com/questions/36519/error-al-crear-foreign-key-en-mysql-workbench 2/3
28/6/22, 12:19 Error al crear Foreign Key en MySQL Workbench - Stack Overflow en español
ADD FOREIGN KEY (fechaT1) REFERENCES t1(fecha);

-- Alteramos la tabla T1
-- para crear un índice sobre la columna FECHA
ALTER TABLE t1
ADD INDEX (fecha);

-- Ahora que existe un índice sobre T1.FECHA


-- intentaremos recrear la llave foránea en T2.
-- Esto va a funcionar
ALTER TABLE t2
ADD FOREIGN KEY (fechaT1) REFERENCES t1(fecha);

Entonces, la solución parece ser que solo deberías crear un índice sobre el campo que
requieres.

OJO. La solución real NO ES la que indico arriba. Técnicamente, resolverá el problema, pero es
un mal diseño de base de datos. Lo que deberías hacer es crear verdaderas llaves primarias
para ambas tablas basadas en un ID numérico y asociar las tablas por sus llaves primarias. En
script, esto sería:

-- el prefijo mantenimiento_ no aplica en aplicaciones del mundo real

CREATE TABLE evento (


id INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(45) NOT NULL,
fecha DATE NOT NULL,
ubicacion VARCHAR(150) NOT NULL,
tipo VARCHAR(20) NOT NULL
);

-- La columna "nombre" no tiene mucho sentido porque lo que necesitas


-- es el nombre del invitado.
-- "fecha" tampoco tiene sentido porque la fecha de la invitación
-- es en realidad la fecha del evento
-- a menos que tu intención sea indicar la fecha de entrega
-- de la invitación
-- de ser así, sería mejor colocar un nombre más apropiado
-- para esa columna
CREATE TABLE invitacion (
id INT PRIMARY KEY AUTO_INCREMENT,
invitado VARCHAR(45) NOT NULL,
-- El id del evento como columna que nos permitirá
-- crear la referencia mediante una llave foránea
id_evento INT NOT NULL,
-- La llave foránea que define la relación entre las tablas
-- evento (padre) e invitacion (hija)
FOREIGN KEY (id_evento) REFERENCES evento(id)
);

Compartir Mejora esta respuesta Seguir respondida el 28 nov. 2016 a las


Tu privacidad 21:05
user227en tu dispositivo
Presionando "Aceptar todas las cookies", aceptas que Stack Exchange puede guardar cookies
y mostrar información de acuerdo a nuestra política de cookies.

Aceptar todas las cookies Personalizar las configuraciones

https://es.stackoverflow.com/questions/36519/error-al-crear-foreign-key-en-mysql-workbench 3/3

También podría gustarte