Changes between Version 9 and Version 10 of AdvancedApplicationDevelopment


Ignore:
Timestamp:
09/25/25 13:22:50 (3 weeks ago)
Author:
223270
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedApplicationDevelopment

    v9 v10  
    77* За побрзо пребарување на активности во одреден период
    88{{{
    9 CREATE INDEX idx_aktivnost_datum ON aktivnosti(datum_od, datum_do);
     9CREATE INDEX idx_activity_dates ON activity(start_date, end_date);
    1010}}}
    1111
    1212* За побрз join и филтрирање по корисник при резервации
    1313{{{
    14 CREATE INDEX idx_rezervacii_korisnik ON rezervacii(idkorisnik);
     14CREATE INDEX idx_reservation_user ON reservation(id_user);
    1515}}}
    1616
    1717* За побрзо пребарување на дестинации по име на локација
    1818{{{
    19 CREATE INDEX idx_destinacii_lokacija ON destinacii(imelokacija);
    20 }}}
    21 
    22 
    23 
     19CREATE INDEX idx_destination_location_name ON destination(location_name);
     20}}}
     21
     22* Демонстрација на користење на индекс
    2423{{{
    2524EXPLAIN ANALYZE
    26 SELECT * FROM aktivnosti
    27 WHERE datum_od >= '2025-01-01' AND datum_do <= '2025-12-31';
     25SELECT * FROM activity
     26WHERE start_date >= '2025-01-01' AND end_date <= '2025-12-31';
    2827}}}
    2928
     
    33321. Деактивирање дестинација со негативни рецензии
    3433Деактивира дестинација само ако просечната оцена падне под еден праг, а не на првата ниска оцена. Всушност дестинацијата ќе се деактивира само ако навистина падне просечната оцена.
     34{{{
     35ALTER TABLE destination
     36ADD COLUMN IF NOT EXISTS aktivna BOOLEAN NOT NULL DEFAULT TRUE;
     37}}}
     38
    3539{{{
    3640CREATE OR REPLACE FUNCTION check_avg_rating()
     
    3943    avg_rating FLOAT;
    4044BEGIN
    41     SELECT AVG(ocenka) INTO avg_rating
    42     FROM recenzii
    43     WHERE iddest = NEW.iddest;
     45    SELECT AVG(quality) INTO avg_rating
     46    FROM review
     47    WHERE id_destination = NEW.id_destination;
    4448
    4549    IF avg_rating < 4 THEN
    46         UPDATE destinacii
     50        UPDATE destination
    4751        SET aktivna = FALSE
    48         WHERE iddest = NEW.iddest;
     52        WHERE id_destination = NEW.id_destination;
    4953    END IF;
    5054
     
    5458
    5559CREATE TRIGGER trg_avg_rating
    56 AFTER INSERT ON recenzii
     60AFTER INSERT ON review
    5761FOR EACH ROW
    5862EXECUTE FUNCTION check_avg_rating();
     
    64681. Во TravelSage, прикажани се активности што се „најдобра вредност за пари“, базирано на цена и просечна оцена од рецензии.
    6569{{{
    66 CREATE VIEW best_value_activities AS
     70CREATE OR REPLACE VIEW best_value_activities AS
    6771SELECT
    68     a.idaktivnost,
    69     a.ime,
    70     a.iznos,
    71     d.imelokacija,
    72     AVG(r.ocenka) AS avg_rating
    73 FROM aktivnosti a
    74 JOIN destinacii d ON a.iddest = d.iddest
    75 JOIN recenzii r ON a.idaktivnost = r.idaktivnost
    76 GROUP BY a.idaktivnost, a.ime, a.iznos, d.imelokacija
    77 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
     77FROM activity a
     78JOIN destination d ON a.id_destination = d.id_destination
     79JOIN review r ON a.id_activity = r.id_destination
     80GROUP BY a.id_activity, a.activity_name, a.amount, d.location_name
     81HAVING AVG(r.quality) > 4 AND a.amount < 1000;
    7882}}}
    79832. Активности со најниски цени
    8084Го пресметува процентот на ефтини активности по дестинација – корисно за филтрирање при буџетско патување.
     85{{{
     86CREATE OR REPLACE VIEW view_procent_cheap_destinations AS
     87SELECT
     88    d.location_name,
     89    COUNT(CASE WHEN a.amount < 500 THEN 1 END) * 100.0 / COUNT(*) AS procent_cheap
     90FROM destination d
     91JOIN activity a ON d.id_destination = a.id_destination
     92GROUP BY d.id_destination, d.location_name
     93ORDER BY procent_cheap DESC;
     94}}}
     95
    8196{{{
    8297 DB::statement("