Changes between Version 8 and Version 9 of AdvancedTopics


Ignore:
Timestamp:
05/20/26 13:17:54 (6 days ago)
Author:
231044
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedTopics

    v8 v9  
    5757
    5858[[Image(Balkan.png, 800px, align=center)]]
     59
     60== Промена во табелата !ScheduledFlight ==
     61
     62При иницијално пополнување на податоците во табелата !ScheduledFlight, во колоната Distance беа поставени случајни податоци (искалкулирани според времето на полетување и слетување кои исто така се случајно пополнети). Со цен вршење на реални пресмети за цена на летовите како и поени за патниците потребно е да се знае вистинското растојание кое го поминува секој лет.
     63
     64За исполнување на таа цен потребно беше да се пресмета вистинското растојание употребувајќи ја новата колона Location во табелата Airport. PostGIS нуди функционалност пресметка на растојание помеѓу две точки ST_Distance. За промена на колоната Distance го извршивме следниот SQL код:
     65
     66{{{
     67#!sql
     68update airport
     69update scheduledflight as sf
     70set distance = greatest(1, round(ST_Distance(dep.location, arr.location) / 1000)::int)
     71from slot as ds
     72join gate as dg on ds.gateid = dg.id
     73join terminal as dt on dg.terminalid = dt.id
     74join airport as dep on dep.id = dt.airportid,
     75    slot as asl
     76join gate as ag on asl.gateid = ag.id
     77join terminal as at on at.id = ag.terminalid
     78join airport as arr on arr.id = at.airportid
     79where sf.departure = ds.id and
     80      sf.arrival = asl.id and
     81      dep.location is not null and
     82      arr.location is not null;
     83}}}
     84
     85Поради тоа што поставен е Check кој проверува дали растојанието е барем 1 километар, потребно беше да се избере поголемата вредност помеѓу 1 и ST_Distance(dep.location, arr.location) за да може успешно да се вметнат сите колони.
     86
     87=== Тригер Calculate Distance ===
     88
     89Иако кодот погоре ги корегира веќе постоечките податоци за Distance, при додавање на нов ScheduledFlight или промена на некој од слотовите за полетување и слетување не се врши повторна пресметка. За таа цел имплементиравме тригер кои при изведување на некои од овие активности врши повторна пресметка на растојанието. Вака се озовможува конзистентност на податоците.
     90
     91[attachment:CalculateDistance.sql]
    5992
    6093