TransWikia.com

Fallo de índice en una entidad débil MySQL

Stack Overflow en español Asked by crmiguez on February 21, 2021

Estoy a crear una entidad débil MySQL llamada ubicaciones_plantas, que depende de otra llamada departamentos. La en cuestión tiene esta estructura en SQL:

- -----------------------------------------------------
-- Table `bd`.`ubicaciones_plantas`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `bd`.`ubicaciones_plantas` ;

CREATE TABLE IF NOT EXISTS `inventario_aixina`.`ubicaciones_plantas` (
  `iddepartamento` VARCHAR(50) NOT NULL,
  `idubicacion` INT NOT NULL,
  `abreviacion_ubicacion` VARCHAR(50) NOT NULL,
  `descripcion_ubicacion` VARCHAR(100) NULL,
  PRIMARY KEY (`iddepartamento`, `idubicacion`)
  )
ENGINE = InnoDB;

ALTER TABLE `bd`.`ubicaciones_plantas`
    ADD CONSTRAINT `fk_ubicacion_departamento`
    FOREIGN KEY (`iddepartamento`)
    REFERENCES `bd`.`ubicaciones_plantas` (`iddepartamento`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;

La tabla de departamentos, de esta otra forma:

-- -----------------------------------------------------
-- Table `bd`.`departamentos`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `bd`.`departamentos` ;

CREATE TABLE IF NOT EXISTS `bd`.`departamentos` (
  `iddepartamentos` VARCHAR(50) NOT NULL,
  `nombre_departamento` VARCHAR(100) NULL,
  `sede_departamento` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`iddepartamentos`),
  CONSTRAINT `fk_departamento_sede`
    FOREIGN KEY (`sede_departamento`)
    REFERENCES `bd`.`sedes` (`idsedes`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

CREATE INDEX `fk_departamento_sede_idx` ON `bd`.`departamentos` (`sede_departamento` ASC) VISIBLE;

Al arrancar en MySQL Workbench, salta este error de indexación:

Falta Constraint e indexación

Toda SQL la he generado desde el EER Model, y al tener el fallo anterior, la constraint la puse a mano y vuelve al mismo punto.

Qué tengo que modificar en la entidad débil para que pueda continuar creando el resto de tablas?

Muchas gracias por anticipado! 🙂

One Answer

Recuerda que una clave ajena debe estar referenciada a un campo, al menos, indexado. Añade este índice y ya no te dará el error que comentas:

ALTER TABLE ubicaciones_plantas ADD INDEX(iddepartamento);

Correct answer by David JP on February 21, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP