#foreign-keys #constraints #mysql-workbench
#внешние ключи #ограничения #mysql-workbench
Вопрос:
Я просмотрел другие форумы, включая сообщения об этой ошибке, но, похоже, не могу найти ее причину в моей ситуации. Типы данных, параметры сортировки, заполнение нулем, not null, без знака и двоичные типы совпадают, и я все еще не могу найти решение. Результат, который я получаю, выглядит следующим образом:
ошибка: ERROR: Error 1822: Failed to add the foreign key constraint. Missing index for constraint 'fk_projects_has_equipment_equipment1' in the referenced table 'equipment'
Я также включил таблицу оборудования. Любая помощь приветствуется.
код:
CREATE TABLE IF NOT EXISTS `Group_13_Schema`.`project_equipment` (
`project_id` INT NOT NULL,
`vendor_id` INT NOT NULL,
`department_id` INT NOT NULL,
`equipment_id` INT NOT NULL,
`equipment_cost` DECIMAL(10,2) NULL,
PRIMARY KEY (`department_id`, `equipment_id`, `project_id`, `vendor_id`),
INDEX `fk_projects_has_equipment_equipment1_idx` (`vendor_id` ASC, `department_id` ASC, `equipment_id` ASC) VISIBLE,
INDEX `fk_projects_has_equipment_projects1_idx` (`project_id` ASC) VISIBLE,
CONSTRAINT `fk_projects_has_equipment_projects1`
FOREIGN KEY (`project_id`)
REFERENCES `Group_13_Schema`.`projects` (`project_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_projects_has_equipment_equipment1`
FOREIGN KEY (`vendor_id` , `department_id` , `equipment_id`)
REFERENCES `Group_13_Schema`.`equipment` (`vendor_id` , `department_id` , `equipment_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
CREATE TABLE IF NOT EXISTS `Group_13_Schema`.`equipment` (
`equipment_id` INT NOT NULL,
`vendor_id` INT NOT NULL,
`department_id` INT NOT NULL,
`equipment_name` VARCHAR(45) NULL,
`equipment_cost` DECIMAL(10,2) NULL,
PRIMARY KEY (`equipment_id`, `vendor_id`, `department_id`),
INDEX `fk_departments_has_vendors_vendors1_idx` (`vendor_id` ASC) VISIBLE,
INDEX `fk_departments_has_vendors_departments1_idx` (`department_id` ASC) VISIBLE,
CONSTRAINT `fk_departments_has_vendors_departments1`
FOREIGN KEY (`department_id`)
REFERENCES `Group_13_Schema`.`departments` (`department_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_departments_has_vendors_vendors1`
FOREIGN KEY (`vendor_id`)
REFERENCES `Group_13_Schema`.`vendors` (`vendor_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_projects_has_equipment_equipment1`
FOREIGN KEY (`equipment_id`)
REFERENCES `Group_13_Schema`.`equipment` (`vendor_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Комментарии:
1. Почему ошибка не ясна? Вы ссылаетесь на ключи / индексы оборудования (
vendor_id
,department_id
equipment_id
) amp; (vendor_id
), но вы не объявили оба этих ключа / индекса. Также это рассматривается в повторяющихся ответах на ошибки FK и в повторном объявлении FK вручную. Прежде чем рассматривать возможность публикации, пожалуйста, всегда загуглите свое сообщение об ошибке или множество ясных, кратких и точных формулировок вашего вопроса / проблемы / цели, с вашими конкретными строками / именами или без них, и прочитайте много ответов. Если вы публикуете вопрос, используйте одну фразу в качестве заголовка.
Ответ №1:
Попробуйте создать индекс для 3 столбцов FK. Я ожидал бы, что PK уже соответствует требованиям, но там последние 2 столбца расположены в порядке, противоположном тому, который указан в ограничении FK.