wiki:DatabaseProgramming

Функции, процедури и тригери

Функции

fn_available_rooms

SELECT * FROM fn_available_rooms(hotel_name, p_check_in, p_check_out);
  • Цел: Ги враќа сите слободни соби во даден хотел за даден временски период.

fn_estimate_cost

SELECT * FROM fn_estimate_cost(p_room_id, p_check_in, p_check_out);
  • Цел: Пресметува проценета цена на престој (соба * ноќи), без притоа да создава резервација.

Процедури

pr_book_pet_stay

CALL pr_book_pet_stay(p_pet_id, p_employee_id, p_room_id, p_check_in, p_check_out);
  • Цел: Креира резервација и истовремено ѝ доделува соба.
  • Валидации: Датумот на заминување мора да е по датумот на пристигнување и собата мора да е слободна за бараниот период (се исфрлаат cancelled/no-show резервации). Статусот автоматски се поставува на confirmed.

sp_complete_finished_reservations

CALL sp_complete_finished_reservations();
  • Цел: Batch-задача која ги обележува како completed сите резервации чиј check_out_date веќе поминал, а сè уште не се completed/cancelled/no-show.
  • Забелешка: Процедурата не се активира автоматски со промена на податок, туку мора да биде повикана рачно или од некој сервис.

pr_cancel_reservation

CALL pr_cancel_reservation(p_reservation_id);
  • Цел: Ја откажува резервацијата и сите нејзини закажани услуги во едно повикување.

pr_add_service_to_reservation

CALL pr_add_service_to_reservation(p_reservation_id, p_service_id, p_date, p_time);
  • Цел: Додава услуга на постоечка резервација.
  • Валидации: Резервацијата мора да постои и да не е cancelled/no-show и датумот на услугата не смее да е во минатото.

pr_extend_reservation

CALL pr_extend_reservation(p_reservation_id, p_new_check_out);
  • Цел: Продолжува постоечки престој со нов, подоцнежен check_out_date.
  • Валидации: Резервацијата не смее да е cancelled/no-show/completed, новиот датум мора да е подоцна од стариот, собата мора да е слободна за додадените ноќи (сопствениот опсег на резервацијата се исклучува од проверката).
  • Забелешка: Преку UPDATE RoomReservation автоматски ги активира trg_sync_date_status и trg_update_cost_on_roomreservation.

Тригери

trg_sync_date_status

  • Функција: fn_sync_date_status()
  • Се активира: AFTER INSERT OR UPDATE OR DELETE ON RoomReservation
  • Цел: Ја одржува табелата Date синхронизирана со реалните резервации, така што vw_available_rooms секогаш прикажува точни, живи податоци. При бришење или промена го ослободува стариот опсег на датуми (status_id = 2, available), при внес или промена го означува новиот опсег како зафатен (status_id = 1, occupied).

trg_reservation_status_guard

  • Функција: fn_reservation_status_guard()
  • Се активира: BEFORE UPDATE ON Reservation
  • Цел: Спречува невалидни промини на статус на резервација (пр. од completed назад во pending). Дозволени промини: pending -> confirmed | cancelled, confirmed -> completed | cancelled | no-show. Останатите статуси се терминални и не можат да се променуваат. Невалиден обид фрла EXCEPTION.

trg_update_cost_on_roomreservation / trg_update_cost_on_servicereservation

  • Функција: fn_update_reservation_cost()
  • Се активираат: AFTER INSERT OR UPDATE OR DELETE на RoomReservation и ServiceReservation
  • Цел: Автоматски го прекалкулира Reservation.total_cost секогаш кога ќе се промени собата, или ќе се додаде или отстрани услуга. Откажаните услуги (status = cancelled) не влегуваат во сметката.
Last modified 4 days ago Last modified on 07/02/26 01:22:48
Note: See TracWiki for help on using the wiki.