Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Projetando esquema simples para desagregação da previsão de demanda


Seu último comentário é exatamente o que eu quis dizer. Legal ver que você conseguiu!

Desde que comecei a fazer isso, terminei um código de exemplo. A diferença com o que você estava dizendo é separar o que vai mudar do que não vai (raw_material VS raw_material_hist ) usando apenas a data da semana, que é segunda-feira e várias restrições de verificação.
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 no final, de fato, você usa uma visão para ver as coisas previstas, ou uma materializada se você tiver muitos dados. Ao usar uma visualização, você não duplica os dados, por isso é mais seguro e fácil de alterar/atualizar.

Para seus casos de uso 1 ou 2, isso não lida com o esquema do banco de dados. No final do dia ele estará apenas atualizando algum valor para a previsão, a lógica dos casos de uso 1 ou 2 poderia ir em um procedimento PL/SQL ou o que você estiver usando para a interface.

Editar:Também no seu último comentário você mencionou ter a previsão definida manualmente VS a calculada. Então eu adicionei essa coluna, mas os créditos vão para você

Edit bis:Quanto ao número do bucket, basta usar uma máscara adequada para a data, como IW ou WW . Estas duas mudanças que é a primeira semana do ano.