Как создать два столбца с одинаковыми внешними ключами

#mysql

#mysql

Вопрос:

Я пытаюсь создать два столбца с одинаковым внешним ключом. Это ошибка в Mysql. ОШИБКА

  errno: 150Foreign key constraint is incorrectly formed”
  

СКРИПТ

 CREATE TABLE IF NOT EXISTS `invictus`.`Votaciones` (
  `idVotaciones` INT NOT NULL AUTO_INCREMENT,
  `mvp` INT NOT NULL,
  `idPartido-Jugador` INT NOT NULL,
  `votante` INT NOT NULL,
  PRIMARY KEY (`idVotaciones`),
  INDEX `fk_Votaciones_Partido-Jugadores_idx` (`mvp` ASC, `idPartido-Jugador` ASC, `votante` ASC),
  CONSTRAINT `fk_Votaciones_Partido-Jugadores`
    FOREIGN KEY (`mvp` , `idPartido-Jugador` , `votante`)
    REFERENCES `invictus`.`Partido-Jugadores` (`Jugador_idJugador` , `Equipos_Partido_idPartido` , `Jugador_idJugador`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
  

РЕДАКТИРОВАТЬ 1

Вот таблица Partido-Jugadores, где я хочу ссылаться на мои два столбца с помощью Jugador_idJugador

 CREATE TABLE IF NOT EXISTS `invictus`.`Partido-Jugadores` (
  `idPartido-Jugadores` INT NOT NULL AUTO_INCREMENT,
  `Equipos_idEquipos` INT NOT NULL,
  `Equipos_Partido_idPartido` INT NOT NULL,
  `Equipos_Partido_fecha` DATETIME NOT NULL,
  `Equipos_Partido_Grupo_idGrupo` INT NOT NULL,
  `Equipos_nombreEquipo` VARCHAR(45) NOT NULL,
  `Jugador_idJugador` INT NOT NULL,
  PRIMARY KEY (`idPartido-Jugadores`, `Equipos_idEquipos`, `Equipos_Partido_idPartido`, `Equipos_Partido_fecha`, `Equipos_Partido_Grupo_idGrupo`, `Equipos_nombreEquipo`, `Jugador_idJugador`),
  INDEX `fk_Partido-Jugadores_Equipos1_idx` (`Equipos_idEquipos` ASC, `Equipos_Partido_idPartido` ASC, `Equipos_Partido_fecha` ASC, `Equipos_Partido_Grupo_idGrupo` ASC, `Equipos_nombreEquipo` ASC),
  INDEX `fk_Partido-Jugadores_Jugador1_idx` (`Jugador_idJugador` ASC),
  CONSTRAINT `fk_Partido-Jugadores_Equipos1`
    FOREIGN KEY (`Equipos_idEquipos` , `Equipos_Partido_idPartido` , `Equipos_Partido_fecha` , `Equipos_Partido_Grupo_idGrupo` , `Equipos_nombreEquipo`)
    REFERENCES `invictus`.`Equipos` (`idEquipos` , `Partido_idPartido` , `Partido_fecha` , `Partido_Grupo_idGrupo` , `nombreEquipo`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Partido-Jugadores_Jugador1`
    FOREIGN KEY (`Jugador_idJugador`)
    REFERENCES `invictus`.`Miembros-Grupo` (`Jugador_idJugador`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
  

В чем проблема?
Спасибо!

Ответ №1:

Если вам нужен правильный синтаксис, вам нужно будет показать, как выглядит первичный ключ для Partido-Jugadores .

Однако вы дважды повторили столбец в ссылке на внешний ключ:

 REFERENCES `invictus`.`Partido-Jugadores` (**`Jugador_idJugador`**, `Equipos_Partido_idPartido` , **`Jugador_idJugador`**)
  

Я никогда не пробовал этого, но я предполагаю, что это ошибка в определении первичного ключа и ошибка в ссылке на внешний ключ. Используйте соответствующее определение первичного ключа.

Редактировать:

Если у вас есть столбец с автоматическим увеличением в Partido-Jugadores , то это должен быть первичный ключ. Это само по себе, и больше ничего:

 PRIMARY KEY (`idPartido-Jugadores`),
  

Тогда ссылка на внешний ключ будет:

 CONSTRAINT `fk_Votaciones_Partido-Jugadores`
  FOREIGN KEY (`idPartido-Jugador)
  REFERENCES `invictus`.`Partido-Jugadores` (`Jugador_idJugadores`)
  ON DELETE NO ACTION ON UPDATE NO ACTION
  

Примечания:

  • На мой взгляд, первичный ключ следует называть в единственном числе.
  • Вы не должны использовать - в именах таблиц или столбцов. Вместо этого используйте _ в качестве разделителя. Таким образом, идентификаторы не нужно экранировать.

Комментарии:

1. Я добавил Partido-Jugadores в свои вопросы. В моей таблице Votaciones столбцы mvp и votante относятся к Jugador_idJugador в разделе-Jugadores . Jugador_idJugador должен быть с первичным ключом?