En uno de tus modelos planteas crear una tabla detalleVenta y enlazarla a una tabla para registrar Venta y otra tabla para registrar devolucion.
En otro modelo, planteas crear una tabla detalleVenta enlazada a una tabla Venta, la cual, a su vez se enlaza a una tabla Devolucion.
Yo te preopongo que hagas lo siguiente:
La tabla "artículo" si se antiene tal cual como la propusiste.
Aparte de la tabla articulo, solo crearas una única tabla para todas las trasacciones con los siguientes campos:
articulo, cantidad, precioVenta, nroFactura, cliente, fecha, formaPago, TipoDocumento, Identificador
Como puedes ver, los dos últimos campos "TipoDocumento" e "Identificador" son los campos nuevos que indiqué anterioemente.
De esta manera manejaras totas las transacciones e una sola tabla.
Luego para "CALCULAR" las ventas y/o cantidades solo debes hacer algo similar a esto.
Monto de Ventas del día 29/07/2014
SELECT articulo, SUM(cantidad*precioVenta*Identificador) AS MontoVenta FROM tabla WHERE fecha='2014-07-29'
Cantidad de articulos vendidos en el mes de JULIO del 2014
SELECT articulo, SUM(cantidad*Identificador) AS CantidVenta FROM tabla WHERE YEAR(fecha)='2014' AND MONTH(fecha)='07'
NOTA: Identificador representa -1 para documentos que sacan productos (facturas) y 1 para documentos que ingresan productos (devoluciones)
NOTA2: Esto adicionalmente te permite trabajar con nuevos tipos de documentos y hace un BD escalable.
Existen métodos mucho más complejos que permiten llevar el control de inventarios de existensia lógica/disponible vs existensia física que son utilizados por algunos ERP.
___________________________
Ing. Jesús Alfredo Uzcanga
Twitter: @JesusUzcanga
We learn the 20% of what we HEAR,
the 50% of what we SEE,
the 80% of what we DO and
the 95% of what we TEACH.
____________________________________________________________
https://www.linkedin.com/in/jauzcanga/