Ver Mensaje Individual
  #5 (permalink)  
Antiguo 05/02/2013, 14:29
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: llaves primarias y foreaneas

Andres_15_
veo que sigues con el tema que trataste en otro post. No has querido seguir el consejo de calcular el total que queda de un contrato y te empeñas en restar y usar para ello una tabla en la que almacenas varios datos, el idcontrato, el valor contrato, e imagino que el idfactura de la última factura cuyo valor desquitas. Leo te sugirió con buen criterio el empleo de trigger para tras insertar una factura actualizar esa tabla de totales, restando el valor.
Mira aquí:
http://dev.mysql.com/doc/refman/5.0/en/triggers.html
En ese caso, podrías al actualizar restar el total y guardar el idfactura de la última factura, y no serían necesarias las restricciones. Al fin y al cabo esta tabla solo te sirve para obtener el total y mantenerlo almacenado. No hay necesidad de relacionar con las otras dos tablas y mantener esas restricciones.
Sigo pensando que no es necesario nada de esto, pues tú cuando quieras saber el total, tendrás que lanzar una consulta a una tabla con un solo registro, porque no creo que quieras guardar un registro con el histórico de la resta de cada factura sobre el total, porque podría llevarte a confusión al tener varios registros para un mismo contrato. Todo esto lo podrías obtener como te recomendé en el otro post con una simple consulta de agrupado, sin usar ninguna tabla más, sin añadir trigger alguno, sin almacenar datos innecesarios, y sin tener que preocuparte de cuál fue la última factura que entró, etc. Esto es lo que pienso, pero si quieres probar los triggers, adelante. Yo quitaría las restricciones que no tendrían a mi juicio casi ningún sentido, si bien creo que en el caso del trigger quizás no te daría el error pues primero sería la inserción en factura y luego en esta tabla de totales.