Estoy haciendo una tarea de diseño de base de datos simple como un ejercicio de capacitación en el que tengo que elaborar un diseño de esquema básico para el siguiente caso:
Tengo una jerarquía de productos padre-hijo (por ejemplo, Materia prima> Trabajo en curso> Producto final).
- Los pedidos se realizan en cada nivel.
- El número de pedidos se podrá ver en cubos semanales durante los próximos 6 meses.
- El pronóstico de demanda se puede hacer para cada nivel de producto.
- El pronóstico de demanda para cualquier semana dentro de los próximos 6 meses se puede hacer hoy.
- El pronóstico de la demanda se realiza para cubos semanales, durante los próximos 6 meses.
El pronóstico de demanda generalmente se realiza en el nivel superior de la jerarquía (materia prima o nivel de trabajo en curso). Debe desglosarse a un nivel inferior (producto final).
Hay 2 formas en que el pronóstico de la demanda puede desglosarse de un nivel superior a un nivel inferior:
- El usuario especifica la distribución porcentual para el producto final. Digamos que hay un pronóstico de 1000 para Work In Progress ... y el usuario dice que quiero un 40% para el Producto final 1 y un 60% para el Producto final 2 en el paquete 10 ... Luego, para la décima semana (de domingo a sábado) a partir de ahora, valor de pronóstico para el Producto final 1 sería 400 y para el Producto final 2 sería 600.
- El usuario dice que solo desagregue de acuerdo con los pedidos realizados para los productos finales en el Paquete 5, y los pedidos en el paquete 5 para el Producto final 1 y 2 son 200 y 800 respectivamente, luego el valor pronosticado para EP1 sería ((200/1000) * 100)% y para EP2 sería ((800/1000) * 100)% del pronóstico para 'Trabajo en progreso'.
El pronóstico se podrá ver en intervalos semanales durante los próximos 6 meses y el formato ideal debería ser:
product name | bucket number | week start date | week end date | forecast value | created_on
La tabla PRODUCT_HIERARCHY podría verse así:
id | name | parent_id
__________________________________________
1 | raw material | (null)
2 | work in progress | 1
3 | end product 1 | 2
4 | end product 2 | 2
La tabla PEDIDOS podría verse así:
id | prod_id | order_date | delivery_date | delivered_date
dónde,
prod_id
es una clave externa que hace referencia a la id
tabla PRODUCT_HIERARCHY,
¿Cómo almacenar el pronóstico? ¿Cuál sería un buen esquema básico para tal requisito?
Mi idea para seleccionar pedidos para 26 cubos semanales es:
SELECT
COUNT(*) TOTAL_ORDERS,
WIDTH_BUCKET(
delivery_date,
SYSDATE,
ADD_MONTHS(sysdate, 6),
TO_NUMBER( TO_CHAR(SYSDATE,'DD-MON-YYYY') - TO_CHAR(ADD_MONTHS(sysdate, 6),'DD-MON-YYYY') ) / 7
) BUCKET_NO
FROM
orders_table
WHERE
delivery_date BETWEEN SYSDATE AND ADD_MONTHS(sysdate, 6);
Pero esto dará cubetas semanales a partir de hoy, independientemente del día. ¿Cómo puedo convertirlos de domingo a sábado en Oracle?
Por favor, ayuda a diseñar esta estructura de base de datos.
(usará Oracle 11g)