= Програмирање база на податоци '''Членови на тим:''' - Aлександар Тодороски 231153 - Антонио Трајковски 231156 - Вељко Аџиќ 231267 == Тригери === 1. trg_check_contract Овој тригер се извршува пред додавање или ажурирање на ред во `sportsperson_contract`. Доколку клубот на новиот договор е национална репрезентација и спортистот не е од таа држава фрла грешка. Исто така, осигурува дека спортистот има најмногу еден договор за национална репрезентација и најмногу еден активен договор за стандарден клуб. [[Image(trg_1.png)]] === 2. trg_check_team_roster Овој тригер врши проверка на `team_roster` пред секое додавање или ажурирање. Се проверува дека бројот на играчи во не го надминува капацитетот, ново додадениот играчот да има активен договор за целосното траење на дуел и да не е во друга екипа за тој дуел. [[Image(trg_2.png)]] === 3. trg_check_team_sport_and_rep Тригерот врши валидација пред додавање или ажурирање на ред во `duel`. Се проверува дали клубовите на тимовите постојат, се осигурува дуелот да е против две национални репрезентации или два обични тима. Дополнително проверува за секој тим дали нивната федерација е активна до датумот на дуелот, и проверува дали тимовите игра соодветна спортска категорија за тој дуел. [[Image(trg_3.png)]] == Функции Освен функциите за тригери, единствена друга функција во ова база е `valid_date_range`. Таа се користи да провери дали внесен опсег на датуми е валиден. [[Image(fn_1.png)]] == Процедури === 1. Регистрација на спортист Ова процедура ни овозможува да се регистрира нов спортист. Ги валидира внесените податоци и креира нови записи во person и `sportsperson`. Ова процедура ја отстранува потребата за проверка и валидација на влезни податоци од апликацијата и за одржување на наследството `sportsperson` од `person`. [[Image(pr_reg_sportsperson.png)]] === 2. Регистрација на тренер Процедура `register_coach` ни овозможува да се регистрира нов тренер каде извршува валидација на влезните податоци и го одржува наследството на `coach` од `person`. Целта на процедурата е да ја отстранува потребата за проверка и валидација на влезни податоци од апликацијата и за одржување на наследството. [[Image(pr_reg_coach.png)]] === 3. Регистрација на судија Со ова процедура може да се регистрира нов судија каде се валидираат влезните податоци и се одржува наследството на `referee` од `person`. Процедурата има цел да е да ја отстрани потребата за проверка и валидација на влезни податоци од апликацијата и за одржување на наследството. [[Image(pr_reg_referee.png)]] === 4. Додавање нов договор `add_contract` е процедура која се користи за додавање или обновување на договор на играч. Прво се проверува дали постои играч, дали се валидни почетен и краен датум, дали е валидна сумата, и доколку се помине оди на додавање договор. Ако играчот има активен договор со неопределен рок, или договор што завршил, се проверува валидноста на клубот и дополнително почетниот датум да е по завршниот датум на стариот договор, се затвара стариот договори се додава нов. Ако играчот нема предходен договор се прескокнуваат овие проверки и само се додава новиот договор во системот. [[Image(pr_add_contract.png)]] === 5. Позајмување играч Процедурата `borrow_player` овозмоќува позајмување на играчи од еден клуб во друг. Тука како основни проверки имаме дали времето е соодветно, дали играшот постои, дали клубовите потојат. Потоа се проверува дали играчот има договор со клубот и дополнително дали е валиден периодот за позајмување. Ако поминат сите проверки, ќе се заврши стариот договор, ќе се креира нов договор со позајмувачкиот клуб, и ќе се креира нов договор со стариот клуб кој почнува од датумот на завршување на позајмувањето до стариот завршен датум. [[Image(pr_borrow_player.png)]] === 6. Промоција на спортист во тренер `promote_sportsperson_to_coach` е процедура ни помага еден играч да се промовира во требер. Се проверува дали постои играчот, да не е веќе промовиран, дали постои федерација и да нема активен договор. Ако се поминат сите проверки се креира нов тренер во системот. [[Image(pr_promote_sportsperson_to_coach.png)]] === 7. Создавање нова сезона `start_new_season` е процедура која помага при започнување на нова сезона за одредена лига. Прво имаме проверки за гоида и лига, потоа ги додаваме новите датуми за почеток и крај, ја додаваме сезпмата во главната табела и другите табели што зимаат податоци од неа. Дополнително, автоматски се креираат тимови во сезоната, се креираат натпревари и се генерираат дуели. [[Image(pr_start_new_season.png)]] === 8. Презакажување на дуел `reschedule_duel` е процедура која има улога да презакаже дуел. Извршува валидација на влезните податоци (дали постои дуел, дали е валидно новото време), а потоа одат попократни проверки дали судијата, домаќинот и противникот се слободни тој период, ако се тогаш се ажурира почетокот на дуелот. [[Image(pr_reschedule_duel.png)]] === 9. ...