2016-06-26 15 views
0

mysql workbenchからエンジニアを転送しようとしているときにエラー'#1215 Cannot add foreign key'と表示されています。外部キーを追加できません#1215

私はスケールとエンティティテーブルの列を参照する矩形テーブルを持っています。 create rectangle文はエラーをスローします。 MySQL Error 1215: Cannot add foreign key constraintが同じことを求めて:

これは私のスキーマ

-- ----------------------------------------------------- 
-- Table `newDb`.`Scales` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `newDb`.`Scales` (
    `idScales` INT NOT NULL AUTO_INCREMENT, 
    `scale_name` VARCHAR(100) NULL, 
    `pid` INT NULL, 
    `col_Id` INT NULL, 
    `type` VARCHAR(45) NULL, 
    `range_from` INT NULL, 
    `range_to` INT NULL, 
    `bandpadding` INT NULL, 
    PRIMARY KEY (`idScales`), 
    UNIQUE INDEX `idScales_UNIQUE` (`idScales` ASC), 
    INDEX `pid_idx` (`pid` ASC), 
    INDEX `col_id_idx` (`col_Id` ASC), 
    CONSTRAINT `pid` 
    FOREIGN KEY (`pid`) 
    REFERENCES `newDb`.`projects` (`pid`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `col_id` 
    FOREIGN KEY (`col_Id`) 
    REFERENCES `newDb`.`data_sets_columns` (`col_Id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

-- ----------------------------------------------------- 
-- Table `newDb`.`Entities` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `newDb`.`Entities` (
    `idEntities` INT NOT NULL AUTO_INCREMENT, 
    `entity_name` VARCHAR(100) NULL, 
    `entity_type` VARCHAR(45) NULL, 
    `pid` INT NOT NULL, 
    PRIMARY KEY (`idEntities`), 
    UNIQUE INDEX `idEntities_UNIQUE` (`idEntities` ASC), 
    INDEX `pid_idx` (`pid` ASC), 
    CONSTRAINT `pidEF` 
    FOREIGN KEY (`pid`) 
    REFERENCES `newDb`.`projects` (`pid`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `newDb`.`Rectangle` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `newDb`.`Rectangle` (
    `idRectangle` INT NOT NULL AUTO_INCREMENT, 
    `rect_name` VARCHAR(100) NULL, 
    `X_pos` INT NOT NULL DEFAULT 0, 
    `Y_pos` INT NOT NULL DEFAULT 0, 
    `Height` INT NOT NULL DEFAULT 50, 
    `Width` INT NOT NULL DEFAULT 50, 
    `Offset_X` INT NOT NULL DEFAULT 0, 
    `Offset_Y` INT NOT NULL DEFAULT 0, 
    `Opacity` INT NULL DEFAULT 100, 
    `Color` VARCHAR(10) NOT NULL DEFAULT 'black', 
    `idScale` INT NOT NULL, 
    `idEntities` INT NOT NULL, 
    `idColorScale` INT NULL, 
    PRIMARY KEY (`idRectangle`), 
    UNIQUE INDEX `idRectangle_UNIQUE` (`idRectangle` ASC), 
    INDEX `idScales_idx` (`idScale` ASC, `idColorScale` ASC), 
    INDEX `idEntities_idx` (`idEntities` ASC), 
    CONSTRAINT `idScalesF` 
    FOREIGN KEY (`idScale` , `idColorScale`) 
    REFERENCES `newDb`.`Scales` (`idScales` , `idScales`) 
    ON DELETE RESTRICT 
    ON UPDATE RESTRICT, 
    CONSTRAINT `idEntitiesF` 
    FOREIGN KEY (`idEntities`) 
    REFERENCES `newDb`.`Entities` (`idEntities`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

ある別の質問があります。

私はそれに続いて、答えに応じて、不一致のエンジン、不一致の列の種類、または不一致の列のいずれかがあります。

参照されているすべての列と外部キーcoloumnsは符号なしINTであり、名前は同じで、エンジンはINNODBなので、私は不一致は見えません。

は、私は以下の制約が意味をなさないここ

+0

どのCREATE TABLEがそのエラーを投げていますか? – duskwuff

+0

スケールとエンティティテーブルから列を参照するときに、矩形を作成すると言います。 – Snedden27

答えて

1

行方不明です見つけるように見えることはできません:あなたはRectangle内のすべての行を持っていることを言おうとしているようにこれは読み込み

CONSTRAINT `idScalesF` 
    FOREIGN KEY (`idScale` , `idColorScale`) 
    REFERENCES `newDb`.`Scales` (`idScales` , `idScales`) 
    ON DELETE RESTRICT 
    ON UPDATE RESTRICT, 

idScale」と「idColorScale」のペアは、両方ともidScalesと呼ばれるScalesの列のペアと一致します。 idScaleidColorScaleのそれぞれがScalesの行を参照すると言うと、これは2つの別個の外部キーとして書き出される必要があります。

プライマリキーは常に暗黙的に一意であり、インデックスとして機能します。作成した…_UNIQUEのインデックス(例:idScales_UNIQUE)はすべて冗長であり、削除する必要があります。

関連する問題