wiki:Trigger6

Version 1 (modified by 211101, 2 days ago) ( diff )

--

Превенција на бришење на акаунти со историја

Опис

Овој тригер спречува бришење на трансакциска сметка доколку таа има поврзани записи во табелата transaction_breakdown

Со ова се заштитува финансиската историја и се спречува губење на важни податоци

Табели опфатени со тригерот

  • transaction_account
  • transaction_breakdown

Тип на тригер

  • BEFORE DELETE

Активиран над табелата transaction_account

SQL код

CREATE OR REPLACE FUNCTION prevent_account_delete_with_history()
RETURNS TRIGGER
LANGUAGE plpgsql
AS $$
BEGIN
    IF EXISTS (
        SELECT 1
        FROM transaction_breakdown
        WHERE transaction_account_id = OLD.transaction_account_id
    ) THEN
        RAISE EXCEPTION
            'The transaction account cannot be deleted because it contains history of transactions, delete them first!';
    END IF;

    RETURN OLD;
END;
$$;


CREATE TRIGGER trg_prevent_account_delete_with_history
BEFORE DELETE
ON transaction_account
FOR EACH ROW
EXECUTE FUNCTION prevent_account_delete_with_history();

Објаснување на логиката

Пред бришење на сметката:

  • се проверува дали постојат поврзани breakdown записи

Доколку постојат:

  • бришењето се прекинува
  • се прикажува соодветна грешка

Ова обезбедува зачувување на историските податоци

Причина за користење

Овој тригер е важен бидејќи:

  • финансиските податоци не смеат да се губат
  • бришење на сметка може да доведе до неконзистентни извештаи, сите извештаи остануваат точни и доверливи
  • ON DELETE CASCADE не е соодветен за ваков случај:

ON DELETE CASCADE автоматски ги брише сите поврзани записи во зависните табели кога ќе се избрише родителскиот запис

Иако ова е корисно во одредени сценарија, во финансиски системи како FEiN тоа претставува сериозен ризик за губење на финансиската историја, која никогаш не смее автоматски да се избрише

Сметката можеби повеќе не е активна, но историјата останува, а ON DELETE CASCADE имплицира дека:

  • ако сметката не постои → трансакциите не постоеле, што е бизнис логички неточно
Note: See TracWiki for help on using the wiki.