Tu último comentario es exactamente lo que quise decir. ¡Genial ver que lo tienes!
Como había comenzado a hacerlo, terminé un código de ejemplo. La diferencia con lo que decías es separar lo que cambiará de lo que no (raw_material
VS raw_material_hist
) usando solo la fecha de la semana, que es lunes y varias restricciones de verificación.
CREATE TABLE raw_material
(
material_id NUMBER PRIMARY KEY,
material_blabla VARCHAR2(20)
);
CREATE TABLE wip
(
wip_id NUMBER PRIMARY KEY,
parent_raw NUMBER REFERENCES raw_material(material_id),
wip_desc VARCHAR2(20)
);
CREATE TABLE end_product
(
end_product_id NUMBER PRIMARY KEY,
parent_wip NUMBER REFERENCES wip(wip_id),
description VARCHAR2(20)
);
CREATE TABLE rm_histo
(
material_id NUMBER REFERENCES raw_material(material_id),
week_start DATE CHECK (To_char(week_start, 'D')=1),
forecast NUMBER(8) CHECK (forecast >0),
CONSTRAINT pk_rm_histo PRIMARY KEY (material_id, week_start)
);
CREATE TABLE wip_histo
(
wip_id NUMBER REFERENCES wip(wip_id),
week_start DATE CHECK(To_char(week_start, 'D')=1),
wip_user_forecast NUMBER(8) CHECK (wip_user_forecast>0),
CONSTRAINT pk_wip_histo PRIMARY KEY (wip_id, week_start)
);
CREATE TABLE end_prod_histo
(
end_product_id NUMBER REFERENCES end_product(end_product_id),
week_start DATE CHECK(To_char(week_start, 'D')=1),
end_prod_user_forecast NUMBER(8) CHECK (end_prod_user_forecast >0)
);
Y al final, de hecho, usas una vista para ver las cosas pronosticadas, o materializadas si tienes toneladas de datos. Al usar una vista, no duplica los datos, por lo que es más seguro y fácil de cambiar/actualizar.
Para sus casos de uso 1 o 2, esto no trata con el esquema de la base de datos. Al final del día, solo actualizará algún valor para el pronóstico, la lógica de los casos de uso 1 o 2 podría ir en un procedimiento PL/SQL o lo que sea que esté usando para la interfaz.
Editar:también en su último comentario mencionó que el pronóstico se estableció manualmente VS el calculado. Así que agregué esa columna, pero los créditos son para ti
Editar bis:en cuanto al número de depósito, solo use una máscara adecuada para la fecha, como IW
o WW
. Estos dos cambios que es la primera semana del año.