Pergunta

Tenho problemas com a criação de tabelas e chave estrangeira. (Errno: 150) Aqui está uma imagem atualizada da captura de tela: http://img264.imagevenue.com/img.php?image=14866_db_122_223lo.jpg

Talvez o problema seja o design do banco de dados.

-- -----------------------------------------------------
-- Table `mydb`.`projekt_user`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`projekt_user` (
  `UserID` INT NOT NULL ,
  `Name` VARCHAR(45) NULL ,
  PRIMARY KEY (`UserID`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`projekt_auswahl`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`projekt_auswahl` (
  `UserID` INT NOT NULL ,
  `projekt_id` INT NOT NULL ,
  `projekt_kategorie_id` INT NOT NULL ,
  `projekt_attachment` VARCHAR(45) NULL ,
  PRIMARY KEY (`UserID`, `projekt_id`, `projekt_kategorie_id`) ,
  INDEX `UserID` (`UserID` ASC) ,
  CONSTRAINT `UserID`
    FOREIGN KEY (`UserID` )
    REFERENCES `mydb`.`projekt_user` (`UserID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`projekt_kategorien`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`projekt_kategorien` (
  `projekt_kategorie_id` INT NOT NULL ,
  `kategorie` VARCHAR(45) NULL ,
  PRIMARY KEY (`projekt_kategorie_id`) ,
  INDEX `projekt_kategorie_id` (`projekt_kategorie_id` ASC) ,
  CONSTRAINT `projekt_kategorie_id`
    FOREIGN KEY (`projekt_kategorie_id` )
    REFERENCES `mydb`.`projekt_auswahl` (`projekt_kategorie_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`projekte`
-- -----------------------------------------------------
CREATE TABLE `projekte` (
  `projekt_id` INT NOT NULL ,
  `projektname` VARCHAR(45) NULL ,
  `projekt_status` VARCHAR(45) NULL ,
  PRIMARY KEY (`projekt_id`) ,
  INDEX `projekt_id` (`projekt_id` ASC) ,
  CONSTRAINT `projekt_id`
    FOREIGN KEY (`projekt_id` )
    REFERENCES `mydb`.`projekt_auswahl` (`projekt_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
Foi útil?

Solução

Você tem suas chaves estrangeiras na direção errada e precisa carregar as tabelas em ordem (pais antes dos filhos):

-- -----------------------------------------------------
-- Table `mydb`.`projekt_user`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`projekt_user` (
  `UserID` INT NOT NULL ,
  `Name` VARCHAR(45) NULL ,
  PRIMARY KEY (`UserID`) )
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `mydb`.`projekt_kategorien`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`projekt_kategorien` (
  `projekt_kategorie_id` INT NOT NULL ,
  `kategorie` VARCHAR(45) NULL ,
  PRIMARY KEY (`projekt_kategorie_id`) ,
  INDEX `projekt_kategorie_id` (`projekt_kategorie_id` ASC) 
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `mydb`.`projekte`
-- -----------------------------------------------------
CREATE TABLE `projekte` (
  `projekt_id` INT NOT NULL ,
  `projektname` VARCHAR(45) NULL ,
  `projekt_status` VARCHAR(45) NULL ,
  PRIMARY KEY (`projekt_id`) ,
  INDEX `projekt_id` (`projekt_id` ASC))
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `mydb`.`projekt_auswahl`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `projekt_auswahl` (
  `UserID` INT NOT NULL ,
  `projekt_id` INT NOT NULL ,
  `projekt_kategorie_id` INT NOT NULL ,
  `projekt_attachment` VARCHAR(45) NULL ,
  PRIMARY KEY (`UserID`, `projekt_id`, `projekt_kategorie_id`) ,
  INDEX `UserID` (`UserID` ASC) ,
  CONSTRAINT `UserID`
    FOREIGN KEY (`UserID` )
    REFERENCES `projekt_user` (`UserID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
CONSTRAINT `projekt_kategorie_id`
    FOREIGN KEY (`projekt_kategorie_id` )
    REFERENCES `projekt_kategorien` (`projekt_kategorie_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
CONSTRAINT `projekt_id`
    FOREIGN KEY (`projekt_id` )
    REFERENCES `projekte` (`projekt_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Se tivesse prestado mais atenção ao ERD que você forneceu, teria visto que os "pés de corvos" estavam apontando para cima, quando a convenção é que eles sempre apontam (ou a esquerda, se necessário).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top