| | 1 | = Автоматско бришење на трансакции без помошни(breakdown) записи |
| | 2 | |
| | 3 | ==== Опис |
| | 4 | Овој тригер автоматски ја брише трансакцијата доколку по бришење на запис од `transaction_breakdown` повеќе не постојат поврзани `breakdown` записи за таа трансакција |
| | 5 | |
| | 6 | Со ова се обезбедува дека не постојат „празни“ трансакции кои немаат финансиско значење |
| | 7 | |
| | 8 | ==== Табели опфатени со тригерот |
| | 9 | - `transaction` |
| | 10 | - `transaction_breakdown` |
| | 11 | |
| | 12 | ==== Тип на тригер |
| | 13 | - **AFTER DELETE |
| | 14 | Активиран над табелата `transaction_breakdown` |
| | 15 | |
| | 16 | ==== SQL код |
| | 17 | {{{#!sql |
| | 18 | CREATE OR REPLACE FUNCTION delete_empty_transaction() |
| | 19 | RETURNS TRIGGER |
| | 20 | LANGUAGE plpgsql |
| | 21 | AS $$ |
| | 22 | BEGIN |
| | 23 | -- Проверка дали постојат други breakdown записи за истата трансакција |
| | 24 | IF NOT EXISTS ( |
| | 25 | SELECT 1 |
| | 26 | FROM transaction_breakdown |
| | 27 | WHERE transaction_id = OLD.transaction_id |
| | 28 | ) THEN |
| | 29 | DELETE FROM transaction |
| | 30 | WHERE transaction_id = OLD.transaction_id; |
| | 31 | END IF; |
| | 32 | |
| | 33 | RETURN NULL; |
| | 34 | END; |
| | 35 | $$; |
| | 36 | |
| | 37 | |
| | 38 | CREATE TRIGGER trg_delete_empty_transaction |
| | 39 | AFTER DELETE |
| | 40 | ON transaction_breakdown |
| | 41 | FOR EACH ROW |
| | 42 | EXECUTE FUNCTION delete_empty_transaction(); |
| | 43 | }}} |
| | 44 | |
| | 45 | ==== Објаснување на логиката |
| | 46 | По бришење на breakdown запис: |
| | 47 | - се проверува дали трансакцијата има други поврзани записи |
| | 48 | Доколку нема: |
| | 49 | - трансакцијата се смета за невалидна |
| | 50 | - автоматски се брише |
| | 51 | Ова однесување ја моделира композицијата помеѓу `transaction` и `transaction_breakdown` |
| | 52 | |
| | 53 | ==== Причина за користење |
| | 54 | |
| | 55 | Овој тригер е важен затоа што: |
| | 56 | - трансакција без breakdown нема значење |
| | 57 | - спречува акумулација на некорисни податоци |
| | 58 | - ја одржува базата чиста и логична |
| | 59 | Оваа логика не може секогаш безбедно да се остави на апликацијата |