Hola Integral, en mi caso tengo una tabla catalogo donde esta todas las definiciones de todos los productos con sus características y demás datos necesarios, una tabla de maestro donde se registran los productos que se mueven o tiene un almacén, ya que puede haber muchos almacenes y no todos tener los mismos productos, en esta tabla ademas existe un campo almacén para diferenciar un almacén del otro, así con este listado se que productos maneja cada almacén, además de manejar un campo de referencia rápida del stock en ese momento por cada almacén, la cual se actualiza cada que se que hace una operación de entrada/salida.
Ahora para registrar los movimientos tengo una tabla kardex donde almaceno todas las operaciones de entrada y salida de los productos los cuales esta definidos en el catálogo, en mi caso tengo un campo para las entradas y otro para la salidas.
Una cosa importante, en mi caso no trabajo con notación decimal para el caso de las fracciones, ya que esta me limita a trabajar todos los datos en base a 10, ya sean docenas, pares, cientos y cualquier otra medida con avances o incrementos cada 10, en mi caso lo trabajo unidades en un campo y fracciones en otro, así puedo manejar cualquier medida, un ejemplo en notación decimal
Presentacion Entero.Decimal
1 docena 1.0
1/2 docena 0.5
1/4 docena 0.25
1 Hora 1.0
1/2 hora 0.5
1/4 hora 0.25
En el caso de manejar las fracciones en un campo separado y no en decimal si no como incremento de fracciones en el caso de la docena en base 12 y para la hora en base 60
Presentacion Entero.Decimal
1 docena 1.0
1/2 docena 0.6
1/4 docena 0.3
1 Hora 1.0
1/2 hora 0.30
1/4 hora 0.15
Para el primer caso el sistema cada 12 fracciones incrementa o decrementa una unidad, y en el caso de la hora cada 60 fracciones, de esta manera se muestra la información tal como es en la vida real.
Lo que si conlleva hacer unos pasos más para realizar los cálculos correctos del stock pero nada complicado, lo que si hay que indicar en el catálogo de productos la cantidad de fracciones que manejará el producto para poder realizar su cálculo.
Bueno para el tema de tablas de ventas, compra, producción o movimientos de almacén se trabaja con tablas cabecera-detalle, puedes optar por una sola tabla para todas esas operaciones, o separado para cada una, en mi caso son tablas separadas ya que la cabecera de cada una tiene información diferente.
Como te comente en tabla de maestro manejo unos campos que mantiene una referencia del stock actual, estos campos se actualizan cada vez que se hace una operación o movimiento en el kardex, para eso tengo un procedimiento que realiza una sumatoria de los movimientos en el kardex del producto en cuestión del cual obtengo el stock y este valor es actualizado en dichos campos, en un motor de bd como sqlserver u otro no notaras el proceso en cuestión, pero si es en una dbf con multiples usuarios accediendo la cosa cambia, de esta manera siempre tengo el stock disponible y actualizado.
En resumen:
Tablas: catalogo, maestro, kardex
Saludos