@Develoder
Моя игра https://ur-l.ru/sioKg

Как объединить три таблицы?

Здравствуйте! Я новичок в данной области и нуждаюсь в ответах.

При создании не сложной БД через MySQL Workbench, понадобилось сделать связь трех таблиц, где две из них соединяются по вторичному ключу к третьей таблице. Данные связи я построил в EER Diagram, но вот когда создаю БД через сгенерированный скрипт мне пишет вот такую ошибку: Error Code: 1826. Duplicate foreign key constraint name 'id_product' (таблица Booking). Может знаете в чем проблема?

EER модель:
5f60827174483730127675.png

Генерируемый код:
-- MySQL Script generated by MySQL Workbench
-- Tue Sep 15 13:16:18 2020
-- Model: New Model    Version: 1.0
-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`Product`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Product` (
  `id_product` INT NOT NULL,
  `category` VARCHAR(45) NOT NULL,
  `name` VARCHAR(45) NOT NULL,
  `amount` INT NOT NULL,
  `price` REAL NOT NULL)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`Production`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Production` (
  `id_produciton` INT NOT NULL AUTO_INCREMENT,
  `id_product` INT NOT NULL,
  `amount` INT NOT NULL,
  `date` DATE NOT NULL,
  PRIMARY KEY (`id_produciton`),
  INDEX `id_product_idx` (`id_product` ASC) VISIBLE,
  CONSTRAINT `id_product`
    FOREIGN KEY (`id_product`)
    REFERENCES `mydb`.`Product` (`id_product`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`Client`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Client` (
  `id_client` INT NOT NULL AUTO_INCREMENT,
  `FIO` TEXT(128) NOT NULL,
  `organiz_name` TEXT(128) NOT NULL,
  `city` TEXT(128) NOT NULL,
  `delivery_address` TEXT(128) NOT NULL,
  `cont_phone` VARCHAR(45) NOT NULL,
  `emale` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id_client`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`Booking`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Booking` (
  `id_booking` INT NOT NULL AUTO_INCREMENT,
  `id_client` INT NOT NULL,
  `id_product` INT NOT NULL,
  `amount` INT NOT NULL,
  `data` DATE NOT NULL,
  PRIMARY KEY (`id_booking`),
  INDEX `id_product_idx` (`id_product` ASC) VISIBLE,
  INDEX `id_client_idx` (`id_client` ASC) VISIBLE,
  CONSTRAINT `id_product`
    FOREIGN KEY (`id_product`)
    REFERENCES `mydb`.`Product` (`id_product`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `id_client`
    FOREIGN KEY (`id_client`)
    REFERENCES `mydb`.`Client` (`id_client`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
  • Вопрос задан
  • 705 просмотров
Решения вопроса 1
HemulGM
@HemulGM
Delphi Developer, сис. админ
Совпадают названия вторичных ключей. Измени название
Или придерживайся одного из разновидностей правил наименования полей.
Например: Первые пару символов - название таблицы, далее название поля. Т.е.
BK_ID - Таблица Books, поле ID
BK_PD_ID - Таблица Books, поле Products ID

PD_ID - Таблица Products, поле ID
PD_NAME - Таблица Products, поле Name
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@ComodoHacker
Сходу не вижу ошибки.
Попробуйте удалить все таблицы и выполнить скрипт заново.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы