Oracle
 sql >> Database >  >> RDS >> Oracle

Progettazione di uno schema semplice per la disaggregazione della previsione della domanda

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.