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

Design af simpelt skema til disaggregering af efterspørgselsprognose

Din sidste kommentar er præcis hvad jeg mente. Fedt at se, at du fik det!

Siden jeg var begyndt at gøre det, færdiggjorde jeg en eksempelkode. Forskellen med det, du sagde, er at adskille det, der vil ændre sig, fra det, der ikke vil (raw_material VS raw_material_hist ) bruger kun dato for ugen, som er mandag , og forskellige kontrolbegrænsninger.

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) 
  ); 

Og til sidst bruger du faktisk en visning til at se de forudsagte ting, eller en materialiseret, hvis du har tonsvis af data. Ved at bruge en visning dublerer du ikke dataene, så det er sikrere og nemmere at ændre/opdatere.

For dine use cases 1 eller 2 omhandler dette ikke databaseskemaet. I slutningen af ​​dagen vil det bare være at opdatere en eller anden værdi for prognosen, logikken i use case 1 eller 2 kunne gå i en PL/SQL procedure eller hvad du nu bruger til grænsefladen.

Rediger:Også fra din sidste kommentar nævnte du at have den prognose manuelt indstillet VS den beregnede. Så jeg tilføjede sådan en kolonne, men kreditten går til dig

Rediger bis:Med hensyn til spandnummeret, brug bare en ordentlig maske til datoen, som f.eks. IW eller WW . Disse to ændringer, som er den første uge af året.



  1. pip-installation MySQL-python fejler på ubuntu 14.04, fejl:kommando 'x86_64-linux-gnu-gcc' mislykkedes med afslutningsstatus 1

  2. En introduktion til TimescaleDB

  3. Tjek for referencemæssig integritetsbrud

  4. Hvordan finder jeg en standardbegrænsning ved hjælp af INFORMATION_SCHEMA?