Changes between Version 20 and Version 21 of DatabaseProgramming


Ignore:
Timestamp:
05/09/26 23:05:00 (2 weeks ago)
Author:
231027
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseProgramming

    v20 v21  
    200200}}}
    201201
     202=== trg_check_venue_schedule
     203
     204Овој тригер спречува преклопување на два настани во ист објект и во исто време. Пред секој внес или измена во распоредот, базата проверува дали терминот е веќе резервиран за таа локација.
     205
     206{{{
     207
     208CREATE OR REPLACE FUNCTION trg_check_venue_schedule()
     209RETURNS TRIGGER AS $$
     210BEGIN
     211    IF EXISTS (
     212        SELECT 1 FROM "Event_Happening"
     213        WHERE venue_id = NEW.venue_id
     214          AND event_time = NEW.event_time
     215          AND event_happening_id <> NEW.event_happening_id
     216    ) THEN
     217        RAISE EXCEPTION 'Venue is already occupied at this time.';
     218    END IF;
     219    RETURN NEW;
     220END;
     221$$ LANGUAGE plpgsql;
     222
     223CREATE TRIGGER check_venue_before_insert_update
     224BEFORE INSERT OR UPDATE ON "Event_Happening"
     225FOR EACH ROW EXECUTE FUNCTION trg_check_venue_schedule();
     226
     227}}}
     228
     229=== trg_check_performer_availability
     230
     231Овој тригер гарантира дека еден изведувач не може да биде на две места истовремено. Со поврзување на табелите за изведувачи и настани, системот автоматски го блокира секој обид за дуплирање на ангажманот во ист термин.
     232
     233{{{
     234
     235CREATE OR REPLACE FUNCTION trg_check_performer_availability()
     236RETURNS TRIGGER AS $$
     237DECLARE
     238    v_new_event_time TIMESTAMP;
     239BEGIN
     240    SELECT event_time INTO v_new_event_time
     241    FROM "Event_Happening"
     242    WHERE event_happening_id = NEW.event_happening_id;
     243
     244    IF EXISTS (
     245        SELECT 1
     246        FROM "Event_Happening_Performer" ehp
     247        JOIN "Event_Happening" eh ON ehp.event_happening_id = eh.event_happening_id
     248        WHERE ehp.performer_id = NEW.performer_id
     249          AND eh.event_time = v_new_event_time
     250          AND ehp.event_happening_id <> NEW.event_happening_id
     251    ) THEN
     252        RAISE EXCEPTION 'Performer is already booked for another event at this time.';
     253    END IF;
     254    RETURN NEW;
     255END;
     256$$ LANGUAGE plpgsql;
     257
     258CREATE TRIGGER check_performer_before_assign
     259BEFORE INSERT OR UPDATE ON "Event_Happening_Performer"
     260FOR EACH ROW EXECUTE FUNCTION trg_check_performer_availability();
     261
     262}}}
     263
    202264=== trg_validate_event_rating
    203265