2

Я нахожусь на MacOSX с помощью MySQL Workbench 5.2.45 Я разработал базу данных, используя функциональность диаграммы EER, а затем попробовал форвардную инженерию для генерации моя база данных для размещения на моем локальном сервере. Я получаю код ошибки: Ошибка 1005: Не удается создать таблицу (Errno: 150)MySQL Workbench - Forward Engineering - Ошибка 1005: невозможно создать таблицу (errno: 150)

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@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 [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 

Я пытался решения, предложенные в этой должности (Error Code: 1005. Can't create table '...' (errno: 150)), но это, кажется, не будет проблема. 1. Типы данных одни и те же 2. Я ссылки первичные ключи 3. Основные иностранные имена являются уникальными 4. Таблицы InnoDB все 5. Нет SET NULL не участвует и т.д.

Можете ли вы помочь ?

+0

Какое из ограничений FK не работает? и 'show engine innodb status' будет выгружать тонну данных, похоронен в середине которой является« последней ошибкой внешнего ключа ». у него будет больше информации о том, почему вы получаете 1005/150. –

+0

Извините, забыл упомянуть об этом: «Ошибка: Ошибка 1005: не удается создать таблицу« Finance.Grant »(errno: 150)« – FinanceGardener

+0

»и, посмотрев на синтаксис, бит' (ID, ID) в таблице инструментов Grant InstrumentGrant FK выглядит фанки. не уверен, что вы можете FK в одно и то же поле дважды. –

ответ

1

Измените ограничение внешнего ключа в таблице грантов.

См 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 

Назовите ограничения, как вы хотите.

+0

@MarcB и Slowcoder Большое спасибо, что решили мою проблему! Нет FK в одно и то же поле дважды в одном ограничении. – FinanceGardener

0

Постановили:

В меню экспорта выберите «Создать отдельный CREATE INDEX Выписки» вариант для того, чтобы избежать этой ошибки.