es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Errores en la tabla de claves foráneas completas o competir.

Sigo obteniendo un error en mi clave externa en la tabla ‘compete’. He estado intentando buscar qué está mal, pero ninguno de los ejemplos parece ser mi problema. ¿Alguien puede ayudarme? Este es el error que sigo obteniendo:

ERROR 1005 (HY000): No se puede crear la tabla base_de_datos.compete (errno: 150 “La restricción de clave externa está formada incorrectamente”)

Aquí está mi código.

CREAR TABLA atleta (
athlete_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
country TINYTEXT NOT NULL,
name TINYTEXT NOT NULL,
birthdate DATE NOT NULL,
age INT UNSIGNED NOT NULL,
height_inch INT UNSIGNED,
weight_lbs INT UNSIGNED,
PRIMARY KEY (athlete_id)
);

CREAR TABLA deporte (
    sport_id INT UNSIGNED NOT NULL,
    sport TINYTEXT NOT NULL,
    PRIMARY KEY (sport_id)
);

CREAR TABLA olimpiadas (
    olympics_id INT UNSIGNED NOT NULL,
    season TINYTEXT NOT NULL,
    year YEAR NOT NULL,
    city TINYTEXT NOT NULL,
    PRIMARY KEY (olympics_id)
);  

CREAR TABLA eventos_deportivos (
    sport_id INT UNSIGNED NOT NULL,
    event_id INT UNSIGNED NOT NULL,
    event TINYTEXT NOT NULL,
    PRIMARY KEY (sport_id, event_id),
    FOREIGN KEY (sport_id) REFERENCES deporte (sport_id)
);

CREAR TABLA atleta_deporte (
    athlete_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    sport_id INT UNSIGNED NOT NULL,
    PRIMARY KEY (athlete_id),
    FOREIGN KEY (athlete_id) REFERENCES atleta (athlete_id),
    FOREIGN KEY (sport_id) REFERENCES deporte (sport_id)
);

CREAR TABLA competir (
    athlete_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    olympics_id INT UNSIGNED NOT NULL,
    event_id INT UNSIGNED NOT NULL,
    medal TINYTEXT,
    PRIMARY KEY (athlete_id),
    FOREIGN KEY (athlete_id) REFERENCES atleta (athlete_id),
    FOREIGN KEY (olympics_id) REFERENCES olimpiadas (olympics_id),
    FOREIGN KEY (event_id) REFERENCES eventos_deportivos (event_id)   
);
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que la restricción de clave externa para event_id en la tabla compete referencia la tabla incorrecta. Debería estar haciendo referencia a la tabla sport_events, no solo a la columna event_id.

    Para solucionar el error, modifique la última línea de código en la creación de la tabla compete de la siguiente manera:

    FOREIGN KEY (event_id) REFERENCES sport_events (event_id)
    

    Esto debería hacer referencia correctamente a la tabla sport_events y resolver el error de restricción de clave externa.

Comments are closed.