La estructura podria ser la siguiente:
TablaProductos
id, descripcion,...
TablaCompras
id,idProducto,Cantidad,....
TablaVentas
id,idProducto,Cantidad,...
VistaStock
idProducto,Producto,stock
Código:
CREATE VIEW VistaStock
SELECT TablaProductos.id as idProducto,
TablaProductos.descripcion as Producto,
SUM(TablaCompras.Cantidad)-SUM(TablaVentas.Cantidad) as Stock
FROM TablaProductos INNER JOIN
(TablaCompras INNER JOIN TablaVentas
ON TablaCompras.idProducto=TablaVentas.idProducto)
ON TablaProductos.id=TablaCompras.idProducto)
GROUP BY TablaProductos.id, TablaProductos.descripcion;
Esto ademas te permitiria guardar mas info, como precio de compra, fecha de compra, proveedor, con lo que aplicando tecnicas contables (FIFO, LIFO, Precio medio...) podrias determinar el precio de coste de la venta, y en ventas precio de venta y fecha....
Siempre puedes hacer un proceso anual que ponga un primer registro en Compras con el stock inicial del año y asi trabajar con las compras y ventas del año, guardando las anteriores en tablas de historico....
Creo que me he pasado lanzando ideas....
Quim