sql >> Base de Datos >  >> RDS >> Oracle

Diseño de un esquema simple para la desagregación de la previsión de la demanda

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.