Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Projektowanie prostego schematu dezagregacji prognozy popytu

Twój ostatni komentarz jest dokładnie tym, co miałem na myśli. Fajnie widzieć, że to masz!

Odkąd zacząłem to robić, skończyłem przykładowy kod. Różnica w stosunku do tego, co mówiłeś, polega na oddzieleniu tego, co się zmieni, od tego, co się nie zmieni (raw_material VS raw_material_hist ) używając tylko daty tygodnia, który jest poniedziałek i różne ograniczenia sprawdzające.

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

I na koniec rzeczywiście używasz widoku, aby zobaczyć prognozowane rzeczy, lub zmaterializowanego, jeśli masz mnóstwo danych. Korzystając z widoku, nie duplikujesz danych, więc zmiana/aktualizacja jest bezpieczniejsza i łatwiejsza.

W przypadku użycia 1 lub 2 nie dotyczy to schematu bazy danych. Pod koniec dnia będzie po prostu aktualizować jakąś wartość dla prognozy, logika przypadków użycia 1 lub 2 może przejść do procedury PL/SQL lub czegokolwiek, czego używasz dla interfejsu.

Edytuj:Również z ostatniego komentarza wspominałeś, że prognoza jest ustawiona ręcznie w VS jako obliczona. Więc dodałem taką kolumnę, ale kredyty należą do Ciebie

Edytuj bis:Jeśli chodzi o numer wiadra, po prostu użyj odpowiedniej maski dla daty, np. IW lub WW . Te dwie zmiany, czyli pierwszy tydzień roku.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Case Statement z innym typem danych

  2. Kopia zapasowa online vs offline

  3. zamień wiersz na kolumny w oracle10g

  4. Jak usunąć maszynę wirtualną z VirtualBox?

  5. Oracle przycina białe znaki po wewnętrznej stronie łańcucha