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

Pasar clave foranea dos veces

Estas en el tema de Pasar clave foranea dos veces en el foro de Mysql en Foros del Web. Buenas, estoy haciendo un proyecto en mysql con una tabla equipo y una tabla partido. El equipo tiene su clave primaria que pasaria como foranea ...
  #1 (permalink)  
Antiguo 21/02/2014, 09:53
Avatar de temerariomalaga  
Fecha de Ingreso: marzo-2013
Ubicación: Londres
Mensajes: 156
Antigüedad: 11 años, 1 mes
Puntos: 9
Pasar clave foranea dos veces

Buenas, estoy haciendo un proyecto en mysql con una tabla equipo y una tabla partido. El equipo tiene su clave primaria que pasaria como foranea a la tabla partido pero en un partido juegan dos equipos por lo que tengo que pasar la clave del equipo dos veces y al hacer esto da un error porque no se pueden llamar dos campos igual. ¿Cómo puedo hacer para resolver esta situacion?
__________________
Málaga Club de Fútbol: Memoria, Compromiso, Fe
  #2 (permalink)  
Antiguo 21/02/2014, 10:00
Avatar de 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: Pasar clave foranea dos veces

Cita:
porque no se pueden llamar dos campos igual.
Nada tiene que ver que se llamen igual, a que ambos apunten a la misma tabla como FK
Te estás ahogando en un dedal e agua.
Ponle a cada campo que es FK un nombre distinto, y en la declaración de FK lo especificas.

¿Se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/03/2014, 04:52
Avatar de temerariomalaga  
Fecha de Ingreso: marzo-2013
Ubicación: Londres
Mensajes: 156
Antigüedad: 11 años, 1 mes
Puntos: 9
Respuesta: Pasar clave foranea dos veces

Buenas he vuelto a retomar el tema del proyeto mysql y ya he salido del vaso de agua y ahora me ahogo en una bañera. Fuera bromas, dejo aquí el código de la creación de las tablas implicadas porque una vez que he hecho lo que me dijiste algo tiene que ir mal porque me sale el error 1215 Cannot add foreign key constraint. El problema de todo esto está en la tabla partidos que es la que hereda claves de un montón de tablas.
¿Alguna idea del por qué del error?
Código:
CREATE TABLE PABELLON(Codigo_pabellon INT NOT NULL, Nombre VARCHAR(30), Codigo_localidad INT(3), PRIMARY KEY (Codigo_pabellon));
CREATE TABLE JORNADA(Codigo_jornada INT NOT NULL AUTO_INCREMENT, Numero INT(2), Codigo_Competicion INT NOT NULL, PRIMARY KEY(Codigo_jornada));
CREATE TABLE EQUIPO(NIF VARCHAR(9) NOT NULL, Nombre VARCHAR(30), Direccion VARCHAR(20), Telefono VARCHAR(20), PRIMARY KEY (NIF));
CREATE TABLE EQUIPO_ARBITRAL(DNI VARCHAR(9), Licencia INT(3), Nombre VARCHAR(20), Apellidos VARCHAR(20), Email VARCHAR(20), Telefono INT(9), Cuenta INT(20), Cod_localidad INT(3), PRIMARY KEY (DNI));
CREATE TABLE PARTIDO(Codigo_Partido INT NOT NULL AUTO_INCREMENT PRIMARY KEY, EquipoA VARCHAR(9) NOT NULL, EquipoB VARCHAR(9) NOT NULL, Fecha DATE,
    Hora TIME, Codigo_pabellon INT NOT NULL, Codigo_jornada INT, ArbPrin VARCHAR(9),  ArbAux VARCHAR(9), Anotador VARCHAR(9), Crono VARCHAR(9), Op24 VARCHAR(9),
    INDEX (EquipoA, EquipoB), FOREIGN KEY (EquipoA, EquipoB) REFERENCES EQUIPO (NIF, NIF), INDEX (ArbPrin, ArbAux, Anotador, Crono, Op24), FOREIGN KEY (ArbPrin, ArbAux, Anotador, Crono, Op24) REFERENCES EQUIPO_ARBITRAL (DNI, DNI, DNI, DNI, DNI),
    INDEX (Codigo_pabellon), FOREIGN KEY (Codigo_pabellon) REFERENCES PABELLON (Codigo_pabellon), FOREIGN KEY (Codigo_jornada) REFERENCES JORNADA (Codigo_jornada));
