Depende de lo que va a hacer con los datos.
Para muchos propósitos, vale la pena almacenar, en cada artículo, el precio unitario de ese artículo, la cantidad comprada y el precio extendido. El precio extendido es la cantidad multiplicada por el precio unitario. ¿Esto es redundante? bueno, sí. ¿Viola alguna forma normal? Bueno, sí. Pero funciona bastante bien.
¿Por qué almacenar el precio en la fila de artículos (registro) y no solo confiar en los mismos datos de precios almacenados en la tabla de productos maestros? Porque si cambia el precio después de esta venta, no desea cambiar el precio en que incurrió este cliente en esta compra. ¿Por qué almacenar el precio extendido, ya que esto puede ser recalculado sobre la marcha? Porque hace que sea un paso más simple agregar (suma o promedio) a un conjunto de elementos más adelante.
Si almacena el precio extendido, puede usar esos puntos y hacer clic, profundizar en las herramientas de análisis (ver OLAP) para un análisis posterior, sin más programación. Si cuenta con volver a calcular el precio extendido cuando lo necesite, puede descubrir que la herramienta de desglose no es lo suficientemente inteligente como para multiplicar por usted.
"elementos" normalmente serán elementos secundarios de alguna unidad de trabajo más grande. En un sistema de facturación, un artículo es parte de una factura. En un sistema de contabilidad general, un artículo es parte de una transacción. Los elementos no están equilibrados, pero la transacción sí lo está. En muchos sistemas de comercio actualmente, la función de facturación y la función de contabilidad se eliminan de la misma base de datos, pero eso va más allá de su pregunta.
Normalmente, trato de mantener mis datos normalizados. Este es un lugar donde muchos expertos se desvían intencionalmente de los requisitos de la normalización pura.
"Mejor"? ¿Qué significa "Mejor" en este contexto? Hay compensaciones específicas. ¿Qué es más importante para ti? –