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.