Changes between Initial Version and Version 1 of RelationalModel


Ignore:
Timestamp:
04/22/26 18:03:07 (12 days ago)
Author:
231071
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • RelationalModel

    v1 v1  
     1= Релационен модел =
     2
     3== Релациски дијаграм ==
     4
     5Дијаграмот е изработен во Visual Paradigm Desktop Edition и го прикажува целосниот релациски модел на базата на податоци за евиденција на избори, со сите 23 табели, атрибути, примарни клучеви, странски клучеви и врски меѓу ентитетите.
     6
     7[[Image(RelationalModel.svg, 1400px)]]
     8
     9== Описна документација и аргументација ==
     10
     11=== Сегмент: Person → Candidate / Voter ===
     12
     13Person е централна базна табела која ги чува основните персонални податоци: name, surname, date_of_birth, gender.
     14
     15И Candidate и Voter наследуваат личност преку странски клуч person_id.
     16
     17Причина за ваквото моделирање: истото лице може да биде гласач во еден изборен циклус, а кандидат во друг. Исто така, кандидатот е граѓанин со право на глас, па еден person_id може истовремено да постои и во Candidate и во Voter табелата.
     18
     19Со централизирање на личните податоци во Person се избегнува редундантност и се осигурува конзистентност на податоците низ целата база.
     20
     21=== Сегмент: PoliticalParty → PartyLeader ===
     22
     23Лидерот на партијата е издвоен во посебна табела PartyLeader наместо да биде директен атрибут во PoliticalParty.
     24
     25Причина: лидерот е Person со свои персонални податоци, а лидерството се менува низ времето.
     26
     27Оваа структура овозможува историско следење на кој бил лидер на која партија и во кој период, без губење на историски записи.
     28
     29=== Сегмент: PoliticalParty → PartyCoalition → CoalitionMember ===
     30
     31Коалициите се моделирани преку посебен ентитет PartyCoalition поврзан со конкретен избор преку election_id.
     32
     33Членовите на коалицијата се евидентираат преку асоцијативната табела CoalitionMember.
     34
     35Причина: коалицискиот состав може да се менува меѓу изборни циклуси.
     36
     37Моделот овозможува прецизно следење кои партии биле дел од коалиција на кои конкретни избори, со можност за историска споредба.
     38
     39=== Сегмент: PoliticalEntity ===
     40
     41PoliticalEntity е генерички ентитет кој унифицирано претставува партија, коалиција или независен кандидат.
     42
     43Атрибутот type го разликува случајот, додека party_id, coalition_id и candidate_id се nullable во зависност од типот.
     44
     45Атрибутот is_independent го означува случајот кога кандидатот настапува без партиска припадност.
     46
     47Причина: табелите VoteResult, Ballot, CandidateList и ElectionParticipant се поврзуваат со еден унифициран ентитет наместо со три различни табели.
     48
     49Ова ја поедноставува аналитиката и ги намалува JOIN операциите при пребарување.
     50
     51=== Сегмент: Election → ElectionType / WinnerMethod / ElectionCycle ===
     52
     53Изборот е поврзан со три независни lookup табели:
     54
     55 * ElectionType — дефинира тип на избор (парламентарни, претседателски, локални итн.)
     56 * WinnerMethod — дефинира метод на одредување победник (мнозински, пропорционален итн.)
     57 * ElectionCycle — овозможува моделирање на повеќе изборни круга во рамките на ист избор
     58
     59Причина: со издвојување на овие атрибути во посебни табели, моделот станува целосно генеричен.
     60
     61Истата структура се користи за секаков тип на избори, во која било земја, без потреба од структурни промени во базата.
     62
     63=== Сегмент: Region → RegionType / ElectoralDistrict / PollingStation ===
     64
     65Region е хиерархиски организирана преку self-referencing атрибут parent_region_id, со што се моделираат различни административни нивоа:
     66
     67 * Земја
     68 * Регион
     69 * Општина
     70 * Населено место
     71
     72RegionType го дефинира нивото на регионот.
     73
     74ElectoralDistrict го поврзува регионот со конкретен избор и ги чува достапните места (seats_available), а PollingStation ги евидентира физичките гласачки места со адреса и број на регистрирани гласачи.
     75
     76Причина: хиерархискиот self-referencing дизајн на Region овозможува флексибилна примена за различни државни административни структури без промена на шемата.
     77
     78=== Сегмент: Ballot / VoteResult ===
     79
     80Ballot претставува евиденција на поединечно издадено гласачко ливче — поврзано со избор, гласачко место, политички ентитет и кандидат, со временска ознака (ballot_timestamp) и индикатор за валидност (is_valid).
     81
     82VoteResult претставува збирен резултат по гласачко место и политички ентитет, со вкупен број гласови (votes).
     83
     84Причина за раздвојувањето: Ballot овозможува детална ревизија и верификација на секое ливче, додека VoteResult овозможува брза аналитика и генерирање на резултати без процесирање на секој индивидуален запис.
     85
     86Клучно е да се напомене дека Ballot намерно не е поврзан со Person, со што тајноста на гласањето е загарантирана на ниво на дизајн на базата.
     87
     88=== Сегмент: CandidateList / CandidateListItem ===
     89
     90CandidateList ја поврзува листата на кандидати со конкретен избор и политички ентитет.
     91
     92CandidateListItem го евидентира секој кандидат на листата со неговата позиција (position).
     93
     94Причина: редоследот на кандидатите на изборна листа е правно релевантен при пропорционален систем на гласање.
     95
     96Со атрибутот position се овозможува прецизна евиденција на редоследот, а структурата поддржува листи со произволен број кандидати.
     97
     98=== Сегмент: StationElection / ElectionParticipant ===
     99
     100StationElection е асоцијативна табела која поврзува гласачко место со конкретен избор, бидејќи едно гласачко место може да биде активно на повеќе различни избори.
     101
     102ElectionParticipant ги евидентира политичките ентитети кои учествуваат во конкретна изборна единица (district_id), овозможувајќи прецизен приказ кој учесник настапил во кој дел на земјата.