Евалуација
Примери на индекси
Индекс врз колони што често се филтрираат: departure_date, return_date:
CREATE INDEX ind_flight_date_range ON Flights(departure_time, arrival_time);
Пример:
EXPLAIN ANALYZE SELECT * FROM Flights WHERE departure_time >= '2025-05-28' AND arrival_time < '2025-06-28';
- EXPLAIN ANALYZE ја прикажува стратегијата на извршување и дали е користен индексот.
- Овој индекс го забрзува пребарувањето на летови во даден временски интервал.
Индекс за JOIN помеѓу Booking и Payment:
CREATE INDEX ind_payment_booking ON Payments(booking_id);
Пример:
EXPLAIN ANALYZE SELECT b.booking_id, p.amount, p.payment_method FROM Bookings b JOIN Payments p ON b.booking_id = p.booking_id WHERE b.booking_date >= '2025-01-01';
- Планот за извршување ќе покаже дека индексот е употребен за побрзо наоѓање на поврзаните плаќања.
Тригери
- Проверка за дупликат во Wishlist
CREATE OR REPLACE FUNCTION check_wishlist_entry() RETURNS TRIGGER AS $$ BEGIN IF EXISTS ( SELECT 1 FROM Wishlist WHERE user_id = NEW.user_id AND target_id = NEW.target_id ) THEN RAISE EXCEPTION 'Item already exists in wishlist!'; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER trg_wishlist_unique BEFORE INSERT ON Wishlist FOR EACH ROW EXECUTE FUNCTION check_wishlist_entry();
- Го спречува додавањето на дупликат записи во Wishlist
- Да се валидира нов корисник
CREATE OR REPLACE FUNCTION check_unique_email() RETURNS TRIGGER AS $$ BEGIN IF EXISTS ( SELECT 1 FROM Users WHERE email = NEW.email ) THEN RAISE EXCEPTION 'Email already registered!'; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER trg_unique_email BEFORE INSERT ON Users FOR EACH ROW EXECUTE FUNCTION check_unique_email();
- Го спречува креирањето на корисници со дупликат емаил.
- Превенција на креирање дупликат тикет за поддршка
CREATE OR REPLACE FUNCTION check_duplicate_ticket() RETURNS TRIGGER AS $$ BEGIN IF EXISTS ( SELECT 1 FROM SupportTickets WHERE user_id = NEW.user_id AND subject = NEW.subject AND status IN ('OPEN', 'RESOLVED') ) THEN RAISE EXCEPTION 'A similar ticket already exists!'; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER trg_duplicate_ticket BEFORE INSERT ON SupportTickets FOR EACH ROW EXECUTE FUNCTION check_duplicate_ticket();
- Го одржува интегритетот на тикет системот и спречува повторно креирање на истиот проблем.
Погледи
Пример на View за активни резервации:
CREATE VIEW ActiveBookings AS SELECT b.booking_id, u.name, u.surname, f.flight_id, f.departure_time, f.arrival_time FROM Bookings b JOIN Users u ON b.user_id = u.user_id JOIN Flights f ON b.flight_id = f.flight_id WHERE f.departure_time >= CURRENT_DATE;
- Овој поглед ја поедноставува и забрзува анализата на активни резервации без повторување на JOIN операциите.
Last modified
4 days ago
Last modified on 08/16/25 00:16:29
Note:
See TracWiki
for help on using the wiki.