У меня есть этот SQL-код:«ограничение внешнего ключа неправильно формируется»
CREATE TABLE IF NOT EXISTS `deputy`.`Votings` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`VRSetId` INT UNSIGNED NOT NULL,
`LNSetIdOfMeeting` INT UNSIGNED NOT NULL,
`VRSetIdOfMeeting` INT UNSIGNED NOT NULL,
`meetingId` INT UNSIGNED NOT NULL,
PRIMARY KEY (`id`, `VRSetId`),
CONSTRAINT `fk_Votings_VotingRulesSets1`
FOREIGN KEY (`VRSetId`)
REFERENCES `deputy`.`VRSets` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Votings_Meetings1`
FOREIGN KEY (`LNSetIdOfMeeting` , `VRSetIdOfMeeting` , `meetingId`)
REFERENCES `deputy`.`Meetings` (`LNSetId` , `VRSetId` , `id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Там есть первичный ключ состоит из двух полей: «ид» и «VRSetId»; «VRSetId» также является внешним ключом, так как существует таблица «VRSets» с идентификацией отношения «1 к 1» с «Голосованиями». Существует также второй внешний ключ к таблице «Встречи», которая сама имеет первичный ключ, созданный с двумя внешними ключами в дополнение к полю «id» ... Таблица «Встречи» имеет отношения «один ко многим» с «Голосованиями», поэтому «Голосования» в итоге появилось так много ключей ... что прекрасно, поскольку я использую их для доступа к моим данным по-разному. Проблема заключается в том, что, так как я добавил автоматическую incremenent всех полей «ID» - я получаю такую ошибку:
ERROR: Error 1005: Can't create table `deputy`.`Votings` (errno: 150 "Foreign key constraint is incorrectly formed")
Там есть это «встреча» таблица с аналогичным отформатированными ключами и это прекрасно работает:
CREATE TABLE IF NOT EXISTS `deputy`.`Meetings` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`LNSetId` INT UNSIGNED NOT NULL,
`VRSetId` INT UNSIGNED NOT NULL,
`LNSetIdOfCSet` INT UNSIGNED NOT NULL,
`CSetId` INT UNSIGNED NOT NULL,
PRIMARY KEY (`id`, `LNSetId`, `VRSetId`),
CONSTRAINT `fk_Meetings_LegalNumbersSets1`
FOREIGN KEY (`LNSetId`)
REFERENCES `deputy`.`LNSets` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Meetings_VotingRulesSets1`
FOREIGN KEY (`VRSetId`)
REFERENCES `deputy`.`VRSets` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Meetings_ConfigurationSets1`
FOREIGN KEY (`LNSetIdOfCSet` , `CSetId`)
REFERENCES `deputy`.`CSets` (`LNSetId` , `id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
И последняя таблица связана с «Голосования» (я удалил поля данных во всех таблицах, чтобы сделать его более ясным):
CREATE TABLE IF NOT EXISTS `deputy`.`VRSets` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
база данных работает нормально, перед некоторыми незначительными изменениями я сделанный и теперь я не уверен, что происходит ... вся вещь была автоматически сгенерирована MySQL Workbench, и я запускаю скрипт на MariaDB.
Не могли бы вы добавить 'CREATE TABLE' синтаксис таблиц вы ссылающихся? Работает ли код, если вы используете только * один * из внешних ограничений? – BurninLeo
Пожалуйста, поддержите ответ, если это было полезно :) – th3an0maly