Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/08/2012, 04:07
harryp
 
Fecha de Ingreso: mayo-2008
Mensajes: 117
Antigüedad: 16 años, 6 meses
Puntos: 8
Foreign key con posible valor nulo

Buenos dias; tengo en mente hacer un catalogo de productos,
Este catalogo consta de familia, grupo, subgrupo y producto...

La idea es poder poner en la misma tabla los grupos y los subgrupos, por que los subgrupos van a ser lo mismo que los grupos, oseaser que los productos de los subgrupos, también son productos de los grupos...

Un ejemplo mas ilustrativo...

-bicicletas (familia)
+carretera (grupo)
.bici1 (prod)
.bici2 (prod)
+montaña (grupo)
.bici3 (prod)
.bici4 (prod)

-complementos (familia)
+mallots (grupo)
+nutrición (grupo)
#barritas energéticas (subgrupo)
.barrita1 (prod)
.barrita2 (prod)
#bebidas isotónicas (subgrupo)
.isotonica1 (prod)
.isotonica2 (prod)


Actualmente, el planteamiento que tengo de la tabla grupos es este:

Código:
CREATE TABLE  `grupos` (
  `id_grupo` int(10) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(45) NOT NULL,
  `referencia_id_gupo` int(10) unsigned DEFAULT NULL,
  `familia` integer NOT NULL,
  PRIMARY KEY (`id_grupo`),
CONSTRAINT `FK_grupos_familias` FOREIGN KEY (`familia`) REFERENCES `familias` (`id_familia`),
) ENGINE=InnoDB
Y bueno así aparentemente funciona bien...
yo ahora puedo guardar :
Código:
Insert into grupos (nombre,referencia,familia) values (nutrición,null,1);
Insert into grupos (nombre,referencia,familia) values (barritasenergeticas,id_nutricion,1);
De este modo las tengo referenciadas,con el consiguiente peligro de que se puede guardar un subgrupo con un id_grupo inexistente.
me gustaría hacerlo de una forma mas controlada... referencia_id_grupo tendría que ser foreign key sobre id_grupo.... pero si hago esto no voy a poder poner "grupos", con referencia_id_grupo= null, por que va a necesitar un id_grupo ...

Y la pregunta es... seria conveniente, crear una tabla para los subgrupos y otra para los grupos? o hay alguna forma de hacer una especie de foreign key con posible valor null?

Gracias por el interés
Un saludo