Changes between Version 9 and Version 10 of AdvancedApplicationDevelopment
- Timestamp:
- 09/25/25 13:22:50 (3 weeks ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
AdvancedApplicationDevelopment
v9 v10 7 7 * За побрзо пребарување на активности во одреден период 8 8 {{{ 9 CREATE INDEX idx_a ktivnost_datum ON aktivnosti(datum_od, datum_do);9 CREATE INDEX idx_activity_dates ON activity(start_date, end_date); 10 10 }}} 11 11 12 12 * За побрз join и филтрирање по корисник при резервации 13 13 {{{ 14 CREATE INDEX idx_re zervacii_korisnik ON rezervacii(idkorisnik);14 CREATE INDEX idx_reservation_user ON reservation(id_user); 15 15 }}} 16 16 17 17 * За побрзо пребарување на дестинации по име на локација 18 18 {{{ 19 CREATE INDEX idx_destinacii_lokacija ON destinacii(imelokacija); 20 }}} 21 22 23 19 CREATE INDEX idx_destination_location_name ON destination(location_name); 20 }}} 21 22 * Демонстрација на користење на индекс 24 23 {{{ 25 24 EXPLAIN ANALYZE 26 SELECT * FROM a ktivnosti27 WHERE datum_od >= '2025-01-01' AND datum_do<= '2025-12-31';25 SELECT * FROM activity 26 WHERE start_date >= '2025-01-01' AND end_date <= '2025-12-31'; 28 27 }}} 29 28 … … 33 32 1. Деактивирање дестинација со негативни рецензии 34 33 Деактивира дестинација само ако просечната оцена падне под еден праг, а не на првата ниска оцена. Всушност дестинацијата ќе се деактивира само ако навистина падне просечната оцена. 34 {{{ 35 ALTER TABLE destination 36 ADD COLUMN IF NOT EXISTS aktivna BOOLEAN NOT NULL DEFAULT TRUE; 37 }}} 38 35 39 {{{ 36 40 CREATE OR REPLACE FUNCTION check_avg_rating() … … 39 43 avg_rating FLOAT; 40 44 BEGIN 41 SELECT AVG( ocenka) INTO avg_rating42 FROM re cenzii43 WHERE id dest = NEW.iddest;45 SELECT AVG(quality) INTO avg_rating 46 FROM review 47 WHERE id_destination = NEW.id_destination; 44 48 45 49 IF avg_rating < 4 THEN 46 UPDATE destina cii50 UPDATE destination 47 51 SET aktivna = FALSE 48 WHERE id dest = NEW.iddest;52 WHERE id_destination = NEW.id_destination; 49 53 END IF; 50 54 … … 54 58 55 59 CREATE TRIGGER trg_avg_rating 56 AFTER INSERT ON re cenzii60 AFTER INSERT ON review 57 61 FOR EACH ROW 58 62 EXECUTE FUNCTION check_avg_rating(); … … 64 68 1. Во TravelSage, прикажани се активности што се „најдобра вредност за пари“, базирано на цена и просечна оцена од рецензии. 65 69 {{{ 66 CREATE VIEW best_value_activities AS70 CREATE OR REPLACE VIEW best_value_activities AS 67 71 SELECT 68 a.id aktivnost,69 a. ime,70 a. iznos,71 d. imelokacija,72 AVG(r. ocenka) AS avg_rating73 FROM a ktivnostia74 JOIN destina cii d ON a.iddest = d.iddest75 JOIN re cenzii r ON a.idaktivnost = r.idaktivnost76 GROUP BY a.id aktivnost, a.ime, a.iznos, d.imelokacija77 HAVING AVG(r. ocenka) > 4 AND a.iznos< 1000;72 a.id_activity, 73 a.activity_name, 74 a.amount, 75 d.location_name, 76 AVG(r.quality) AS avg_rating 77 FROM activity a 78 JOIN destination d ON a.id_destination = d.id_destination 79 JOIN review r ON a.id_activity = r.id_destination 80 GROUP BY a.id_activity, a.activity_name, a.amount, d.location_name 81 HAVING AVG(r.quality) > 4 AND a.amount < 1000; 78 82 }}} 79 83 2. Активности со најниски цени 80 84 Го пресметува процентот на ефтини активности по дестинација – корисно за филтрирање при буџетско патување. 85 {{{ 86 CREATE OR REPLACE VIEW view_procent_cheap_destinations AS 87 SELECT 88 d.location_name, 89 COUNT(CASE WHEN a.amount < 500 THEN 1 END) * 100.0 / COUNT(*) AS procent_cheap 90 FROM destination d 91 JOIN activity a ON d.id_destination = a.id_destination 92 GROUP BY d.id_destination, d.location_name 93 ORDER BY procent_cheap DESC; 94 }}} 95 81 96 {{{ 82 97 DB::statement("