Changes between Initial Version and Version 1 of Евалуација


Ignore:
Timestamp:
05/28/25 14:16:55 (6 days ago)
Author:
173067
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Евалуација

    v1 v1  
     1=== Евалуација
     2
     3== Примери на индекси
     4
     5Индекс врз колони што често се филтрираат: departure_date, return_date:
     6{{{#!sql
     7
     8CREATE INDEX ind_flight_date_range ON flight(departure_date, return_date);
     9
     10}}}
     11
     12Пример - Овој индекс е корисен кога се филтрираат записи во табелата flights според колоната departure_date и return_date.
     13{{{#!sql
     14SELECT * FROM flights
     15WHERE departure_date >= '2025-05-28' AND return_date< '2026-05-28';
     16}}}
     17
     18Индекс за JOIN помеѓу Booking и Payment:
     19{{{#!sql
     20
     21CREATE INDEX ind_payment_booking ON payment(bookingid);
     22
     23}}}
     24
     25== Примери за тригери
     26
     271. Проверка дали одреден item веќе е во Wishlist
     28{{{#!sql
     29
     30CREATE OR REPLACE FUNCTION validate_wishlist_entry()
     31RETURNS TRIGGER AS $$
     32BEGIN
     33   IF EXISTS (
     34       SELECT 1 FROM Wishlist
     35       WHERE UserID = NEW.UserID AND TargetID = NEW.TargetID
     36   ) THEN
     37       RAISE EXCEPTION 'Item already exists in wishlist!';
     38   END IF;
     39   RETURN NEW;
     40END;
     41$$ LANGUAGE plpgsql;
     42CREATE TRIGGER check_wishlist_entry
     43BEFORE INSERT ON Wishlist
     44FOR EACH ROW
     45EXECUTE FUNCTION validate_wishlist_entry();
     46
     47}}}
     48
     49
     502. Да се валидира нов корисник
     51{{{#!sql
     52
     53CREATE OR REPLACE FUNCTION validate_new_user()
     54RETURNS TRIGGER AS $$
     55BEGIN
     56   IF EXISTS (SELECT 1 FROM application_user WHERE Email = NEW.Email) THEN
     57       RAISE EXCEPTION 'Email already registered!';
     58   END IF;
     59   IF LENGTH(NEW.Password) < 8 THEN
     60       RAISE EXCEPTION 'Password must be at least 8 characters long!';
     61   END IF;
     62   RETURN NEW;
     63END;
     64$$ LANGUAGE plpgsql;
     65CREATE TRIGGER check_new_user
     66BEFORE INSERT ON application_user
     67FOR EACH ROW
     68EXECUTE FUNCTION validate_new_user();
     69
     70}}}
     71
     723. Превенција на креирање дупликат тикет за поддршка
     73
     74{{{#!sql
     75CREATE OR REPLACE FUNCTION prevent_duplicate_ticket()
     76RETURNS TRIGGER AS $$
     77BEGIN
     78   IF EXISTS (
     79       SELECT 1 FROM SupportTicket
     80       WHERE UserID = NEW.UserID
     81       AND Description = NEW.Description
     82       AND Status IN ('OPEN', 'RESOLVED')
     83   ) THEN
     84       RAISE EXCEPTION 'A similar issue has already been reported!';
     85   END IF;
     86   RETURN NEW;
     87END;
     88$$ LANGUAGE plpgsql;
     89}}}
     90
     91
     92== Погледи
     93
     94Views имаме креирано во фаза 2