Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/08/2013, 06:39
PabloManuel
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 11 meses
Puntos: 6
Pregunta Relación MySql líneas y cabeceras

Hola.

Estoy desarrollando un Ecommerce donde tengo una tabla de Artículos y relacionadas las tablas: fabricante, talla y color.

El artículo puede tener o no un fabricante talla o color. Pero en el caso de que haya algún artículos con alguno de estos datos, no debe dejar borrar el fabricante, talla o color.

Esta es la estructura de las tablas, sus claves y relaciones:

Código MySQL:
Ver original
  1. CREATE TABLE  `EC_articulos` (
  2.  `Id` INT( 9 ) NOT NULL AUTO_INCREMENT ,
  3.  `Codigo` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
  4.  `Descripcion` VARCHAR( 150 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
  5.  `Categoria` INT( 9 ) NOT NULL ,
  6.  `Fabricante` INT( 9 ) NOT NULL ,
  7.  `Talla` INT( 9 ) NOT NULL ,
  8.  `Color` INT( 9 ) NOT NULL ,
  9.  `Stock` INT( 9 ) NOT NULL ,
  10.  `Coste` DECIMAL( 9, 2 ) NOT NULL ,
  11.  `Info` LONGTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
  12. PRIMARY KEY (  `Id` )
  13. ) ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;
  14.  
  15. CREATE TABLE  `EC_fabricante` (
  16. `Nombre` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
  17. PRIMARY KEY (  `Id` )
  18. ) ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;
  19.  
  20. CREATE TABLE  `EC_talla` (
  21.  `Id` INT( 9 ) NOT NULL AUTO_INCREMENT ,
  22.  `Nombre` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
  23. PRIMARY KEY (  `Id` )
  24. ) ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;
  25.  
  26. CREATE TABLE  `EC_Color` (
  27.  `Id` INT( 9 ) NOT NULL AUTO_INCREMENT ,
  28.  `Nombre` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
  29. PRIMARY KEY (  `Id` )
  30. ) ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;
  31.  
  32. ALTER TABLE  `ec_articulos` ADD INDEX (  `Fabricante` );
  33.  
  34. ALTER TABLE  `ec_articulos` ADD INDEX (  `Talla` );
  35.  
  36. ALTER TABLE  `ec_articulos` ADD INDEX (  `Color` )
  37.  
  38. ALTER TABLE  `ec_articulos` ADD FOREIGN KEY (  `Fabricante` ) REFERENCES  `ec_fabricante` (
  39. `Id`
  40.  
  41. ALTER TABLE  `ec_articulos` ADD FOREIGN KEY (  `Talla` ) REFERENCES  `ec_talla` (
  42. `Id`
  43.  
  44. ALTER TABLE  `ec_articulos` ADD FOREIGN KEY (  `Color` ) REFERENCES  `ec_color` (
  45. `Id`
  46.  
  47. ALTER TABLE  `ec_articulos` ADD INDEX (  `Categoria` );
  48.  
  49. ALTER TABLE  `ec_articulos` ADD FOREIGN KEY (  `Categoria` ) REFERENCES  `ec_categorias` (
  50. `Id`

El campo categoría si es obligatorio para crear un artículo.
Pero si dejo en blanco el fabricante, la talla o el color me sale este error:

Microsoft OLE DB Provider for ODBC Drivers error '80004005'

[MySQL][ODBC 3.51 Driver][mysqld-5.0.45-community-nt]Cannot add or update a child row: a foreign key constraint fails (`webforeverp/ec_articulos`, CONSTRAINT `ec_articulos_ibfk_1` FOREIGN KEY (`Fabricante`) REFERENCES `ec_fabricante` (`Id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

/admin_ec_articulos.asp, line 378