Changes between Initial Version and Version 1 of AdvancedDatabaseDevelopment


Ignore:
Timestamp:
02/20/26 02:11:43 (4 days ago)
Author:
221181
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedDatabaseDevelopment

    v1 v1  
     1= Напреден развој на база =
     2
     3== 1.Тригери и Функции ==
     4
     5=== 1.1 Автоматско пресметување на вкупниот износ на продажба (trg_recalculate_sale_total) ===
     6
     7Цел: Автоматски ја ажурира вкупната сума на продажбата секогаш кога се додаваат, менуваат или бришат ставки, со што се обезбедува точна пресметка во базата на податоци.
     8
     9{{{#!sql
     10CREATE OR REPLACE FUNCTION trg_fn_recalculate_sale_total()
     11RETURNS TRIGGER
     12LANGUAGE plpgsql
     13AS $$
     14DECLARE
     15    v_sale_id INT;
     16BEGIN
     17    IF TG_OP = 'DELETE' THEN
     18        v_sale_id := OLD.sale_id;
     19    ELSE
     20        v_sale_id := NEW.sale_id;
     21    END IF;
     22
     23    UPDATE sale
     24    SET total_amount = (
     25        SELECT COALESCE(SUM(quantity * unit_price_at_sale), 0)
     26        FROM sale_item
     27        WHERE sale_id = v_sale_id
     28    )
     29    WHERE sale_id = v_sale_id;
     30
     31    RETURN NULL;
     32END;
     33$$;
     34
     35CREATE TRIGGER trg_recalculate_sale_total
     36AFTER INSERT OR UPDATE OR DELETE ON sale_item
     37FOR EACH ROW
     38EXECUTE FUNCTION trg_fn_recalculate_sale_total();
     39}}}
     40
     41=== 1.2 Спречување на паѓање на залихата во негативна вредност (trg_prevent_negative_stock) ===
     42
     43Што прави: Спречува која било операција да ја намали количината на залиха под нула, со што се обезбедува дека залихата никогаш нема да биде негативна.
     44
     45{{{#!sql
     46CREATE OR REPLACE FUNCTION trg_fn_prevent_negative_stock()
     47RETURNS TRIGGER
     48LANGUAGE plpgsql
     49AS $$
     50BEGIN
     51    IF NEW.quantity_on_hand < 0 THEN
     52        RAISE EXCEPTION
     53            'Stock cannot be negative! Warehouse: %, Product: %, Quantity: %',
     54            NEW.warehouse_id, NEW.product_id, NEW.quantity_on_hand;
     55    END IF;
     56    RETURN NEW;
     57END;
     58$$;
     59
     60CREATE TRIGGER trg_prevent_negative_stock
     61BEFORE INSERT OR UPDATE ON warehouse_stock
     62FOR EACH ROW
     63EXECUTE FUNCTION trg_fn_prevent_negative_stock();
     64}}}
     65
     66== 2.Тригери и Функции ==