Диаграмма EER прямого проектирования выдает ошибку 1882

#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.