Последният ти коментар е точно това, което имах предвид. Страхотно е да видя, че си го получил!
Тъй като бях започнал да го правя, завърших примерен код. Разликата с това, което казахте, е разделянето на това, което ще се промени от това, което няма (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
. Тези две промени са първата седмица на годината.