Oracle
 sql >> база данни >  >> RDS >> Oracle

Проектиране на проста схема за дезагрегиране на прогнозата за търсенето

Последният ти коментар е точно това, което имах предвид. Страхотно е да видя, че си го получил!

Тъй като бях започнал да го правя, завърших примерен код. Разликата с това, което казахте, е разделянето на това, което ще се промени от това, което няма (raw_material СРЕЩУ raw_material_hist ) използвайки само дата от седмицата, която е понеделник и различни ограничения за проверка.

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

И накрая, наистина използвате изглед, за да видите прогнозираните неща, или материализиран, ако имате тонове данни. Използвайки изглед, вие не дублирате данните, така че е по-безопасно и лесно да се променят/актуализират.

За вашите случаи на употреба 1 или 2 това не се занимава със схемата на базата данни. В края на деня просто ще се актуализира някаква стойност за прогнозата, логиката на случаи на употреба 1 или 2 може да влезе в PL/SQL процедура или каквото и да използвате за интерфейса.

Редактиране:Също така от последния си коментар споменахте, че прогнозираният ръчно е зададен СРЕЩУ изчисления. Затова добавих такава колона, но кредитите са за вас

Редактиране на bis:Що се отнася до номера на кофата, просто използвайте подходяща маска за датата, като IW или WW . Тези две промени са първата седмица на годината.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не може да се потвърди, с опция за новалидиране

  2. как да извлека непрекъснат брой на срещания на стойност на колона в sql?

  3. Oracle ROWID като параметър на функция/процедура

  4. Как да използвам XPath с променлива в Oracle XMLTable?

  5. Как да изпълня частни процедури в пакет на Oracle?