sql >> Databasteknik >  >> RDS >> Oracle

Designa ett enkelt schema för uppdelning av efterfrågansprognos

Din sista kommentar är precis vad jag menade. Kul att se att du fattade det!

Sedan jag hade börjat göra det avslutade jag en exempelkod. Skillnaden mot det du sa är att skilja det som kommer att förändras från det som inte kommer att göra det (raw_material VS raw_material_hist ) använder endast datum för veckan, vilket är måndag , och olika kontrollbegränsningar.

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

Och i slutet använder du verkligen en vy för att se de prognostiserade sakerna, eller en materialiserad en om du har massor av data. Genom att använda en vy duplicerar du inte data, så det är säkrare och enklare att ändra/uppdatera.

För dina användningsfall 1 eller 2, handlar detta inte om databasschemat. I slutet av dagen kommer det bara att uppdatera något värde för prognosen, logiken i användningsfall 1 eller 2 kan gå i en PL/SQL-procedur eller vad du nu använder för gränssnittet.

Redigera:Från din senaste kommentar nämnde du också att ha den prognostiserade manuellt inställda VS den beräknade. Så jag lade till en sådan kolumn, men krediter går till dig

Redigera bis:När det gäller hinknumret, använd bara en lämplig mask för datumet, som IW eller WW . Dessa två förändringar som är den första veckan på året.



  1. MySQL-index och ordning

  2. mysql-grupp genom att ha min

  3. Skapar ny databas i DataGrip JetBrains

  4. Hur eliminerar Left Join / IS NULL poster som finns i den ena tabellen och inte i den andra?