Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Entwerfen eines einfachen Schemas für die Disaggregation der Bedarfsprognose

Ihr letzter Kommentar ist genau das, was ich meinte. Cool zu sehen, dass du es verstanden hast!

Da ich damit angefangen hatte, habe ich einen Beispielcode fertiggestellt. Der Unterschied zu dem, was Sie gesagt haben, besteht darin, zu trennen, was sich ändern wird, und was nicht (raw_material VS raw_material_hist ), wobei nur das Datum für die Woche verwendet wird, die Montag ist , und verschiedene Check Constraints.

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

Und am Ende verwenden Sie tatsächlich eine Ansicht, um die prognostizierten Dinge zu sehen, oder eine materialisierte, wenn Sie Tonnen von Daten haben. Durch die Verwendung einer Ansicht duplizieren Sie die Daten nicht, sodass sie sicherer und einfacher zu ändern/aktualisieren sind.

Für Ihre Anwendungsfälle 1 oder 2 befasst sich dies nicht mit dem Datenbankschema. Am Ende des Tages wird nur ein Wert für die Prognose aktualisiert, die Logik der Anwendungsfälle 1 oder 2 könnte in eine PL/SQL-Prozedur oder was auch immer Sie für die Schnittstelle verwenden.

Bearbeiten:Auch aus Ihrem letzten Kommentar haben Sie erwähnt, dass die prognostizierte manuell gegen die berechnete eingestellt wurde. Also habe ich eine solche Spalte hinzugefügt, aber die Credits gehen an Sie

Edit bis:Was die Bucket-Nummer betrifft, verwenden Sie einfach eine geeignete Maske für das Datum, wie IW oder WW . Diese beiden Änderungen sind die erste Woche des Jahres.