2

MySQL Workbench 5.2.45 を使用して MacOSX を使用しています。EER ダイアグラム機能を使用してデータベースを設計し、フォワード エンジニアリングを試みてデータベースを生成し、ローカル サーバーに配置しました。エラー コードが表示されます:エラー 1005: テーブルを作成できません (errno: 150)

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='TRADITIONAL,ALLOW_INVALID_DATES';

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

-- -----------------------------------------------------
-- Table `Finance`.`DatabaseUser`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `Finance`.`DatabaseUser` (
  `ID` INT(11) NOT NULL AUTO_INCREMENT ,
  `FirstName` VARCHAR(255) NOT NULL ,
  `LastName` VARCHAR(255) NOT NULL ,
  `Tel` VARCHAR(255) NULL ,
  `Email` VARCHAR(255) NOT NULL,
  `Password` VARCHAR(255) NOT NULL ,
  `Admin` CHAR(1) NOT NULL DEFAULT 'N' ,
  `Project1` CHAR(1) NOT NULL DEFAULT 'N' ,
  `Project2` CHAR(1) NOT NULL DEFAULT 'N' ,
  `Project3` CHAR(1) NOT NULL DEFAULT 'N' ,
  PRIMARY KEY (`ID`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `Finance`.`Entities`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `Finance`.`Entities` (
  `ID` INT(11) NOT NULL AUTO_INCREMENT ,
  `CreatorID` INT(11) NOT NULL ,
  `FullName` VARCHAR(255) NOT NULL ,
  `ShortName` VARCHAR(255) NULL ,
  PRIMARY KEY (`ID`) ,
  INDEX `Creator_idx` (`CreatorID` ASC) ,
  CONSTRAINT `CreatorEntities`
    FOREIGN KEY (`CreatorID` )
    REFERENCES `Finance`.`DatabaseUser` (`ID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `Finance`.`Grant`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `Finance`.`Grant` (
  `ID` INT(11) NOT NULL AUTO_INCREMENT ,
  `CreatorID` INT(11) NOT NULL ,
  `DonorID` INT(11) NOT NULL ,
  `RecipientID` INT(11) NOT NULL ,
  `Name` VARCHAR(255) NOT NULL ,
  `Year` YEAR NOT NULL ,
  PRIMARY KEY (`ID`) ,
  INDEX `Creator_idx` (`CreatorID` ASC) ,
  INDEX `index3` (`DonorID` ASC, `RecipientID` ASC) ,
  CONSTRAINT `CreatorGrant`
    FOREIGN KEY (`CreatorID` )
    REFERENCES `Finance`.`DatabaseUser` (`ID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `InstrumentGrant`
    FOREIGN KEY (`DonorID` , `RecipientID` )
    REFERENCES `Finance`.`Entities` (`ID` , `ID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

USE `Finance` ;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

投稿で提案されている解決策を試してきました (エラー コード: 1005. テーブル '...' (errno: 150) を作成できません) が、これは問題ではないようです。1. データ型は同じです 2. 主キーを参照しています 3. 外部キー名は一意です 4. テーブルはすべて InnoDB です 5. SET NULL は関係ありません など.

助けていただけますか?

4

2 に答える 2

1

Grantテーブルの外部キー制約を変更します。

http://www.sqlfiddle.com/#!2/04945を参照してください

  CONSTRAINT `InstrumentGrant`
    FOREIGN KEY (`RecipientID`)
    REFERENCES `Entities` (`ID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `InstrumentGrant_2`
    FOREIGN KEY (`DonorID`)
    REFERENCES `Entities` (`ID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION

必要に応じて制約に名前を付けます。

于 2013-02-21T22:23:59.950 に答える
0

解決済み:

このエラーを回避するには、エクスポート メニューで [個別の CREATE INDEX ステートメントを生成する] オプションを選択します。

于 2013-10-16T06:03:19.000 に答える