Changes between Version 4 and Version 5 of RelationalModel


Ignore:
Timestamp:
04/22/26 23:23:04 (10 days ago)
Author:
231099
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • RelationalModel

    v4 v5  
    77
    88== Дополнителен Опис
    9 
    10 === Модел на пријателства (friendships) =
    11 Пријателството е моделирано како една релација помеѓу два корисници, при што секогаш се чуваат како '''user_id_low''' и '''user_id_high''' со услов првиот да е помал. Ова спречува дупликати како (A,B) и (B,A). Полето '''requested_by_user_id''' покажува кој ја испратил поканата, а '''status''' ја следи состојбата (pending, accepted, blocked).
     9=== Mодел на пријателства (friendships) =
     10Пријателството е моделирано како една релација помеѓу два корисници, при што секогаш се чуваат како `user_id_low` и `user_id_high` со услов првиот да е помал. Ова спречува дупликати како (A,B) и (B,A). Полето `requested_by_user_id` покажува кој ја испратил поканата, а `status` ја следи состојбата (pending, accepted, blocked).
    1211
    1312----
    1413
    15 === Модел на натпревари (matches, match_teams, match_participants) =
     14=== Mодел на натпревари (matches, match_teams, match_participants) =
    1615Натпреварот е поделен на три дела: сам натпревар, тимови во натпреварот и играчи во тие тимови. Ова овозможува јасна структура: натпревар -> тимови -> играчи. Со надворешен клуч се осигурува дека играч може да припаѓа само на тим кој е дел од конкретниот натпревар. Овој пристап е флексибилен и поддржува различни типови игри.
    1716
    1817----
    1918
    20 = Преференци и нотификации =
     19=== Преференци и нотификации =
    2120Преференците чуваат кои игри му се омилени на корисникот, а нотификациите можат да се поврзат со тие преференци. Така системот може да испраќа известувања поврзани со интересите на корисникот, на пример за нов турнир во омилена игра.
    2221
    2322----
    2423
    25 = Many-to-many релации (game_genres, game_developers) =
     24=== Many-to-many релации (game_genres, game_developers) =
    2625Овие релации се решени со помошни (junction) табели со составен примарен клуч. Ова значи дека една игра може да има повеќе жанрови, а еден жанр може да припаѓа на повеќе игри.
    2726
    2827----
    2928
    30 = Членство во тим (team_memberships) =
     29=== Членство во тим (team_memberships) =
    3130Членството е моделирано како посебна табела затоа што не е само врска, туку има дополнителни информации како улога (капетан, член, тренер) и статус. Така може да се следи кој корисник во кој тим е и каква улога има.
    3231
    3332----
    3433
    35 = Претплати и плаќања (subscriptions, payments) =
     34=== Претплати и плаќања (subscriptions, payments) =
    3635Се чуваат информации за претплатите и нивните периоди, а плаќањата се поврзани со нив. Со посебен услов се осигурува дека еден корисник може да има само една активна претплата.
    3736
    3837----
    3938
    40 = Постигнувања (user_achievements) =
     39=== Постигнувања (user_achievements) =
    4140Оваа табела покажува кои корисници кои постигнувања ги отклучиле и кога. Така може да се следи напредокот на корисниците и да се прават статистики.
    4241
    4342----
    4443
    45 = Сервери и локации =
     44=== Сервери и локации =
    4645Локацијата е одделена во посебна табела, а серверите се поврзани со неа. Ова избегнува дуплирање на податоци и овозможува повеќе сервери да користат иста локација.
    4746
    4847----
    4948
    50 = Систем за статистики (stat_types, participant_stats) =
    51 Статистиките се моделирани на флексибилен начин преку две табели. Во '''stat_types''' се дефинираат типовите на статистики за секоја игра (на пример: kills, assists, deaths, headshots), додека во '''participant_stats''' се чуваат конкретните вредности за секој играч во одреден натпревар. Ова значи дека за еден играч во еден натпревар може да има повеќе записи – по еден за секој тип на статистика.
     49=== Систем за статистики (stat_types, participant_stats) =
     50Статистиките се моделирани на флексибилен начин преку две табели. Во `stat_types` се дефинираат типовите на статистики за секоја игра (на пример: kills, assists, deaths, headshots), додека во `participant_stats` се чуваат конкретните вредности за секој играч во одреден натпревар. Ова значи дека за еден играч во еден натпревар може да има повеќе записи – по еден за секој тип на статистика.
    5251
    5352Овој пристап е избран затоа што различни игри имаат различни метрики, па не е практично да се прават фиксни колони (на пример kills, assists, итн.) за сите игри. Наместо тоа, моделот овозможува лесно додавање нови типови статистики без промена на структурата на базата. Со тоа системот станува многу пофлексибилен и проширлив.
    5453
    55 Дополнително, овој дизајн е погоден за интеграција со надворешни сервиси, како на пример FACEIT API. Бидејќи FACEIT API враќа статистики во динамичен формат (различни игри, различни полиња), овие податоци можат директно да се мапираат во '''stat_types''' и '''participant_stats''' без потреба од промена на базата. Ова овозможува системот автоматски да увезува и чува реални статистики од натпревари, што ја зголемува точноста и функционалноста на апликацијата.
     54Дополнително, овој дизајн е погоден за интеграција со надворешни сервиси, како на пример FACEIT API. Бидејќи FACEIT API враќа статистики во динамичен формат (различни игри, различни полиња), овие податоци можат директно да се мапираат во `stat_types` и `participant_stats` без потреба од промена на базата. Ова овозможува системот автоматски да увезува и чува реални статистики од натпревари, што ја зголемува точноста и функционалноста на апликацијата.ункционалноста на апликацијата.