Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: kinos en 26 Julio 2010, 14:36 pm



Título: no me borra la tabla haciendo delete on cascade tabla n:m
Publicado por: kinos en 26 Julio 2010, 14:36 pm
Hola buenas:

Tengo dos tablas llamadas "empresas" y otra "clientes". Cuando se produce una venta se introduce una fila en la tabla "ventas" que tiene como índices "idempresas" e "idclientes".
El problema es que cuando quiero borrar una empresa no me elimina las filas de la tabla ventas.
Qué estoy haciendo mal? no sé si estoy poniendo bien delete on cascade... o que ocurre.

Aquí esta el código:

Código
  1. -- -----------------------------------------------------
  2. -- Table `bdd`.`empresas`
  3. -- -----------------------------------------------------
  4. DROP TABLE IF EXISTS `bdd`.`empresas` ;
  5.  
  6. CREATE  TABLE IF NOT EXISTS `bdd`.`empresas` (
  7.  `idempresas` INT NOT NULL AUTO_INCREMENT ,
  8.  PRIMARY KEY (`idempresas`) ,
  9. ENGINE = MyISAM
  10. DEFAULT CHARACTER SET = utf8
  11. COLLATE = utf8_unicode_ci;
  12.  
  13. -- -----------------------------------------------------
  14. -- Table `bdd`.`clientes`
  15. -- -----------------------------------------------------
  16. DROP TABLE IF EXISTS `bdd`.`clientes` ;
  17.  
  18. CREATE  TABLE IF NOT EXISTS `bdd`.`clientes` (
  19.  `idclientes` INT NOT NULL AUTO_INCREMENT ,
  20.  PRIMARY KEY (`idclientes`) ,
  21. ENGINE = MyISAM
  22. DEFAULT CHARACTER SET = utf8
  23. COLLATE = utf8_unicode_ci;
  24.  
  25. -- -----------------------------------------------------
  26. -- Table `bdd`.`ventas`
  27. -- -----------------------------------------------------
  28. DROP TABLE IF EXISTS `bdd`.`ventas` ;
  29.  
  30. CREATE  TABLE IF NOT EXISTS `bdd`.`ventas` (
  31.  `empresas_idempresas` INT NOT NULL ,
  32.  `clientes_idclientes` INT NOT NULL ,
  33.  `venta` INT NOT NULL ,
  34.  PRIMARY KEY (`empresas_idempresas`, `clientes_idclientes`) ,
  35.  CONSTRAINT `fk_empresas_has_ventas`
  36.    FOREIGN KEY (`empresas_idempresas` )
  37.    REFERENCES `bdd`.`empresas` (`idempresas` )
  38.    ON DELETE CASCADE
  39.    ON UPDATE NO ACTION,
  40.  CONSTRAINT `fk_empresas_has_ventas2`
  41.    FOREIGN KEY (`clientes_idclientes` )
  42.    REFERENCES `bdd`.`clientes` (`idclientes` )
  43.    ON DELETE NO ACTION
  44.    ON UPDATE NO ACTION)
  45. ENGINE = MyISAM
  46. DEFAULT CHARACTER SET = utf8
  47. COLLATE = utf8_unicode_ci;
  48.  
  49. CREATE INDEX `fk_empresas_has_ventas` ON `bdd`.`ventas` (`empresas_idempresas` ASC) ;
  50.  
  51. CREATE INDEX `fk_empresas_has_ventas2` ON `bdd`.`ventas` (`clientes_idclientes` ASC) ;
  52.  


Título: Re: no me borra la tabla haciendo delete on cascade tabla n:m
Publicado por: Ari Slash en 28 Julio 2010, 04:04 am
no te los borra pos ser n:m

la primary key de esa tabla se compone de las dos primary key de clientes y empresas
debes de eliminar tambien la fk que viene desde clientes para que desaparezca el registro

pregunta: por que quieres borrar la venta al eliminar la empresa?? no deberia de ser asi


saludos




Título: Re: no me borra la tabla haciendo delete on cascade tabla n:m
Publicado por: kinos en 31 Julio 2010, 13:05 pm
Gracias.

Citar
pregunta: por que quieres borrar la venta al eliminar la empresa?? no debería de ser asi

Perdón por el ejemplo, no le presté atención a la lógica  :-\. Simplemente quería saber el porqué ocurría esto.