Changes between Version 6 and Version 7 of DatabaseCreation


Ignore:
Timestamp:
06/15/26 10:32:02 (4 days ago)
Author:
231267
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseCreation

    v6 v7  
    111111== Спонсортство
    112112
    113 Ентитетот `SPONSORSHIP` претставува спонзорство помеѓу спонзор и тим и е дефиниран со окраничување `amount` да е позитивна, ограничување кое проверува валидност на почетен и краен датум, и два надворешни клуча кои соодветно референцираат кон спортски тим и спонзор.
     113Ентитетот `SPONSORSHIP` претставува спонзорство помеѓу спонзор и тим и е дефиниран со ограничување `amount` да е позитивна, ограничување кое проверува валидност на почетен и краен датум, и два надворешни клуча кои соодветно референцираат кон спортски тим и спонзор.
    114114
    115115Вредности за ова табела се генерираат на тој начин што за секој тим се спојува со 7 случајни спонзори и се доделуваат случајни вредности за почетен и краен датум и за исплатата. Ова генерира 3.351.076 вредности.
     
    157157== Дуел
    158158
    159 Оваа табела е дефинирана се ограничување кое проверува дали домаќинот и противникот се различни, и надворешни клучеви кои референцираат кон натпревар (ако е `NULL` тогаш се подразбира дека е пријателска утакмица), клучевите `home_team_id` и `away_team_id` кои референцираат кон спортски тим, надворешен клуч кој референцира кон локација, и клуч кој референцира кон спортска категорија. Вредностите на `home_team_score` и `away_team_score` се `NULL` доколку дуелот е закажан за во иднина.
     159Оваа табела е дефинирана се ограничување кое проверува дали домаќинот и противникот се различни, и надворешни клучеви кои референцираат кон натпревар (ако е `NULL` тогаш се подразбира дека е пријателски дуел), клучевите `home_team_id` и `away_team_id` кои референцираат кон спортски тим, надворешен клуч кој референцира кон локација, и клуч кој референцира кон спортска категорија. Вредностите на `home_team_score` и `away_team_score` се `NULL` доколку дуелот е закажан за во иднина.
    160160
    161161Со кверито се генерираат податоци за дуели помеѓу национални репрезентации од иста спортска категорија. За секој дуел случајно се избира локација, се генерира случаен датум во минатото или иднината за најмногу 5 години. За веќе одиграните натпревари се доделуваат случајни резултати според правилата дефинирани во `score_logic` за соодветниот спорт. На овој начин се добиваат реалистични податоци со различни датуми, локации и резултати за повеќе спортови.
     
    164164[[Image(duel.png)]]
    165165
    166 Дополнително го имаме и ова квери за генерирање на на дуели на нерепрезентациски натпревари. Работи на сличен принцип на претходното, но ова квери извршува дополнителни проверки.
     166Дополнително го имаме и ова квери за генерирање на дуели на нерепрезентациски натпревари. Работи на сличен принцип на претходното, но ова квери извршува дополнителни проверки.
    167167
    168168Двете кверија генерираат вкупно 16.069.000 дуели.
     
    175175Табелата `PERSON` е дефинирана со ограничување датумот на раѓање да е подоцна од 01.01.1900 и полот да има вредност `M` или `F`. Дополнително има дефинирано надворешен клуч кој референцира кон табелата за држава.
    176176
    177 Генерирање на редици за оваа табела се врши во две кверија, едното генерира машки, дугото женски. Генерирањето користи привремени табели `temp_male_names`, `temp_female_names` и `temp_surnames` кои се генерирани од готово множество од имиња и презимиња. Во двете си избира случајен датум на раѓање, случајно име и презиме и случајна држава на раѓање, потоа се генерира ЕМБГ според генерираниот датум на раѓање.
     177Генерирање на редици за оваа табела се врши во две кверија, едното генерира машки, другото женски. Генерирањето користи привремени табели `temp_male_names`, `temp_female_names` и `temp_surnames` кои се генерирани од готово множество од имиња и презимиња. Во двете си избира случаен датум на раѓање, случајно име и презиме и случајна држава на раѓање, потоа се генерира ЕМБГ според генерираниот датум на раѓање.
    178178
    179179Од ова се генерирани 13.206.598 редици.
     
    185185Табелата `REFEREE` наследува од `PERSON` па затоа примарниот клуч е исто така надворешен клуч кој референцира кон човек и е поставено каскадно да се брише. Исто така има и надворешни клучеви кои референцираат кон федерација и спортска категорија соодветно.
    186186
    187 Пред да се генерираат судии, се креира привремена табела `tmp_people` која ѓи содржи сите луѓе подредени на случаен начин. Со помош на оваа табела за секоја федерација се спојуваат 100 редици од привремената табела. Со ова се генерираат 5.594.200 судии.
     187Пред да се генерираат судии, се креира привремена табела `tmp_people` која ги содржи сите луѓе подредени на случаен начин. Со помош на оваа табела за секоја федерација се спојуваат 100 редици од привремената табела. Со ова се генерираат 5.594.200 судии.
    188188
    189189[[Image(referee.png)]]
     
    193193Табелата `COACH`, исто како `REFEREE`, наследува од `PERSON` и затоа примарниот клуч е надворешниот клуч кој референцира кон човек е каскадно се брише. Исто има и надворешни клучеви кои референцираат кон федерација и спортска категорија.
    194194
    195 За генерирање податоци за оваа табел прво се креира нова привремена табела `tmp_people_no_referee` која ги содржи останатите вредности кои не се искористени во генерирање на судии. На сличен принцип како судии, се генерираат вреднстите и за тренер така за секој тим случајно се спојува федерација и се одбираат две случајни луѓе. За оваа табела се генерирани 552.125 редици.
     195За генерирање податоци за оваа табела прво се креира нова привремена табела `tmp_people_no_referee` која ги содржи останатите вредности кои не се искористени во генерирање на судии. На сличен принцип како судии, се генерираат вредностите и за тренер така за секој тим случајно се спојува федерација и се одбираат две случајни луѓе. За оваа табела се генерирани 552.125 редици.
    196196
    197197[[Image(coach.png)]]
     
    201201`SPORTSPERSON` е дефинирана со надворешен клуч кој референцира човек и е поставено каскадно да се брише (бидејќи наследува од таа табела), и клуч кој референцира спортска категорија.
    202202
    203 Пред генерирање на податоци се креира привремена табела `tmp_sportspersons_pool` која ги содржи сите останатите луѓе што не биле доделени како сидуја или тренер. Според тимовите се доделуваат случајно спортски категории на спортистот. Вака се генерираат 2.180.588 спортисти.
     203Пред генерирање на податоци се креира привремена табела `tmp_sportspersons_pool` која ги содржи сите останатите луѓе што не биле доделени како судија или тренер. Според тимовите се доделуваат случајно спортски категории на спортистот. Вака се генерираат 2.180.588 спортисти.
    204204
    205205[[Image(sportsperson.png)]]
     
    207207== Тренирање тим
    208208
    209 Табелата `COACHING_TEAM` претставува врска помеѓу `COACH` и `SPORT_TEAM`. Дефинирана е ограничување за проверка на валидност на почетен и кране датум, како и надворешни клучеви кои референцираат кон спортски тим и тренер соодветно. Дополнително, има дефинирано комплексен примарен клуч создаден од `team_id` и `coack_ssn`.
     209Табелата `COACHING_TEAM` претставува врска помеѓу `COACH` и `SPORT_TEAM`. Дефинирана е ограничување за проверка на валидност на почетен и краен датум, како и надворешни клучеви кои референцираат кон спортски тим и тренер соодветно. Дополнително, има дефинирано комплексен примарен клуч создаден од `team_id` и `coack_ssn`.
    210210
    211211Полнење на ова табела се врши така што за секој се доделува до два тренери и се доделува случаен почетен датум пред 6 до 7 години во минатото. Ова генерира 478.725 редици.
     
    222222Второто квери на исти начин генерира договори за секој тим на секој клуб што е национална репрезентација.
    223223
    224 Последното квери генерира историски податоци, односно генерира договори кои се истечени. Го генерира на сличен начин како првото, за секој тим на секој клуб што не е репрезенација, но почетниот датум е пред 13 до 14 години, а крајниот датум е до пред 11 до 12 години.
     224Последното квери генерира историски податоци, односно генерира договори кои се истечени. Го генерира на сличен начин како првото, за секој тим на секој клуб што не е репрезентација, но почетниот датум е пред 13 до 14 години, а крајниот датум е до пред 11 до 12 години.
    225225
    226226Овие кверија генерираат 4.107.739 договори.
     
    230230== Екипа
    231231
    232 Табелата `TEAM_ROSTER` претставува врска помеѓу играч, неговиот тим и улество во дуел, и затоа е дефинирана со комплексен клуч кој ги содржи `player_ssn`, `team_id` и `duel_id`. Дополнително е дефинирано ограничување кое проверува валидноста на почетно и крајно време, дефинирани се и надворешни клучеви кои референцираат спортист, спортски тим и дуел.
    233 
    234 
    235 Пред да се генерираат податоците, прво се креираат привремени табели `tmp_contract_pool`, `tmp_duel_pool` кои служат како множество од кое да се генерираат податоците. Дополнително, има и табела `team_roster_progress` која служи за следење информации колку се генерирани податоците. Во случај да преќине процедурата може пак да продолжи од последната залувана точка.
    236 
    237 Бидејќи многу време му требаше на ова квери да се изврши и често паѓаше беше создадена привремена процедура `insert_team_roster_batched_fixed`. Таа процедура обработува во серии од по 10.000 дуели, при што за домашниот и гостинскиот тим се избираат играчи со активни договори кои одговараат на спортската категорија и клубот на тимот. По секоја серија се извршува `COMMIT` и се ажурира контролна точка. Дополнително, за мал дел од играчите се генерира пократко време на настап со цел да се добијат пореалистични податоци. Oвa процедура генерирапе над 80 милиони редици.
     232Табелата `TEAM_ROSTER` претставува врска помеѓу играч, неговиот тим и учество во дуел, и затоа е дефинирана со комплексен клуч кој ги содржи `player_ssn`, `team_id` и `duel_id`. Дополнително е дефинирано ограничување кое проверува валидноста на почетно и крајно време, дефинирани се и надворешни клучеви кои референцираат спортист, спортски тим и дуел.
     233
     234
     235Пред да се генерираат податоците, прво се креираат привремени табели `tmp_contract_pool`, `tmp_duel_pool` кои служат како множество од кое да се генерираат податоците. Дополнително, има и табела `team_roster_progress` која служи за следење информации колку се генерирани податоците. Во случај да прекине процедурата може пак да продолжи од последната залувана точка.
     236
     237Бидејќи многу време му требаше на ова квери да се изврши и често паѓаше беше создадена привремена процедура `insert_team_roster_batched_fixed`. Таа процедура обработува во серии од по 10.000 дуели, при што за домашниот и гостинскиот тим се избираат играчи со активни договори кои одговараат на спортската категорија и клубот на тимот. По секоја серија се извршува `COMMIT` и се ажурира контролна точка. Дополнително, за мал дел од играчите се генерира пократко време на настап со цел да се добијат пореалистични податоци. Oвa процедура генерираше над 80 милиони редици.
    238238
    239239[[Image(team_roster.png)]]
     
    241241== Судење на дуел
    242242
    243 Табелата `REFEREEING_DUEL` ја претставува врската помеѓу `REFEREE` и `DUEL`, па затоа е дефинирана со комплексен примарен клуч кој ги содржи вредностите `referee_ssn` и `duel_id`. Дополнително се дефенирани и надворешни клучеви кои референцираат кој судија и кон дуел соодветно.
    244 
    245 При генерирање првин се генерираат привремените табели `tmp_duel_federation`, каде за секој дуел се генерира соодветна федерација (ако дуелот е дел од наптревар се користи организациската федерација, ако не се користи по случајен избор), и `tmp_ref_assignment` која креира пар за секој судија случаен дуел.
     243Табелата `REFEREEING_DUEL` ја претставува врската помеѓу `REFEREE` и `DUEL`, па затоа е дефинирана со комплексен примарен клуч кој ги содржи вредностите `referee_ssn` и `duel_id`. Дополнително се дефинирани и надворешни клучеви кои референцираат кој судија и кон дуел соодветно.
     244
     245При генерирање првин се генерираат привремените табели `tmp_duel_federation`, каде за секој дуел се генерира соодветна федерација (ако дуелот е дел од натпревар се користи организациската федерација, ако не се користи по случаен избор), и `tmp_ref_assignment` која креира пар за секој судија случаен дуел.
    246246
    247247Од `tmp_ref_assignment` се внесуваат првата фаза на податоци во табелата.
    248248
    249 Се креира дополнителна привремена табела `tmp_ref_assignment2` која е слична на првата, но додава поместување за да се рапоредат судиите во разни дуели, односно да немаме кластерирање. Исто така се внесуваат сите податоци од `tmp_ref_assignment2` во `REFEREEING_DUEL`.
     249Се креира дополнителна привремена табела `tmp_ref_assignment2` која е слична на првата, но додава поместување за да се распоредат судиите во разни дуели, односно да немаме кластерирање. Исто така се внесуваат сите податоци од `tmp_ref_assignment2` во `REFEREEING_DUEL`.
    250250
    251251Се вкупно се генерираат 32.543.880 редици.
     
    257257Табелата `SCORE` има цел да води евиденција за кој играч во кој дуел кога добил гол. Таа е дефинирана со надворешни клучеви кои референцираат кон играч и кон дуел соодветно.
    258258
    259 Пред да се генерираат податоцире за `SCORE` се креираат привремени табели `tmp_score_data`, која ги зима сите завршени дуели и времетраењето на секој, и `tmp_roster_data` која ги зима сите валидни играчи.
     259Пред да се генерираат податоците за `SCORE` се креираат привремени табели `tmp_score_data`, која ги зима сите завршени дуели и времетраењето на секој, и `tmp_roster_data` која ги зима сите валидни играчи.
    260260
    261261Генерирање на податоци се прави во две `INSERT` кверија, така што во двете кверија за секој гол се избира случаен момент во текот на дуелот од сите активни играчи во тој момент се бира еден случаен играч и се запишува како стрелец на голот. Едното квери ги генерира за домаќин головите, другото за противникот.