Как исправить ошибку «ОШИБКА: Ошибка 1215: невозможно добавить ограничение внешнего ключа»? - PullRequest
0 голосов
/ 29 октября 2019

Я сделал диаграмму (EER) в MySQL-Workbench, и попытка выполнить «Переадресация инженера в базу данных» выдала мне эту ошибку «Ошибка 1215: не удается добавить ограничение внешнего ключа» и не могу определить ошибку в коде.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Код:

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Схема loja1182

CREATE SCHEMA IF NOT EXISTS `loja1182` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin ;
USE `loja1182` ;

Таблица loja1182. distritos

CREATE TABLE IF NOT EXISTS `loja1182`.`distritos` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `distrito` VARCHAR(50) NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;

Таблица loja1182. clientes

CREATE TABLE IF NOT EXISTS `loja1182`.`clientes` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `nome` VARCHAR(100) NULL,
  `morada` VARCHAR(100) NULL,
  `data_registo` DATE NOT NULL,
  `nrEncomendas` INT(11) NULL,
  `idDistrito` INT(11) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_clientes_table11_idx` (`idDistrito` ASC),
  CONSTRAINT `fk_clientes_table11`
    FOREIGN KEY (`idDistrito`)
    REFERENCES `loja1182`.`distritos` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Стол loja1182. utilizadores

CREATE TABLE IF NOT EXISTS `loja1182`.`utilizadores` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `email` VARCHAR(100) NULL,
  `password` VARCHAR(20) NULL,
  `total_acessos` INT NULL,
  `idCliente` INT(11) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_utilizadores_clientes_idx` (`idCliente` ASC),
  CONSTRAINT `fk_utilizadores_clientes`
    FOREIGN KEY (`idCliente`)
    REFERENCES `loja1182`.`clientes` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Стол loja1182. tiposencomenda

CREATE TABLE IF NOT EXISTS `loja1182`.`tiposencomenda` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `tipo` VARCHAR(20) NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;

Стол loja1182. estadosencomenda

CREATE TABLE IF NOT EXISTS `loja1182`.`estadosencomenda` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `estado` VARCHAR(20) NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;

Таблица loja1182. encomendas

CREATE TABLE IF NOT EXISTS `loja1182`.`encomendas` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `idCliente` INT(11) UNSIGNED NOT NULL,
  `data` DATE NULL,
  `idEstado` INT(11) UNSIGNED NOT NULL,
  `idTipo` INT(11) UNSIGNED NOT NULL,
  `valor` FLOAT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_encomendas_clientes1_idx` (`idCliente` ASC),
  INDEX `fk_encomendas_tiposencomenda1_idx` (`idTipo` ASC),
  INDEX `fk_encomendas_estadosencomenda1_idx` (`idEstado` ASC),
  CONSTRAINT `fk_encomendas_clientes1`
    FOREIGN KEY (`idCliente`)
    REFERENCES `loja1182`.`clientes` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_encomendas_tiposencomenda1`
    FOREIGN KEY (`idTipo`)
    REFERENCES `loja1182`.`tiposencomenda` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_encomendas_estadosencomenda1`
    FOREIGN KEY (`idEstado`)
    REFERENCES `loja1182`.`estadosencomenda` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Таблица loja1182. categorias

CREATE TABLE IF NOT EXISTS `loja1182`.`categorias` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `categoria` VARCHAR(50) NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;

Таблица loja1182. iva

CREATE TABLE IF NOT EXISTS `loja1182`.`iva` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `taxa` FLOAT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;

Стол loja1182. artigos

CREATE TABLE IF NOT EXISTS `loja1182`.`artigos` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `descricao` VARCHAR(100) NULL,
  `precos` FLOAT NULL,
  `idIva` INT(11) UNSIGNED NOT NULL,
  `stock` INT(11) NOT NULL,
  `idCategoria` INT(11) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_artigos_categorias1_idx` (`idCategoria` ASC),
  INDEX `fk_artigos_iva1_idx` (`idIva` ASC),
  CONSTRAINT `fk_artigos_categorias1`
    FOREIGN KEY (`idCategoria`)
    REFERENCES `loja1182`.`categorias` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_artigos_iva1`
    FOREIGN KEY (`idIva`)
    REFERENCES `loja1182`.`iva` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Стол loja1182. linhasencomenda

CREATE TABLE IF NOT EXISTS `loja1182`.`linhasencomenda` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `idEncomenda` INT(11) UNSIGNED NOT NULL,
  `idArtigo` INT(11) UNSIGNED NOT NULL,
  `quantidade` INT(11) NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_linhasencomenda_encomendas1_idx` (`idEncomenda` ASC),
  INDEX `fk_linhasencomenda_artigos1_idx` (`idArtigo` ASC),
  CONSTRAINT `fk_linhasencomenda_encomendas1`
    FOREIGN KEY (`idEncomenda`)
    REFERENCES `loja1182`.`encomendas` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_linhasencomenda_artigos1`
    FOREIGN KEY (`idArtigo`)
    REFERENCES `loja1182`.`artigos` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

ОШИБКА:

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Выполнение сценария SQL на сервере ОШИБКА: Ошибка 1215: Невозможно добавить ограничение внешнего ключа Код SQL:

    Table `loja1182`.`encomendas`

    CREATE TABLE IF NOT EXISTS `loja1182`.`encomendas` (
      `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
      `idCliente` INT(11) UNSIGNED NOT NULL,
      `data` DATE NULL,
      `idEstado` INT(11) UNSIGNED NOT NULL,
      `idTipo` INT(11) UNSIGNED NOT NULL,
      `valor` FLOAT NULL,
      PRIMARY KEY (`id`),
      INDEX `fk_encomendas_clientes1_idx` (`idCliente` ASC),
      INDEX `fk_encomendas_tiposencomenda1_idx` (`idTipo` ASC),
      INDEX `fk_encomendas_estadosencomenda1_idx` (`idEstado` ASC),
      CONSTRAINT `fk_encomendas_clientes1`
        FOREIGN KEY (`idCliente`)
        REFERENCES `loja1182`.`clientes` (`id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_encomendas_tiposencomenda1`
        FOREIGN KEY (`idTipo`)
        REFERENCES `loja1182`.`tiposencomenda` (`id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_encomendas_estadosencomenda1`
        FOREIGN KEY (`idEstado`)
        REFERENCES `loja1182`.`estadosencomenda` (`id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB

Выполнение сценария SQL завершено: операторы: 10 успешно выполнено, 1 не выполнено

Получение определений вида в окончательном виде. Ничего не принесло

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...