Forward engineering mysql workbench

2019-08-22 16:22发布

im stuck and have an error in forward engineering my model :( i dont know how to solve it :/ i had a similar issue before and it was just about changing the position of the primary key and then it worked but this time it doesnt for some reason :/

Executing SQL script in server
ERROR: Error 1005: Can't create table 'werkzeuge.flansch' (errno: 150)
SQL Code:
        -- -----------------------------------------------------
        -- Table `werkzeuge`.`flansch`
        -- -----------------------------------------------------
        CREATE TABLE IF NOT EXISTS `werkzeuge`.`flansch` (
          `typ` VARCHAR(45) NOT NULL,
          `bestellt` INT NULL,
          `fertigung` INT NULL,
          `lieferant` VARCHAR(50) NULL,
          `lager` INT NULL,
          `lagerplatz` VARCHAR(45) NULL,
          `gewicht` DECIMAL NULL,
          `e_k_preis` DECIMAL NULL,
          `v_k_preis` DECIMAL NULL,
          PRIMARY KEY (`typ`),
          INDEX `fk_flansch_werkzeugführungen1_idx` (`typ` ASC),
          CONSTRAINT `fk_flansch_werkzeugführungen1`
            FOREIGN KEY (`typ`)
            REFERENCES `werkzeuge`.`werkzeugführungen` (`flansch`)
            ON DELETE NO ACTION
            ON UPDATE NO ACTION)
        ENGINE = InnoDB

SQL script execution finished: statements: 8 succeeded, 1 failed

Fetching back view definitions in final form.
Nothing to fetch

And this is my create statement for my tables for the database

CREATE SCHEMA IF NOT EXISTS `werkzeuge` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `werkzeuge` ;

-- -----------------------------------------------------
-- Table `werkzeuge`.`maschinen`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `werkzeuge`.`maschinen` (
  `werkzeugsatz` VARCHAR(45) NOT NULL,
  `typ` VARCHAR(50) NOT NULL,
  `maschinenkörper` VARCHAR(45) NOT NULL,
  `elektrik` VARCHAR(45) NOT NULL,
  `pneumatic` VARCHAR(45) NOT NULL,
  `hydraulik` VARCHAR(45) NOT NULL,
  `kühlvorrichtung` VARCHAR(45) NOT NULL,
  `vorschubeinheit` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`werkzeugsatz`, `typ`, `maschinenkörper`, `elektrik`, `pneumatic`, `hydraulik`, `kühlvorrichtung`, `vorschubeinheit`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `werkzeuge`.`werkzeugsätze_gierth`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `werkzeuge`.`werkzeugsätze_gierth` (
  `werkzeugführung` VARCHAR(45) NOT NULL,
  `messerhalter` VARCHAR(45) NOT NULL,
  `zentrierkronen` VARCHAR(45) NOT NULL,
  `spanvorichtung` VARCHAR(45) NOT NULL,
  `werkzeugsatz` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`werkzeugführung`, `messerhalter`, `zentrierkronen`, `spanvorichtung`),
  INDEX `fk_werkzeugsätze_gierth_maschinen_idx` (`werkzeugsatz` ASC),
  CONSTRAINT `fk_werkzeugsätze_gierth_maschinen`
    FOREIGN KEY (`werkzeugsatz`)
    REFERENCES `werkzeuge`.`maschinen` (`werkzeugsatz`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `werkzeuge`.`werkzeugführungen`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `werkzeuge`.`werkzeugführungen` (
  `oberteilführung` VARCHAR(45) NOT NULL,
  `flansch` VARCHAR(45) NOT NULL,
  `passfeder` VARCHAR(45) NOT NULL,
  `flansch_mit_führung` VARCHAR(45) NOT NULL,
  `länge` INT NULL,
  `wf_komplett` VARCHAR(45) NULL,
  `jahresbedarf` VARCHAR(45) NULL,
  `typ` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`oberteilführung`, `flansch`, `passfeder`, `flansch_mit_führung`),
  INDEX `fk_werkzeugführungen_werkzeugsätze_gierth1_idx` (`typ` ASC),
  CONSTRAINT `fk_werkzeugführungen_werkzeugsätze_gierth1`
    FOREIGN KEY (`typ`)
    REFERENCES `werkzeuge`.`werkzeugsätze_gierth` (`werkzeugführung`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `werkzeuge`.`flansch`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `werkzeuge`.`flansch` (
  `typ` VARCHAR(45) NOT NULL,
  `bestellt` INT NULL,
  `fertigung` INT NULL,
  `lieferant` VARCHAR(50) NULL,
  `lager` INT NULL,
  `lagerplatz` VARCHAR(45) NULL,
  `gewicht` DECIMAL NULL,
  `e_k_preis` DECIMAL NULL,
  `v_k_preis` DECIMAL NULL,
  PRIMARY KEY (`typ`),
  INDEX `fk_flansch_werkzeugführungen1_idx` (`typ` ASC),
  CONSTRAINT `fk_flansch_werkzeugführungen1`
    FOREIGN KEY (`typ`)
    REFERENCES `werkzeuge`.`werkzeugführungen` (`flansch`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `werkzeuge`.`oberteilführung`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `werkzeuge`.`oberteilführung` (
  `typ` VARCHAR(45) NOT NULL,
  `bestellt` INT NULL,
  `fertigung` VARCHAR(45) NULL,
  `lieferant` VARCHAR(45) NULL,
  `lager` VARCHAR(45) NULL,
  `lagerplatz` VARCHAR(45) NULL,
  `gewicht` VARCHAR(45) NULL,
  `e_k_preis` VARCHAR(45) NULL,
  `v_k_preis` VARCHAR(45) NULL,
  PRIMARY KEY (`typ`),
  INDEX `fk_oberteilführung_werkzeugführungen1_idx` (`typ` ASC),
  CONSTRAINT `fk_oberteilführung_werkzeugführungen1`
    FOREIGN KEY (`typ`)
    REFERENCES `werkzeuge`.`werkzeugführungen` (`oberteilführung`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `werkzeuge`.`flansch_mit_führung`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `werkzeuge`.`flansch_mit_führung` (
  `typ` VARCHAR(45) NOT NULL,
  `bestellt` INT NULL,
  `fertigung` VARCHAR(45) NULL,
  `lieferant` VARCHAR(45) NULL,
  `lager` VARCHAR(45) NULL,
  `lagerplatz` VARCHAR(45) NULL,
  `gewicht` VARCHAR(45) NULL,
  `e_k_preis` VARCHAR(45) NULL,
  `v_k_preis` VARCHAR(45) NULL,
  INDEX `fk_flansch_mit_führung_werkzeugführungen1_idx` (`typ` ASC),
  PRIMARY KEY (`typ`),
  CONSTRAINT `fk_flansch_mit_führung_werkzeugführungen1`
    FOREIGN KEY (`typ`)
    REFERENCES `werkzeuge`.`werkzeugführungen` (`flansch_mit_führung`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `werkzeuge`.`passfeder`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `werkzeuge`.`passfeder` (
  `typ` VARCHAR(45) NOT NULL,
  `bestellt` INT NULL,
  `fertigung` VARCHAR(45) NULL,
  `lieferant` VARCHAR(45) NULL,
  `lager` VARCHAR(45) NULL,
  `lagerplatz` VARCHAR(45) NULL,
  `gewicht` VARCHAR(45) NULL,
  `e_k_preis` VARCHAR(45) NULL,
  `v_k_preis` VARCHAR(45) NULL,
  PRIMARY KEY (`typ`),
  INDEX `fk_passfeder_werkzeugführungen1_idx` (`typ` ASC),
  CONSTRAINT `fk_passfeder_werkzeugführungen1`
    FOREIGN KEY (`typ`)
    REFERENCES `werkzeuge`.`werkzeugführungen` (`passfeder`)
    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;

1条回答
劫难
2楼-- · 2019-08-22 16:58

When you're creating the table werkzeuge.werkzeugführungen

`flansch` VARCHAR(45) NOT NULL

must actually be

`flansch` VARCHAR(45) NOT NULL UNIQUE

The flansch column defines the primary key in werkzeugführungen and primary key must be unique.

查看更多
登录 后发表回答