Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

mysql: on delete set null

Estas en el tema de mysql: on delete set null en el foro de Bases de Datos General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 09/07/2004, 16:29
 
Fecha de Ingreso: agosto-2003
Ubicación: Piura
Mensajes: 238
Antigüedad: 20 años, 9 meses
Puntos: 0
mysql: on delete set null

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
__________________
Un hombre inteligente, caminando, llega mucho mas rápido que un torpe en coche

Última edición por pacoalonso79; 09/07/2004 a las 16:37
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:59.