问题
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:
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.
来源:https://stackoverflow.com/questions/26526572/forward-engineering-mysql-workbench