Changes between Initial Version and Version 1 of DatabaseProgramming


Ignore:
Timestamp:
07/02/26 01:22:48 (4 days ago)
Author:
231178
Comment:

Додадена документација за функции, процедури и тригери

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseProgramming

    v1 v1  
     1= Функции, процедури и тригери =
     2
     3== Функции ==
     4
     5=== `fn_available_rooms` ===
     6
     7{{{#!sql
     8SELECT * FROM fn_available_rooms(hotel_name, p_check_in, p_check_out);
     9}}}
     10
     11 * '''Цел:''' Ги враќа сите слободни соби во даден хотел за даден временски период.
     12
     13----
     14
     15=== `fn_estimate_cost` ===
     16
     17{{{#!sql
     18SELECT * FROM fn_estimate_cost(p_room_id, p_check_in, p_check_out);
     19}}}
     20
     21 * '''Цел:''' Пресметува проценета цена на престој (соба * ноќи), без притоа да создава резервација.
     22
     23----
     24
     25== Процедури ==
     26
     27=== `pr_book_pet_stay` ===
     28
     29{{{#!sql
     30CALL pr_book_pet_stay(p_pet_id, p_employee_id, p_room_id, p_check_in, p_check_out);
     31}}}
     32
     33 * '''Цел:''' Креира резервација и истовремено ѝ доделува соба.
     34 * '''Валидации:''' Датумот на заминување мора да е по датумот на пристигнување и собата мора да е слободна за бараниот период (се исфрлаат `cancelled`/`no-show` резервации). Статусот автоматски се поставува на `confirmed`.
     35
     36----
     37
     38=== `sp_complete_finished_reservations` ===
     39
     40{{{#!sql
     41CALL sp_complete_finished_reservations();
     42}}}
     43
     44 * '''Цел:''' Batch-задача која ги обележува како `completed` сите резервации чиј `check_out_date` веќе поминал, а сè уште не се `completed`/`cancelled`/`no-show`.
     45 * '''Забелешка:''' Процедурата не се активира автоматски со промена на податок, туку мора да биде повикана рачно или од некој сервис.
     46
     47----
     48
     49=== `pr_cancel_reservation` ===
     50
     51{{{#!sql
     52CALL pr_cancel_reservation(p_reservation_id);
     53}}}
     54
     55 * '''Цел:''' Ја откажува резервацијата и сите нејзини закажани услуги во едно повикување.
     56
     57----
     58
     59=== `pr_add_service_to_reservation` ===
     60
     61{{{#!sql
     62CALL pr_add_service_to_reservation(p_reservation_id, p_service_id, p_date, p_time);
     63}}}
     64
     65 * '''Цел:''' Додава услуга на постоечка резервација.
     66 * '''Валидации:''' Резервацијата мора да постои и да не е `cancelled`/`no-show` и датумот на услугата не смее да е во минатото.
     67
     68----
     69
     70=== `pr_extend_reservation` ===
     71
     72{{{#!sql
     73CALL pr_extend_reservation(p_reservation_id, p_new_check_out);
     74}}}
     75
     76 * '''Цел:''' Продолжува постоечки престој со нов, подоцнежен `check_out_date`.
     77 * '''Валидации:''' Резервацијата не смее да е `cancelled`/`no-show`/`completed`, новиот датум мора да е подоцна од стариот, собата мора да е слободна за додадените ноќи (сопствениот опсег на резервацијата се исклучува од проверката).
     78 * '''Забелешка:''' Преку `UPDATE RoomReservation` автоматски ги активира `trg_sync_date_status` и `trg_update_cost_on_roomreservation`.
     79
     80----
     81
     82== Тригери ==
     83
     84=== `trg_sync_date_status` ===
     85
     86 * '''Функција:''' `fn_sync_date_status()`
     87 * '''Се активира:''' `AFTER INSERT OR UPDATE OR DELETE ON RoomReservation`
     88 * '''Цел:''' Ја одржува табелата `Date` синхронизирана со реалните резервации, така што `vw_available_rooms` секогаш прикажува точни, живи податоци. При бришење или промена го ослободува стариот опсег на датуми (`status_id = 2`, available), при внес или промена го означува новиот опсег како зафатен (`status_id = 1`, occupied).
     89
     90----
     91
     92=== `trg_reservation_status_guard` ===
     93
     94 * '''Функција:''' `fn_reservation_status_guard()`
     95 * '''Се активира:''' `BEFORE UPDATE ON Reservation`
     96 * '''Цел:''' Спречува невалидни промини на статус на резервација (пр. од `completed` назад во `pending`). Дозволени промини: `pending -> confirmed | cancelled`, `confirmed -> completed | cancelled | no-show`. Останатите статуси се терминални и не можат да се променуваат. Невалиден обид фрла `EXCEPTION`.
     97
     98----
     99
     100=== `trg_update_cost_on_roomreservation` / `trg_update_cost_on_servicereservation` ===
     101
     102 * '''Функција:''' `fn_update_reservation_cost()`
     103 * '''Се активираат:''' `AFTER INSERT OR UPDATE OR DELETE` на `RoomReservation` и `ServiceReservation`
     104 * '''Цел:''' Автоматски го прекалкулира `Reservation.total_cost` секогаш кога ќе се промени собата, или ќе се додаде или отстрани услуга. Откажаните услуги (`status = cancelled`) не влегуваат во сметката.