Changes between Version 6 and Version 7 of DatabaseCreation
- Timestamp:
- 06/15/26 10:32:02 (4 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
DatabaseCreation
v6 v7 111 111 == Спонсортство 112 112 113 Ентитетот `SPONSORSHIP` претставува спонзорство помеѓу спонзор и тим и е дефиниран со о краничување `amount` да е позитивна, ограничување кое проверува валидност на почетен и краен датум, и два надворешни клуча кои соодветно референцираат кон спортски тим и спонзор.113 Ентитетот `SPONSORSHIP` претставува спонзорство помеѓу спонзор и тим и е дефиниран со ограничување `amount` да е позитивна, ограничување кое проверува валидност на почетен и краен датум, и два надворешни клуча кои соодветно референцираат кон спортски тим и спонзор. 114 114 115 115 Вредности за ова табела се генерираат на тој начин што за секој тим се спојува со 7 случајни спонзори и се доделуваат случајни вредности за почетен и краен датум и за исплатата. Ова генерира 3.351.076 вредности. … … 157 157 == Дуел 158 158 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` доколку дуелот е закажан за во иднина. 160 160 161 161 Со кверито се генерираат податоци за дуели помеѓу национални репрезентации од иста спортска категорија. За секој дуел случајно се избира локација, се генерира случаен датум во минатото или иднината за најмногу 5 години. За веќе одиграните натпревари се доделуваат случајни резултати според правилата дефинирани во `score_logic` за соодветниот спорт. На овој начин се добиваат реалистични податоци со различни датуми, локации и резултати за повеќе спортови. … … 164 164 [[Image(duel.png)]] 165 165 166 Дополнително го имаме и ова квери за генерирање на надуели на нерепрезентациски натпревари. Работи на сличен принцип на претходното, но ова квери извршува дополнителни проверки.166 Дополнително го имаме и ова квери за генерирање на дуели на нерепрезентациски натпревари. Работи на сличен принцип на претходното, но ова квери извршува дополнителни проверки. 167 167 168 168 Двете кверија генерираат вкупно 16.069.000 дуели. … … 175 175 Табелата `PERSON` е дефинирана со ограничување датумот на раѓање да е подоцна од 01.01.1900 и полот да има вредност `M` или `F`. Дополнително има дефинирано надворешен клуч кој референцира кон табелата за држава. 176 176 177 Генерирање на редици за оваа табела се врши во две кверија, едното генерира машки, д угото женски. Генерирањето користи привремени табели `temp_male_names`, `temp_female_names` и `temp_surnames` кои се генерирани од готово множество од имиња и презимиња. Во двете си избира случајен датум на раѓање, случајно име и презиме и случајна држава на раѓање, потоа се генерира ЕМБГ според генерираниот датум на раѓање.177 Генерирање на редици за оваа табела се врши во две кверија, едното генерира машки, другото женски. Генерирањето користи привремени табели `temp_male_names`, `temp_female_names` и `temp_surnames` кои се генерирани од готово множество од имиња и презимиња. Во двете си избира случаен датум на раѓање, случајно име и презиме и случајна држава на раѓање, потоа се генерира ЕМБГ според генерираниот датум на раѓање. 178 178 179 179 Од ова се генерирани 13.206.598 редици. … … 185 185 Табелата `REFEREE` наследува од `PERSON` па затоа примарниот клуч е исто така надворешен клуч кој референцира кон човек и е поставено каскадно да се брише. Исто така има и надворешни клучеви кои референцираат кон федерација и спортска категорија соодветно. 186 186 187 Пред да се генерираат судии, се креира привремена табела `tmp_people` која ѓи содржи сите луѓе подредени на случаен начин. Со помош на оваа табела за секоја федерација се спојуваат 100 редици од привремената табела. Со ова се генерираат 5.594.200 судии.187 Пред да се генерираат судии, се креира привремена табела `tmp_people` која ги содржи сите луѓе подредени на случаен начин. Со помош на оваа табела за секоја федерација се спојуваат 100 редици од привремената табела. Со ова се генерираат 5.594.200 судии. 188 188 189 189 [[Image(referee.png)]] … … 193 193 Табелата `COACH`, исто како `REFEREE`, наследува од `PERSON` и затоа примарниот клуч е надворешниот клуч кој референцира кон човек е каскадно се брише. Исто има и надворешни клучеви кои референцираат кон федерација и спортска категорија. 194 194 195 За генерирање податоци за оваа табел прво се креира нова привремена табела `tmp_people_no_referee` која ги содржи останатите вредности кои не се искористени во генерирање на судии. На сличен принцип како судии, се генерираат вреднстите и за тренер така за секој тим случајно се спојува федерација и се одбираат две случајни луѓе. За оваа табела се генерирани 552.125 редици.195 За генерирање податоци за оваа табела прво се креира нова привремена табела `tmp_people_no_referee` која ги содржи останатите вредности кои не се искористени во генерирање на судии. На сличен принцип како судии, се генерираат вредностите и за тренер така за секој тим случајно се спојува федерација и се одбираат две случајни луѓе. За оваа табела се генерирани 552.125 редици. 196 196 197 197 [[Image(coach.png)]] … … 201 201 `SPORTSPERSON` е дефинирана со надворешен клуч кој референцира човек и е поставено каскадно да се брише (бидејќи наследува од таа табела), и клуч кој референцира спортска категорија. 202 202 203 Пред генерирање на податоци се креира привремена табела `tmp_sportspersons_pool` која ги содржи сите останатите луѓе што не биле доделени како с идуја или тренер. Според тимовите се доделуваат случајно спортски категории на спортистот. Вака се генерираат 2.180.588 спортисти.203 Пред генерирање на податоци се креира привремена табела `tmp_sportspersons_pool` која ги содржи сите останатите луѓе што не биле доделени како судија или тренер. Според тимовите се доделуваат случајно спортски категории на спортистот. Вака се генерираат 2.180.588 спортисти. 204 204 205 205 [[Image(sportsperson.png)]] … … 207 207 == Тренирање тим 208 208 209 Табелата `COACHING_TEAM` претставува врска помеѓу `COACH` и `SPORT_TEAM`. Дефинирана е ограничување за проверка на валидност на почетен и кра недатум, како и надворешни клучеви кои референцираат кон спортски тим и тренер соодветно. Дополнително, има дефинирано комплексен примарен клуч создаден од `team_id` и `coack_ssn`.209 Табелата `COACHING_TEAM` претставува врска помеѓу `COACH` и `SPORT_TEAM`. Дефинирана е ограничување за проверка на валидност на почетен и краен датум, како и надворешни клучеви кои референцираат кон спортски тим и тренер соодветно. Дополнително, има дефинирано комплексен примарен клуч создаден од `team_id` и `coack_ssn`. 210 210 211 211 Полнење на ова табела се врши така што за секој се доделува до два тренери и се доделува случаен почетен датум пред 6 до 7 години во минатото. Ова генерира 478.725 редици. … … 222 222 Второто квери на исти начин генерира договори за секој тим на секој клуб што е национална репрезентација. 223 223 224 Последното квери генерира историски податоци, односно генерира договори кои се истечени. Го генерира на сличен начин како првото, за секој тим на секој клуб што не е репрезен ација, но почетниот датум е пред 13 до 14 години, а крајниот датум е до пред 11 до 12 години.224 Последното квери генерира историски податоци, односно генерира договори кои се истечени. Го генерира на сличен начин како првото, за секој тим на секој клуб што не е репрезентација, но почетниот датум е пред 13 до 14 години, а крајниот датум е до пред 11 до 12 години. 225 225 226 226 Овие кверија генерираат 4.107.739 договори. … … 230 230 == Екипа 231 231 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 милиони редици. 238 238 239 239 [[Image(team_roster.png)]] … … 241 241 == Судење на дуел 242 242 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` која креира пар за секој судија случаен дуел. 246 246 247 247 Од `tmp_ref_assignment` се внесуваат првата фаза на податоци во табелата. 248 248 249 Се креира дополнителна привремена табела `tmp_ref_assignment2` која е слична на првата, но додава поместување за да се ра поредат судиите во разни дуели, односно да немаме кластерирање. Исто така се внесуваат сите податоци од `tmp_ref_assignment2` во `REFEREEING_DUEL`.249 Се креира дополнителна привремена табела `tmp_ref_assignment2` која е слична на првата, но додава поместување за да се распоредат судиите во разни дуели, односно да немаме кластерирање. Исто така се внесуваат сите податоци од `tmp_ref_assignment2` во `REFEREEING_DUEL`. 250 250 251 251 Се вкупно се генерираат 32.543.880 редици. … … 257 257 Табелата `SCORE` има цел да води евиденција за кој играч во кој дуел кога добил гол. Таа е дефинирана со надворешни клучеви кои референцираат кон играч и кон дуел соодветно. 258 258 259 Пред да се генерираат податоци ре за `SCORE` се креираат привремени табели `tmp_score_data`, која ги зима сите завршени дуели и времетраењето на секој, и `tmp_roster_data` која ги зима сите валидни играчи.259 Пред да се генерираат податоците за `SCORE` се креираат привремени табели `tmp_score_data`, која ги зима сите завршени дуели и времетраењето на секој, и `tmp_roster_data` која ги зима сите валидни играчи. 260 260 261 261 Генерирање на податоци се прави во две `INSERT` кверија, така што во двете кверија за секој гол се избира случаен момент во текот на дуелот од сите активни играчи во тој момент се бира еден случаен играч и се запишува како стрелец на голот. Едното квери ги генерира за домаќин головите, другото за противникот.
