= Напреден развој на база = == 1.Тригери и Функции == === 1.1 Автоматско пресметување на вкупниот износ на продажба (trg_recalculate_sale_total) === Цел: Автоматски ја ажурира вкупната сума на продажбата секогаш кога се додаваат, менуваат или бришат ставки, со што се обезбедува точна пресметка во базата на податоци. {{{#!sql CREATE OR REPLACE FUNCTION trg_fn_recalculate_sale_total() RETURNS TRIGGER LANGUAGE plpgsql AS $$ DECLARE v_sale_id INT; BEGIN IF TG_OP = 'DELETE' THEN v_sale_id := OLD.sale_id; ELSE v_sale_id := NEW.sale_id; END IF; UPDATE sale SET total_amount = ( SELECT COALESCE(SUM(quantity * unit_price_at_sale), 0) FROM sale_item WHERE sale_id = v_sale_id ) WHERE sale_id = v_sale_id; RETURN NULL; END; $$; CREATE TRIGGER trg_recalculate_sale_total AFTER INSERT OR UPDATE OR DELETE ON sale_item FOR EACH ROW EXECUTE FUNCTION trg_fn_recalculate_sale_total(); }}} === 1.2 Спречување на паѓање на залихата во негативна вредност (trg_prevent_negative_stock) === Што прави: Спречува која било операција да ја намали количината на залиха под нула, со што се обезбедува дека залихата никогаш нема да биде негативна. {{{#!sql CREATE OR REPLACE FUNCTION trg_fn_prevent_negative_stock() RETURNS TRIGGER LANGUAGE plpgsql AS $$ BEGIN IF NEW.quantity_on_hand < 0 THEN RAISE EXCEPTION 'Stock cannot be negative! Warehouse: %, Product: %, Quantity: %', NEW.warehouse_id, NEW.product_id, NEW.quantity_on_hand; END IF; RETURN NEW; END; $$; CREATE TRIGGER trg_prevent_negative_stock BEFORE INSERT OR UPDATE ON warehouse_stock FOR EACH ROW EXECUTE FUNCTION trg_fn_prevent_negative_stock(); }}} == 2.Views ==