WorkBench で作成したモデルからスクリプトをフォワード エンジニアリングしましたが、スクリプトが失敗し続けます。2 番目の create table で失敗します。
CREATE TABLE IF NOT EXISTS `myDatabase`.`UserProfile` (
`ProfileId` INT NOT NULL AUTO_INCREMENT ,
`FirstName` VARCHAR( 45 ) NULL ,
`LastName` VARCHAR( 45 ) NULL ,
`Gender` CHAR( 1 ) NULL ,
`DOB` DATETIME NULL ,
`HairColor` VARCHAR( 20 ) NULL DEFAULT 'No Answer',
`EyeColor` VARCHAR( 20 ) NULL DEFAULT 'No Answer',
`Height` VARCHAR( 10 ) NULL DEFAULT 'No Answer',
`Weight` VARCHAR( 45 ) NULL DEFAULT 'Average',
`UserId` VARCHAR( 45 ) NOT NULL ,
PRIMARY KEY ( `ProfileId` ) ,
CONSTRAINT `FK_User_Profile` FOREIGN KEY ( `UserId` ) REFERENCES `OurAgreement`.`UserAccount` (
`UserId`
) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = INNODB;
エラー 150 は外部キーの問題だと思います。この FK に関連付けられたテーブルは、スクリプトで最初に作成されるため、この制約が試行される前に存在します。そのテーブルの DDL は次のとおりです。
CREATE TABLE IF NOT EXISTS `mydatabase`.`UserAccount` (
`UserId` INT NOT NULL AUTO_INCREMENT ,
`Login` VARCHAR(20) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,
`Password` CHAR(64) NOT NULL ,
`Email` VARCHAR(45) NULL ,
PRIMARY KEY (`UserId`))
ENGINE = InnoDB;
何が起こっているのですか?
編集============================
2 つの FK を持つテーブル:
CREATE TABLE IF NOT EXISTS `MyDatabase`.`Answer` (
`AnswerId` INT NOT NULL ,
`QuestionId` INT NOT NULL ,
`ProfileId` INT NOT NULL ,
PRIMARY KEY ( `AnswerId` ) ,
INDEX `ProfileId_idx` ( `ProfileId` ASC ) ,
INDEX `QuestionId_idx` ( `QuestionId` ASC ) ,
CONSTRAINT `FK_Question_Answer` FOREIGN KEY ( `QuestionId` ) REFERENCES `MyDatabase`.`Question` (
`QuestionId`
) ON DELETE NO ACTION ON UPDATE CASCADE ,
CONSTRAINT `FK_Answer_Profile` FOREIGN KEY ( `ProfileId` ) REFERENCES `MyDatabase`.`UserProfile` (
`ProfileId`
) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE = INNODB;