__________________
Málaga Club de Fútbol: Memoria, Compromiso, Fe
  #4 (permalink)  
Antiguo 06/03/2014, 06:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Pasar clave foranea dos veces

Código MySQL:
Ver original
  1. CREATE TABLE PABELLON
  2.      (Codigo_pabellon INT NOT NULL,
  3.       Nombre VARCHAR(30),
  4.       Codigo_localidad INT(3),
  5.       PRIMARY KEY (Codigo_pabellon));
  6.  
  7. CREATE TABLE JORNADA
  8.       (Codigo_jornada INT NOT NULL AUTO_INCREMENT,
  9.       Numero INT(2),
  10.       Codigo_Competicion INT NOT NULL,
  11.       PRIMARY KEY(Codigo_jornada));
  12.      
  13. CREATE TABLE EQUIPO(
  14.       NIF VARCHAR(9) NOT NULL,
  15.       Nombre VARCHAR(30),
  16.       Direccion VARCHAR(20),
  17.       Telefono VARCHAR(20),
  18.       PRIMARY KEY (NIF));
  19.      
  20. CREATE TABLE EQUIPO_ARBITRAL(
  21.       DNI VARCHAR(9),
  22.       Licencia INT(3),
  23.       Nombre VARCHAR(20),
  24.       Apellidos VARCHAR(20),
  25.       Email VARCHAR(20),
  26.       Telefono INT(9),
  27.       Cuenta INT(20),
  28.       Cod_localidad INT(3),
  29.       PRIMARY KEY (DNI));
  30.  
  31. CREATE TABLE PARTIDO
  32.     (Codigo_Partido INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  33.     EquipoA VARCHAR(9) NOT NULL,
  34.     EquipoB VARCHAR(9) NOT NULL,
  35.     Fecha DATE,
  36.     Hora TIME,
  37.     Codigo_pabellon INT NOT NULL,
  38.     Codigo_jornada INT,
  39.     ArbPrin VARCHAR(9),  
  40.     ArbAux VARCHAR(9),
  41.     Anotador VARCHAR(9),
  42.     Crono VARCHAR(9),
  43.     Op24 VARCHAR(9),
  44.         INDEX (EquipoA),
  45.     FOREIGN KEY (EquipoA)
  46.                REFERENCES EQUIPO (NIF),
  47.         INDEX (EquipoB),
  48.     FOREIGN KEY (EquipoB)
  49.                 REFERENCES EQUIPO (NIF),
  50.     INDEX (ArbPrin, ArbAux, Anotador, Crono, Op24),
  51.     FOREIGN KEY (ArbPrin, ArbAux, Anotador, Crono, Op24)
  52.                  REFERENCES EQUIPO_ARBITRAL (DNI, DNI, DNI, DNI, DNI),
  53.         INDEX (Codigo_pabellon),
  54.     FOREIGN KEY (Codigo_pabellon)
  55.                  REFERENCES PABELLON (Codigo_pabellon),
  56.     FOREIGN KEY (Codigo_jornada)
  57.                  REFERENCES JORNADA (Codigo_jornada));


Código MySQL:
Ver original
  1. ...
  2.         INDEX (EquipoA),
  3.     FOREIGN KEY (EquipoA)
  4.                REFERENCES EQUIPO (NIF),
  5.         INDEX (EquipoB),
  6.     FOREIGN KEY (EquipoB)
  7.                 REFERENCES EQUIPO (NIF),
  8.         ...


Eran dos claves foraneas, no una....bañera.


Deberias especificar mas cosas... el motor que quieres usar....etc)

Manual de CREATE TABLE
http://dev.mysql.com/doc/refman/5.0/...ate-table.html

Manual de FK
http://dev.mysql.com/doc/refman/5.0/...nstraints.html
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 06/03/2014 a las 07:06

Etiquetas: campo, clave, sql, tabla, veces
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 20:41.