Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/08/2004, 04:49
aviana
 
Fecha de Ingreso: enero-2002
Ubicación: Graná
Mensajes: 646
Antigüedad: 22 años, 4 meses
Puntos: 0
claves externas en MySQL

Hola, en MySQL tengo una tabla "usa" que se relaciona con otras 3, "proveedor", "cliente" y "forma de pago". Necesito que el campo "cod" de la tabla "usa" sea o un código de proveedor o uno de cliente, por lo que pongo una restricción de que sea clave externa al campo cod de proveedor y otra de que sea clave externa al campo dni de cliente, pero al meter datos válidos de un cliente o de un proveedor, me da error. ¿Qué falla? El código es:

CREATE TABLE `usa` (
`cod` varchar(9) NOT NULL default '',
`cod_pago` varchar(12) NOT NULL default '',
PRIMARY KEY (`cod`,`cod_pago`),
KEY `cod_pago` (`cod_pago`),
CONSTRAINT `usa_cliente` FOREIGN KEY (`cod`) REFERENCES `cliente` (`dni`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `usa_forma_pago` FOREIGN KEY (`cod_pago`) REFERENCES `forma_pago` (`cod_pago`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `usa_proveedor` FOREIGN KEY (`cod`) REFERENCES `proveedor` (`cod_prov`) ON DELETE CASCADE ON UPDATE CASCADE
) TYPE=InnoDB;


CREATE TABLE `proveedor` (
`cod_prov` varchar(15) NOT NULL default '',
`dni` varchar(50) NOT NULL default '',
`nombre` varchar(30) NOT NULL default '',
`direccion` varchar(30) NOT NULL default '',
`localidad` varchar(20) NOT NULL default '',
`provincia` varchar(20) NOT NULL default '',
`telefono` varchar(9) NOT NULL default '',
`fecha_nac` date NOT NULL default '0000-00-00',
`sexo` char(1) NOT NULL default '',
PRIMARY KEY (`cod_prov`)
) TYPE=InnoDB;

CREATE TABLE `cliente` (
`dni` varchar(9) NOT NULL default '',
`direccion` varchar(30) NOT NULL default '',
`razon_social` varchar(30) NOT NULL default '',
`cod_contable` int(6) NOT NULL default '0',
`provincia` varchar(20) NOT NULL default '',
`riesgo_max` tinyint(4) default NULL,
`riesgo_act` tinyint(4) default NULL,
`tarifa` varchar(9) NOT NULL default '',
`sexo` char(1) default NULL,
`devoluciones` tinyint(4) default NULL,
`movil` varchar(9) default NULL,
`cobros_no_vencidos` tinyint(4) default NULL,
`pais` varchar(15) default NULL,
`recargo` char(2) default NULL,
`cod_postal` smallint(6) default NULL,
`observaciones` varchar(100) default NULL,
`acumulados` smallint(6) default NULL,
`alta` date default NULL,
`correoe` varchar(30) default NULL,
`actividad` varchar(30) default NULL,
`fax` varchar(9) default NULL,
`nacimiento` date default NULL,
`telefono` varchar(9) default NULL,
`localidad` varchar(30) default NULL,
`asegurado` char(2) default NULL,
`retencion` tinyint(4) default NULL,
PRIMARY KEY (`dni`)
) TYPE=InnoDB;

CREATE TABLE `forma_pago` (
`cod_pago` varchar(12) NOT NULL default '',
`forma_pago` varchar(20) default NULL,
`descripcion` varchar(50) default NULL,
PRIMARY KEY (`cod_pago`)
) TYPE=InnoDB;