Hola como les va?
luego de hacer un diagrama DER en Workbench, lo exporto a script y lo pego en Myphpadmin, pero me da error en una de las tablas (#1005 - No puedo crear tabla `farmasalud`.`obrasocial` (Error: 150 "Foreign key constraint is incorrectly formed") Teoricamente se refiere a que hay una foreign key mal formada, pero no encuentro el problema.
________________________________________________________________
-------------------------------------------------------------------------------------------
-- MySQL Script generated by MySQL Workbench
-- Fri Mar 2 11:27:56 2018
-- Model: New Model Version: 1.0
-- 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 farmasalud
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema farmasalud
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `farmasalud` DEFAULT CHARACTER SET utf8 ;
USE `farmasalud` ;
-- -----------------------------------------------------
-- Table `farmasalud`.`Categorías`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `farmasalud`.`Categorías` (
`CodigoCategoria` INT NOT NULL AUTO_INCREMENT,
`Categoria` VARCHAR(45) NOT NULL,
PRIMARY KEY (`CodigoCategoria`))
ENGINE = InnoDB
COMMENT = ' ';
-- -----------------------------------------------------
-- Table `farmasalud`.`Sucursal`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `farmasalud`.`Sucursal` (
`CodigoSucursal` INT NOT NULL AUTO_INCREMENT,
`Sucursal` VARCHAR(45) NOT NULL,
`Localidad` VARCHAR(45) NULL,
`Calle` VARCHAR(45) NULL,
`Numero` INT NULL,
PRIMARY KEY (`CodigoSucursal`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `farmasalud`.`Producto`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `farmasalud`.`Producto` (
`CodigoProducto` INT NOT NULL,
`Descripcion` VARCHAR(45) NOT NULL,
`Marca` VARCHAR(45) NOT NULL,
`CodigoCategoria` INT NOT NULL,
`Costo` DECIMAL(9,2) NULL,
`Precio` DECIMAL(9,2) NULL,
`CodigoSucursal` INT NOT NULL,
`Fecha de vencimiento` DATE NULL,
`Cantidad` INT NOT NULL,
`Frecuencia` INT NULL,
PRIMARY KEY (`CodigoProducto`),
INDEX `categoria_idx` (`CodigoCategoria` ASC),
INDEX `sucursal_idx` (`CodigoSucursal` ASC),
CONSTRAINT `categoria`
FOREIGN KEY (`CodigoCategoria`)
REFERENCES `farmasalud`.`Categorías` (`CodigoCategoria`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `sucursal`
FOREIGN KEY (`CodigoSucursal`)
REFERENCES `farmasalud`.`Sucursal` (`CodigoSucursal`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `farmasalud`.`Cliente`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `farmasalud`.`Cliente` (
`CodigoCliente` INT NOT NULL AUTO_INCREMENT,
`Nombre` VARCHAR(45) NULL,
`Apellido` VARCHAR(45) NULL,
`Localidad` VARCHAR(45) NULL,
`CP` INT NULL,
`Calle` VARCHAR(45) NULL,
`Numero` INT NULL,
`Email` VARCHAR(45) NULL,
`Telefono` INT NULL,
PRIMARY KEY (`CodigoCliente`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `farmasalud`.`Empleado`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `farmasalud`.`Empleado` (
`CodigoEmpleado` INT NOT NULL AUTO_INCREMENT,
`Nombre` VARCHAR(45) NULL,
`Apellido` VARCHAR(45) NULL,
`Localidad` VARCHAR(45) NULL,
`CP` INT NULL,
`Calle` VARCHAR(45) NULL,
`Numero` INT NULL,
`Email` VARCHAR(45) NULL,
`Telefono` INT NULL,
`Login` VARCHAR(45) NULL,
`Password` VARCHAR(45) NULL,
PRIMARY KEY (`CodigoEmpleado`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `farmasalud`.`Venta`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `farmasalud`.`Venta` (
`Nfactura` INT NOT NULL AUTO_INCREMENT,
`FechaVenta` DATETIME NOT NULL,
`CodigoCliente` INT NOT NULL,
`CodigoEmpleado` INT NOT NULL,
`CodigoSucursal` INT NOT NULL,
`CodigoProducto` INT NOT NULL,
`Cantidad` INT NOT NULL,
`Precio` DECIMAL(9,2) NOT NULL,
`Importe` DECIMAL(9,2) NOT NULL,
`Obrasocial` TINYINT NULL,
`Ncredencial` DOUBLE NULL,
`Ncae` DOUBLE NOT NULL,
PRIMARY KEY (`Nfactura`),
INDEX `cliente_idx` (`CodigoCliente` ASC),
INDEX `empleado_idx` (`CodigoEmpleado` ASC),
INDEX `sucursal_idx` (`CodigoSucursal` ASC),
INDEX `producto_idx` (`CodigoProducto` ASC),
CONSTRAINT `cliente_cont`
FOREIGN KEY (`CodigoCliente`)
REFERENCES `farmasalud`.`Cliente` (`CodigoCliente`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `empleado_const`
FOREIGN KEY (`CodigoEmpleado`)
REFERENCES `farmasalud`.`Empleado` (`CodigoEmpleado`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `sucursal_const`
FOREIGN KEY (`CodigoSucursal`)
REFERENCES `farmasalud`.`Sucursal` (`CodigoSucursal`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `producto_const`
FOREIGN KEY (`CodigoProducto`)
REFERENCES `farmasalud`.`Producto` (`CodigoProducto`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `farmasalud`.`Obrasocial`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `farmasalud`.`Obrasocial` (
`CodigoRegistroOS` INT NOT NULL AUTO_INCREMENT,
`Ncredencial` DOUBLE NOT NULL,
`NombreObrasocial` VARCHAR(45) NOT NULL,
`CodigoCliente` INT NULL,
`PorcenDesc` INT NULL,
`Nfactura` INT NULL,
`FechaVenta` DATETIME NULL,
INDEX `fact_idx` (`Ncredencial` ASC, `CodigoCliente` ASC, `Nfactura` ASC),
PRIMARY KEY (`CodigoRegistroOS`),
CONSTRAINT `fact_const`
FOREIGN KEY (`Ncredencial` , `CodigoCliente` , `Nfactura`)
REFERENCES `farmasalud`.`Venta` (`Ncredencial` , `CodigoCliente` , `Nfactura`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `farmasalud`.`Traza`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `farmasalud`.`Traza` (
`CodigoRegistroTR` INT NOT NULL AUTO_INCREMENT,
`Nfactura` INT NOT NULL,
`FechaVenta` DATETIME NOT NULL,
`Ntransaccion` DOUBLE NOT NULL,
PRIMARY KEY (`CodigoRegistroTR`),
INDEX `traza_idx` (`Nfactura` ASC),
CONSTRAINT `traza_const`
FOREIGN KEY (`Nfactura`)
REFERENCES `farmasalud`.`Venta` (`Nfactura`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `farmasalud`.`Afip`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `farmasalud`.`Afip` (
`CodigoRegistroAF` INT NOT NULL AUTO_INCREMENT,
`Nfactura` INT NOT NULL,
`FechaVenta` DATETIME NOT NULL,
`Ncae` DOUBLE NOT NULL,
PRIMARY KEY (`CodigoRegistroAF`),
INDEX `venta_idx` (`Nfactura` ASC),
CONSTRAINT `venta_const`
FOREIGN KEY (`Nfactura`)
REFERENCES `farmasalud`.`Venta` (`Nfactura`)
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;
---------------------------------------------------------------------------------
______________________________________________________________
Les agradezco mucho, y un saludo!!
En Venta, tu clave primaria tiene sólo un campo, 'NFactura'
Por el contrario, el REFERENCES habla de una clave compuesta, formada por 3 campos.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)