Al eliminar un contacto, desvincularlo de clientes y proveedores.
Los clientes están vinculados con contactos a través de las columnas idcontactofact e idcontactoenv, que son respectivamente la dirección de facturación principal y la dirección de envío principal.
No es posible añadir ahí una clave ajena porque ya hay claves ajenas de contactos a clientes y al contrario es un problema de cara a nuevas instalaciones, que al crear la tabla, añaden también todas las claves ajenas.
La solución a este problema es añadir en el delete() del modelo Contacto una consulta SQL para desvincular clientes con este contacto. Desvincular también de proveedores.