vale, ya veo que por donde yo iba no estaba bien, pero aún así tengo algunas cosas que objetar.
El punto 1 dice esto
Cita: 1.- El monto total de cada una de las compras y esto se haría a través del precio * cantidad de cada uno de los artículos de la compra; osea la relación es: una compra tiene muchos artículos (una relación de uno a muchos) y de los artículos es de donde obtengo el monto total de la comp
El monto total de la compra efectivamente es la suma del monto de compra de cada uno de los artículos, pero el error es que esa cantidad es un dato de la factura. Comprendo que no te interesa una gestión de facturas propiamente dicha, pero la tabla donde almacenas eso es una tabla de facturas en la que además de campos que no te interesan como cliente, fecha y número de factura debería estar el monto total de la factura y la forma de pago.
Y si consideramos que es primera tabla es de facturas, la segunda es el detalle de facturas y aquí lo que tienes es una relación de los artículos que están incluidos en esa factura con sus precios correspondientes y cualquier otro dato que necesites.
Si además quieres que se hagan varios pagos por factura (por ejemplo mensualmente) entonces necesitas también una tabla de pagos. Mas o menos sería esto
tabla facturas
id (key principal), ImporteTotal, FormaDePago,ImportePagado, ImportePendiente... [etc]
donde etc son campos que en un caso real deberían estar como numero de factura, fecha, id_cliente, etc pero que ahora no te interesan.
Tabla detalle
id (key principal), idArticulo,cantidad,precio,Importe,IdFactura
El idfactura sería la FK del id de facturas y lo utilizarías para relacionar facturas con detalle uno a muchos. Importe es cantidad * precio
tabla pagos
id (key principal), fecha, importe,IdFactura
El IdFActura sería la FK del id de facturas y lo utilizarías para relacionar facturas con pagos uno a muchos.
De esta forma en facturas, Importe es la suma de los (muchos) importes de detalle y pagado es la suma de los (muchos) importes de pagos. Lo que le queda por pagar sería ImporteTotal-ImportePagado.
Creo que esto se aproxima mas a lo que buscas.
La forma de calcular el ImporteTotal, lo pagado y lo pendiente sería
Código:
update facturas F
set Importetotal=( select (sum(Importe) as I from Detalle
where IdFactura=F.id),
set ImportePagado=( select (sum(Importe) as J from Pagos
where IdFactura=F.id),
set ImportePendiente=ImporteTotal-ImportePagado
where factura='xxx'
donde xxx sería la factura que quieres calcular su importe y lo pagado.
Para sacar la factura con sus importes y articulos
[CODE]select F.x,D.* from factura F
inner join Detalle D on D.IdFactura=F.Id
where Factura='xxx'{/CODE]
Y para sacar los pagos de la factura sería así
[CODE]select F.*,P.* from factura F
inner join Pagos P on P.IdFactura=F.Id
where Factura='xxx'{/CODE]