I'm modeling a database in MYSQL and I'm having a problem that I can not identify:
Bank creation:
-- MySQL Workbench Forward Engineering
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';
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS 'mydb' DEFAULT CHARACTER SET utf8 ;
USE 'mydb' ;
-- -----------------------------------------------------
-- Table 'mydb'.'FORNECEDOR'
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS 'mydb'.'FORNECEDOR' (
'COD_FORN' INT NOT NULL,
'NOME' VARCHAR(30) NULL,
'RAZAOSOCIAL' VARCHAR(30) NULL,
'IE' VARCHAR(15) NULL,
'CNPJ' VARCHAR(14) NULL,
'TELEFONE' BIGINT(12) NULL,
'ENDERECO' VARCHAR(40) NULL,
'CIDADE' VARCHAR(25) NULL,
'UF' CHAR(2) NULL,
'AGENCIA' BIGINT(7) NULL,
'CONTA' BIGINT(5) NULL,
PRIMARY KEY ('COD_FORN'))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table 'mydb'.'PRODUTO'
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS 'mydb'.'PRODUTO' (
'COD_PRODUTO' INT NOT NULL,
'DESCRICAO' VARCHAR(20) NULL,
'QUANTIDADE' FLOAT NULL,
'VALOR' DOUBLE(5,2) NULL,
PRIMARY KEY ('COD_PRODUTO'))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table 'mydb'.'FORNECIMENTO'
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS 'mydb'.'FORNECIMENTO' (
'COD_FORNEC' INT NOT NULL,
'QTD_FORNEC' FLOAT NULL,
'VALOR_FORNEC' DOUBLE(6,2) NULL,
'DATA' DATETIME NULL,
'FORNECEDOR_COD_FORN' INT NOT NULL,
'PRODUTO_COD_PRODUTO' INT NOT NULL,
PRIMARY KEY ('COD_FORNEC', 'FORNECEDOR_COD_FORN', 'PRODUTO_COD_PRODUTO'),
INDEX 'fk_FORNECIMENTO_FORNECEDOR1_idx' ('FORNECEDOR_COD_FORN' ASC),
INDEX 'fk_FORNECIMENTO_PRODUTO1_idx' ('PRODUTO_COD_PRODUTO' ASC),
CONSTRAINT 'fk_FORNECIMENTO_FORNECEDOR1'
FOREIGN KEY ('FORNECEDOR_COD_FORN')
REFERENCES 'mydb'.'FORNECEDOR' ('COD_FORN')
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT 'fk_FORNECIMENTO_PRODUTO1'
FOREIGN KEY ('PRODUTO_COD_PRODUTO')
REFERENCES 'mydb'.'PRODUTO' ('COD_PRODUTO')
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table 'mydb'.'PESSOA'
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS 'mydb'.'PESSOA' (
'COD_PESSOA' INT NOT NULL,
'NOME' VARCHAR(25) NULL,
'ENDERECO' VARCHAR(30) NULL,
'CIDADE' VARCHAR(20) NULL,
'UF' CHAR(2) NULL,
'TELEFONE' BIGINT(12) NULL,
PRIMARY KEY ('COD_PESSOA'))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table 'mydb'.'VENDA'
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS 'mydb'.'VENDA' (
'COD_VENDA' INT NOT NULL,
'QTD_PROD' FLOAT NULL,
'DATA_VENDA' DATETIME NULL,
'DATA_PGTO' DATE NULL,
'PESSOA_COD_PESSOA' INT NOT NULL,
'PRODUTO_COD_PRODUTO' INT NOT NULL,
PRIMARY KEY ('COD_VENDA', 'PRODUTO_COD_PRODUTO', 'PESSOA_COD_PESSOA'),
INDEX 'fk_VENDA_PESSOA1_idx' ('PESSOA_COD_PESSOA' ASC),
INDEX 'fk_VENDA_PRODUTO1_idx' ('PRODUTO_COD_PRODUTO' ASC),
CONSTRAINT 'fk_VENDA_PESSOA1'
FOREIGN KEY ('PESSOA_COD_PESSOA')
REFERENCES 'mydb'.'PESSOA' ('COD_PESSOA')
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT 'fk_VENDA_PRODUTO1'
FOREIGN KEY ('PRODUTO_COD_PRODUTO')
REFERENCES 'mydb'.'PRODUTO' ('COD_PRODUTO')
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table 'mydb'.'PE_JURIDICA'
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS 'mydb'.'PE_JURIDICA' (
'CNPJ' VARCHAR(14) NOT NULL,
'RAZAOSOCIAL' VARCHAR(30) NULL,
'CONTATO' VARCHAR(25) NULL,
'PESSOA_COD_PESSOA' INT NOT NULL,
PRIMARY KEY ('CNPJ', 'PESSOA_COD_PESSOA'),
INDEX 'fk_PE_JURIDICA_PESSOA1_idx' ('PESSOA_COD_PESSOA' ASC),
CONSTRAINT 'fk_PE_JURIDICA_PESSOA1'
FOREIGN KEY ('PESSOA_COD_PESSOA')
REFERENCES 'mydb'.'PESSOA' ('COD_PESSOA')
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table 'mydb'.'PE_FISICA'
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS 'mydb'.'PE_FISICA' (
'CPF' VARCHAR(11) NOT NULL,
'RG' VARCHAR(7) NULL,
'PESSOA_COD_PESSOA' INT NOT NULL,
PRIMARY KEY ('CPF', 'PESSOA_COD_PESSOA'),
INDEX 'fk_PE_FISICA_PESSOA1_idx' ('PESSOA_COD_PESSOA' ASC),
CONSTRAINT 'fk_PE_FISICA_PESSOA1'
FOREIGN KEY ('PESSOA_COD_PESSOA')
REFERENCES 'mydb'.'PESSOA' ('COD_PESSOA')
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table 'mydb'.'EMAIL_PEFISICA'
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS 'mydb'.'EMAIL_PEFISICA' (
'EMAIL' VARCHAR(50) NOT NULL,
'PE_FISICA_CPF' VARCHAR(11) NOT NULL,
PRIMARY KEY ('EMAIL', 'PE_FISICA_CPF'),
INDEX 'fk_EMAIL_PEFISICA_PE_FISICA_idx' ('PE_FISICA_CPF' ASC),
CONSTRAINT 'fk_EMAIL_PEFISICA_PE_FISICA'
FOREIGN KEY ('PE_FISICA_CPF')
REFERENCES 'mydb'.'PE_FISICA' ('CPF')
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table 'mydb'.'PESSOA_AUT'
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS 'mydb'.'PESSOA_AUT' (
'RG' VARCHAR(7) NOT NULL,
'NOME' VARCHAR(25) NULL,
'PESSOA_COD_PESSOA' INT NOT NULL,
PRIMARY KEY ('RG', 'PESSOA_COD_PESSOA'),
INDEX 'fk_PESSOA_AUT_PESSOA1_idx' ('PESSOA_COD_PESSOA' ASC),
CONSTRAINT 'fk_PESSOA_AUT_PESSOA1'
FOREIGN KEY ('PESSOA_COD_PESSOA')
REFERENCES 'mydb'.'PESSOA' ('COD_PESSOA')
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
But it is returning error:
Executing SQL script in server
ERROR: Error 1005: Can't create table 'mydb'.'venda' (errno: 150 "Foreign key constraint is incorrectly formed")
SQL Code:
-- -----------------------------------------------------
-- Table 'mydb'.'VENDA'
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS 'mydb'.'VENDA' (
'COD_VENDA' INT NOT NULL,
'QTD_PROD' FLOAT NULL,
'DATA_VENDA' DATETIME NULL,
'DATA_PGTO' DATE NULL,
'PESSOA_COD_PESSOA' INT NOT NULL,
'PRODUTO_COD_PRODUTO' INT NOT NULL,
PRIMARY KEY ('COD_VENDA', 'PRODUTO_COD_PRODUTO', 'PESSOA_COD_PESSOA'),
INDEX 'fk_VENDA_PESSOA1_idx' ('PESSOA_COD_PESSOA' ASC),
INDEX 'fk_VENDA_PRODUTO1_idx' ('PRODUTO_COD_PRODUTO' ASC),
CONSTRAINT 'fk_VENDA_PESSOA1'
FOREIGN KEY ('PESSOA_COD_PESSOA')
REFERENCES 'mydb'.'PESSOA' ('COD_PESSOA')
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT 'fk_VENDA_PRODUTO1'
FOREIGN KEY ('PRODUTO_COD_PRODUTO')
REFERENCES 'mydb'.'PRODUTO' ('COD_PRODUTO')
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
SQL script execution finished: statements: 9 succeeded, 1 failed
Fetching back view definitions in final form.
Nothing to fetch
I tried some changes but without success, without someone knowing I thank