Pregunta

Tengo un problema, lo que espero es muy común, pero no estoy seguro de qué buscar, ya que se puede explicar de muchas maneras diferentes.

Estoy diseñando una estructura de base de datos para administrar facturas, productos, precios, monedas, etc.

Soy capaz de administrar los precios y los nombres de los productos (se espera que estos cambien de vez en cuando).

En las facturas, los productos se agregan por cantidad, con descuento, IVA, unicornios, ardillas, etc., y luego se calcula el total de la factura.

Ahora, cuando se actualiza un precio en la tabla de productos, la factura no se supone que cambie. Necesita permanecer igual para siempre.

Al pensar en esto, a mí parece que la lista de productos es una lista de objetos "Tipo de clase", que describen cómo se ve un producto. O podríamos llamarlo una "plantilla" o "base" o "abstracta", dependiendo de qué abstracción pensamos.

Los productos que se agregan a la factura son "instancias", "implementaciones", "niños", "registros versionados" o lo que les llamamos.

¿Cómo estructudaría esto en la base de datos? Podría dividirlos en dos mesas diferentes "ResumenProduct" y "producto", pero tendrían más (posiblemente todas) de sus columnas en común. En ese sentido, parece apropiado mantenerlos en la misma mesa. Pero entonces necesitaría una columna adicional para significar si es "clase" o "instancia". Eso también está bien. Esto también podría ser una tecla extranjera a la clase que fue creada a partir de (o nula para las clases).

He probado diferentes enfoques, pero todos parece tener advertencias molestas.

¿Es este un patrón conocido? ¿Cómo se llama? ¿Hay mejores prácticas para resolver este problema?

¿Fue útil?

Solución

Es un patrón bien conocido.Si desea una extensa literatura sobre este tema, busque en "Base de datos temporal".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top