Changes between Version 5 and Version 6 of DatabaseProgramming


Ignore:
Timestamp:
05/23/26 20:43:39 (2 days ago)
Author:
231028
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseProgramming

    v5 v6  
    5353}}}
    5454
     55**Процедура за отпуштање/завршување на договор на возач во компанија**
     56
     57Процедурата прави две проверки. Првата проверка ја пребарува табелата Driver за id-то на возачот, доколку истото не постои се фрла соодветен исклучок. Потоа се проверува дали постои соодветен запис во табелата EmploymentHistory кој потврдува дека возачот е тековно вработен во компанијата. На крај се променува записот од табелата EmploymentHistory на тој начин што се става краен датум.
     58
    5559{{{
    5660create or replace procedure fire_driver(id_employee int, id_company int)
     
    8387}}}
    8488
     89**Процедура за отпуштање/завршување на договор на диспечер во компанија**
     90
     91Процедурата прави две проверки. Првата проверка ја пребарува табелата Dispatcher за id-то на диспечарот, доколку истото не постои се фрла соодветен исклучок. Потоа се проверува дали постои соодветен запис во табелата EmploymentHistory кој потврдува дека деспечерот е тековно вработен во компанијата. На крај се променува записот од табелата EmploymentHistory на тој начин што се става краен датум.
    8592
    8693{{{
     
    114121}}}
    115122
    116 **Процедура за пишување на оценка**
     123**Процедура за пишување на оцена**
     124
     125Оваа процедурата се повикува кога корисник испраќа свој коментар и рејтинг за возењето откако ќе пристигне на дестинацијата.
    117126
    118127{{{
     
    144153**Процедура за поднесување пријава**
    145154
    146 Оваа процедура се повикува кога корисниците сакаат да поднесат пријава за време на возењето. Тоа може да биде некоја поплака за брзо возење или скршнување од патот.
     155Оваа процедура се повикува кога корисниците поднесуваат пријава за време на возењето. Тоа може да биде некоја поплака од типот брзо возење или скршнување од патот.
    147156
    148157{{{
     
    155164    end;
    156165$$;
    157 {{{
     166}}}
    158167
    159168== Функции и тригери
    160169
     170**Тригер и функција за проверка на единствена оценка**
     171
     172Секој корисник смее да остави максимум една оценка за секое возење. Функцијата враќа тригер кој доколку во табелата Review постои оценка од корисникот за тоа возење фрла соодветен исклучот. Тригерот се извршува пред внес на запис во табелата Review.
     173
     174{{{
     175create or replace function check_one_review()
     176returns trigger
     177language plpgsql
     178as $$
     179    begin
     180        if 0 < (select count(*)
     181                from review
     182                where ride_id=new.ride_id and customer_user_id=new.customer_user_id)
     183        then
     184            raise exception 'There is already a review from the same customer for this ride';
     185        end if;
     186        return new;
     187    end;
     188$$;
     189create or replace trigger check_valid_review
     190    before insert on review
     191    for each row
     192    execute function check_one_review();
     193}}}
     194
     195**Тригер и функција за проверка на бројот на слободни седишта**
     196
     197Секој корисник при испраќање на барање за превоз напоменува колку патници ќе има (деца, воздрасни и бебиња). Функцијата check_available_seats проверува дали во возилото кое се нуди во понудата има доволно седишта. Функцијата враќа тригер кои се извршува пред внес или промена на запис во табелата Offer.
     198
     199{{{
     200create or replace function check_available_seats()
     201returns trigger
     202language plpgsql
     203as $$
     204    begin
     205        if (select v.passenger_capacity
     206            from vehicle v
     207            inner join driver_vehicle dv on v.vin=dv.vin_vehicle
     208            where dv.id_driver=new.driver_user_id)<(select r.number_of_children+r.number_of_adult_passengers+r.baby_seat_count
     209                                                    from request r
     210                                                    inner join offer o on r.id=o.request_id
     211                                                    where o.id=new.id)
     212            then
     213            raise exception 'Not enough seats in the vehicle';
     214        end if;
     215        return new;
     216    end;
     217$$;
     218create or replace trigger check_valid_seats
     219    before insert or update on offer
     220    for each row
     221    execute function check_available_seats();
     222}}}
     223