Il tuo ultimo commento è esattamente quello che intendevo. Bello vedere che hai capito!
Da quando avevo iniziato a farlo, ho finito un codice di esempio. La differenza con ciò che stavi dicendo è separare ciò che cambierà da ciò che non lo farà (raw_material
VS raw_material_hist
) utilizzando solo la data della settimana, che è lunedì e vari vincoli di controllo.
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)
);
E alla fine, in effetti, usi una vista per vedere le cose previste, o una materializzata se hai tonnellate di dati. Utilizzando una vista, non duplichi i dati, quindi è più sicuro e facile cambiarli/aggiornarli.
Per i casi d'uso 1 o 2, questo non riguarda lo schema del database. Alla fine della giornata sarà solo aggiornare un valore per la previsione, la logica dei casi d'uso 1 o 2 potrebbe andare in una procedura PL/SQL o qualunque cosa tu stia usando per l'interfaccia.
Modifica:anche dal tuo ultimo commento stavi menzionando l'impostazione manuale della previsione rispetto a quella calcolata. Quindi ho aggiunto una colonna del genere, ma i crediti vanno a te
Modifica bis:per quanto riguarda il numero del bucket, usa una maschera adeguata per la data, come IW
o WW
. Questi due cambiamenti che è la prima settimana dell'anno.