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.