Я не могу найти способ применить расширенное ограничение на основе запросов.
Например, с помощью следующей фиктивной схемы, как я могу обеспечить, чтобы общий процент ежедневных действий Боба не превышал 100%?
Я уже изучил ограничения триггера , но я не думаю, что они собираются делать то, что я хочу (отменить INSERT / UPDATE, если удовлетворены некоторые критерии).
Спасибо за чтение моего вопроса и любую помощь, которую вы можете предложить.
create table employee (
id serial PRIMARY KEY,
name varchar(100) NOT NULL
);
create table work_day (
employee_id integer references employee(id) NOT NULL,
percentage integer NOT NULL CHECK (percentage > 0 and percentage <= 100),
activity varchar(100) NOT NULL
);
INSERT INTO employee (name) VALUES ('bob');
-- Bob spends 50% of the day slacking, 20% eating and 30% working (total = 100%)
INSERT INTO work_day (employee_id, percentage, activity) VALUES (1, 50, 'slacking');
INSERT INTO work_day (employee_id, percentage, activity) VALUES (1, 20, 'eating');
INSERT INTO work_day (employee_id, percentage, activity) VALUES (1, 30, 'working');
-- This should be invalid!!! 100% of Bob's time has already been allocated
INSERT INTO work_day (employee_id, percentage, activity) VALUES (1, 10, 'invalid');