sql >> Database >  >> RDS >> Oracle

Een eenvoudig schema ontwerpen voor het uitsplitsen van vraagprognoses

Je laatste opmerking is precies wat ik bedoelde. Cool om te zien dat je het snapt!

Sinds ik ermee begonnen was, heb ik een voorbeeldcode afgemaakt. Het verschil met wat je zei, is het scheiden van wat zal veranderen van wat niet zal veranderen (raw_material VS raw_material_hist ) alleen de datum gebruiken voor de week, die maandag is , en verschillende controlebeperkingen.

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

En aan het einde gebruik je inderdaad een weergave om de voorspelde dingen te zien, of een gematerialiseerde als je tonnen gegevens hebt. Door een weergave te gebruiken, dupliceert u de gegevens niet, dus het is veiliger en gemakkelijker om te wijzigen/bijwerken.

Voor uw use cases 1 of 2 heeft dit geen betrekking op het databaseschema. Aan het eind van de dag zal het gewoon een waarde voor de voorspelling bijwerken, de logica van use cases 1 of 2 zou kunnen passen in een PL/SQL-procedure of wat je ook gebruikt voor de interface.

Bewerken:ook uit uw laatste opmerking vermeldde u dat de voorspelde handmatig is ingesteld VS de berekende. Dus ik heb zo'n column toegevoegd, maar de credits gaan naar jou

Bewerk bis:Wat betreft het emmernummer, gebruik gewoon een goed masker voor de datum, zoals IW of WW . Deze twee veranderingen zijn de eerste week van het jaar.



  1. Hoe een groot aantal tekenreeksen te laden die overeenkomen met de Oracle-database?

  2. Offset lokale tijdzone in PostgreSQL

  3. Booleaanse velden in MySQL Django-modellen?

  4. Heb je echt een db-verbindingspool nodig voor eenhoornrails?