Mysql, mejorando la relación de tablas

Tengo una base con tablas "clientes" "equipos" "reportes" "movimientos" el objetivo es tener controlado los equipos que se le prestan a los clientes, hacer reportes y en su debido caso cambiar los equipos o intercambiarlos, moverlos de lugar con otro cliente, darlos de baja, pero al hacer esta solicitud, todos los reportes, movimientos o intercambios deben seguir con su propio numero SIN BORRARLOS. Como lo tengo ahorita, si yo quiero mover un equipo o darlo de baja y este ya tiene reportes, la base no me deja darlos de baja, porque para ello, debería borrar primero los reportes existentes y despues dar de baja el equipo y necesito conservar los reportes y movimientos, para tener un historial. La estructura de la base va asi

CLIENTES

`Id_clientes` varchar(5) NOT NULL,
`nombre_unidad` varchar(100) DEFAULT NULL,
`telefono` varchar(10) DEFAULT NULL,
`responsable` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id_clientes`),
EQUIPOS
`id_serie` varchar(50) NOT NULL,
`rlid_clientes` varchar(5) NOT NULL,
`modelo` varchar(100) DEFAULT NULL,
`marca` varchar(100) DEFAULT NULL,
`placa` varchar(45) DEFAULT NULL,
`paquete` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id_serie`),
KEY `fk_equipos_clientes1_idx` (`rlid_clientes`) USING BTREE,
CONSTRAINT `equipos_ibfk_1` FOREIGN KEY (`rlid_clientes`) REFERENCES `clientes` (`id_clientes`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

REPORTES
`id_reporte` varchar(12) NOT NULL,
`rlid_clientes` varchar(5) DEFAULT NULL,
`rlid_serie` varchar(50) DEFAULT NULL,
`fecha` date DEFAULT NULL,
`servicio_otorgado` varchar(500) DEFAULT NULL,
`falla_reportada` varchar(500) DEFAULT NULL,
`observaciones` varchar(500) DEFAULT NULL,
`reporte_cerrado` bit(1) DEFAULT NULL,
PRIMARY KEY (`id_reporte`),
KEY `xreporte_idx` (`rlid_clientes`) USING BTREE,
KEY `xserie_idx` (`rlid_serie`) USING BTREE,
KEY `xservicio_idx` (`rlid_servicios`) USING BTREE,
CONSTRAINT `reportes_ibfk_1` FOREIGN KEY (`rlid_clientes`) REFERENCES `clientes` (`id_clientes`) ON DELETE NO ACTION ON UPDATE CASCADE,
CONSTRAINT `reportes_ibfk_2` FOREIGN KEY (`rlid_serie`) REFERENCES `equipos` (`id_serie`) ON DELETE NO ACTION ON UPDATE NO ACTION,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

MOVIMIENTOS

`idmovimientos` int(11) NOT NULL AUTO_INCREMENT,
`mov_fecha` datetime NOT NULL,
`rlid_serie` varchar(50) DEFAULT NULL,
`rlid_clientes` varchar(5) DEFAULT NULL,
PRIMARY KEY (`idmovimientos`),
KEY `xserie_idx` (`rlid_serie`) USING BTREE,
KEY `xclientes_idx` (`rlid_clientes`) USING BTREE,
CONSTRAINT `movimientos_ibfk_1` FOREIGN KEY (`rlid_clientes`) REFERENCES `clientes` (`id_clientes`) ON DELETE NO ACTION ON UPDATE CASCADE,
CONSTRAINT `movimientos_ibfk_2` FOREIGN KEY (`rlid_serie`) REFERENCES `equipos` (`id_serie`) ON DELETE NO ACTION ON UPDATE CASCADE,
CONSTRAINT `movimientos_ibfk_3` FOREIGN KEY (`rlid_tipo`) REFERENCES `tipomov` (`id_tipo`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Que esta mal o que me hace falta para poder hacer reportes y movimientos y cuando quiera dar de baja un equipo o moverlo, no tenga que borrar todos sus datos existentes en las otras tablas.

2 Respuestas

Respuesta
1

Crea una tabla bitácora para el seguimiento del equipo donde puedes colocar el id, fecha etc, y en la tabla equipos le colocaría una columna estado(baja, asignado etc)

Respuesta
1

Si necesitas que los reportes sigan, es decir, si no los puedes borrar, lo que yo haría seria poner un campo "estado" en los equipos, que puede ser, "activo", "baja", o puedes poner más si los necesitas.

Con esto, ya sabes que equipos están dados de baja, incluso puedes consultar sus reportes, etc. y siempre que necesites mostrar solo los activos, pues te sera muy sencillo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas