Changes between Initial Version and Version 1 of Trigger6


Ignore:
Timestamp:
01/04/26 19:07:10 (3 days ago)
Author:
211101
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Trigger6

    v1 v1  
     1= Превенција на бришење на акаунти со историја
     2
     3==== Опис
     4Овој тригер спречува бришење на трансакциска сметка доколку таа има поврзани записи во табелата `transaction_breakdown`
     5
     6Со ова се заштитува финансиската историја и се спречува губење на важни податоци
     7
     8==== Табели опфатени со тригерот
     9- `transaction_account`
     10- `transaction_breakdown`
     11
     12==== Тип на тригер
     13- **BEFORE DELETE
     14Активиран над табелата `transaction_account`
     15
     16==== SQL код
     17{{{#!sql
     18CREATE OR REPLACE FUNCTION prevent_account_delete_with_history()
     19RETURNS TRIGGER
     20LANGUAGE plpgsql
     21AS $$
     22BEGIN
     23    IF EXISTS (
     24        SELECT 1
     25        FROM transaction_breakdown
     26        WHERE transaction_account_id = OLD.transaction_account_id
     27    ) THEN
     28        RAISE EXCEPTION
     29            'The transaction account cannot be deleted because it contains history of transactions, delete them first!';
     30    END IF;
     31
     32    RETURN OLD;
     33END;
     34$$;
     35
     36
     37CREATE TRIGGER trg_prevent_account_delete_with_history
     38BEFORE DELETE
     39ON transaction_account
     40FOR EACH ROW
     41EXECUTE FUNCTION prevent_account_delete_with_history();
     42}}}
     43
     44==== Објаснување на логиката
     45Пред бришење на сметката:
     46- се проверува дали постојат поврзани breakdown записи
     47Доколку постојат:
     48- бришењето се прекинува
     49- се прикажува соодветна грешка
     50Ова обезбедува зачувување на историските податоци
     51
     52==== Причина за користење
     53Овој тригер е важен бидејќи:
     54- финансиските податоци не смеат да се губат
     55- бришење на сметка може да доведе до неконзистентни извештаи, сите извештаи остануваат точни и доверливи
     56- `ON DELETE CASCADE` не е соодветен за ваков случај:
     57`ON DELETE CASCADE` автоматски ги брише сите поврзани записи во зависните табели кога ќе се избрише родителскиот запис
     58
     59Иако ова е корисно во одредени сценарија, во финансиски системи како FEiN тоа претставува сериозен ризик за губење на финансиската историја, која никогаш не смее автоматски да се избрише
     60
     61Сметката можеби повеќе не е активна, но историјата останува, а `ON DELETE CASCADE` имплицира дека:
     62- ако сметката не постои → трансакциите не постоеле, што е бизнис логички неточно