Hola a todos:
esperando que esten bien les escribo para consultarles lo siguiente, tengo una bd en mysql 4.0.18 con tres tablas: clientes, productos y facturas cuaya estructura es la siguiente
#
# Estructura de tabla para la tabla `clientes`
#
CREATE TABLE `clientes` (
`cli_id` char(2) NOT NULL default 'cl',
`nombres` varchar(50) NOT NULL default '',
PRIMARY KEY (`cli_id`)
) TYPE=InnoDB;
#
# Estructura de tabla para la tabla `factura`
#
CREATE TABLE `factura` (
`fac_num` char(7) NOT NULL default '',
`fac_fec` date default NULL,
`fac_subT` double(8,2) default NULL,
`fac_impu` double(8,2) default NULL,
`fac_total` double(8,2) default NULL,
`cli_id` char(2) default NULL,
PRIMARY KEY (`fac_num`),
INDEX (`cli_id`),
FOREIGN KEY ('cli_id') REFERENCES clientes('cli_id')
ON DELETE SET NULL ON UPDATE CASCADE
) TYPE=InnoDB;
#
# Estructura de tabla para la tabla `productos`
#
CREATE TABLE `productos` (
`prod_id` char(2) NOT NULL default '',
`prod_dsc` varchar(50) default NULL,
`prod_stock` int(3) default NULL,
`prod_precio` double(8,2) default NULL,
PRIMARY KEY (`prod_id`)
) TYPE=InnoDB;
Es asi que quiero crear una tabla que contenga los detalles de la factura y hago la siguietne consutlta:
CREATE TABLE 'detalle_fac' (
'fac_num' varchar(7),
'prod_id' char(2),
'df_cant' double(8,2),
'df_precio' double(8,2),
'df_imptos' double(8,2),
'df_subTot' double(8,2),
PRIMARY KEY ('fac_num', 'prod_id'),
INDEX ('prod_id'),
FOREIGN KEY ('prod_id') REFERENCES productos('prod_id')
ON DELETE SET NULL ON UPDATE CASCADE
) TYPE=InnoDB
Al ejecutar esta consulta evidentemente me sale un error ya que las claves primarias no se pueden convertir en nulas y "prod_id" es parte de mi clave primaria y tambien es una clave foranea la cual, quiero que cuando en la tabla padre (productos) se le elimine uno de sus items el cual esta en la tabla "detalles_fac" dicho item que figura en esta última tabla se ponga con un valor vacio (ya no nulo) intente poniendole ON DELETE SET DEFAULT pero esto no funciona, no le puedo poner ON DELETE CASCADE pues necesito aun conservar el registro de ese detalle de la factura que contenga ese producto... para mi caso la solucion (segun mi diseño) no es poner otro campo (ej "item") pues quiero que una factura tenga solo UN detalle para cada producto y basado en esto no puedo poner al campo "prod_id" como solo un INDEX o como UNIQUE pues no validaría la condicion anterior.
¿que puedo hacer???? les pido su ayuda porfavor...
Éxitos y saludos