01/08/2004, 14:36
|
| | | Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 5 meses Puntos: 2 | |
Realmente lo que te propongo no te complica más tu ER: de tres tablas pasas a tres tablas, pero estructuradas de otra manera.
Por otro lado, si quieres mantener la estructura que tienes, tendrás que comprobar la existencia en una de las tablas antes de insertarlo para asegurarte que se cumple la norma. Y lo mismo para borrar un registro de clientes o proveedores, pues tendrás que comprobar que no exista ningún registro en usa antes de borrarlo.
Mi propuesta sería la siguiente:
CREATE TABLE `usa` (
`cod` varchar(15) NOT NULL default '',
`cod_pago` varchar(12) NOT NULL default '',
PRIMARY KEY (`cod`,`cod_pago`),
KEY `cod_pago` (`cod_pago`),
CONSTRAINT `usa_usuarios` FOREIGN KEY (`cod`) REFERENCES `usuarios` (`cod_prov`) 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,
) TYPE=InnoDB;
CREATE TABLE `usuarios` (
`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 '',
tipo char(1) not null,
PRIMARY KEY (`cod_prov`)
) TYPE=InnoDB;
CREATE TABLE `cliente` (
`cod_prov` varchar(9) NOT NULL default '',
`razon_social` varchar(30) NOT NULL default '',
`cod_contable` int(6) NOT NULL default '0',
`riesgo_max` tinyint(4) default NULL,
`riesgo_act` tinyint(4) default NULL,
`tarifa` varchar(9) NOT NULL default '',
`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,
`asegurado` char(2) default NULL,
`retencion` tinyint(4) default NULL,
PRIMARY KEY (`cod_prov`)
CONSTRAINT `cli_usuarios` FOREIGN KEY (`cod_prov`) REFERENCES `usuarios` (`cod_prov`) ON DELETE CASCADE ON UPDATE CASCADE
) TYPE=InnoDB;
donde usuarios.tipo sería el campo que indica que tipo de usuario es: provedor o cliente.
Por otro lado: no uses nunca el DNI como clave única, es falso que el DNI sea único, no son muchos los casos pero hay DNI's duplicados.
Un saludo. |