Datový model (rekonstrukce)
Databáze je silně normalizovaná. Schéma lze rekonstruovat z Otevřených dat, parametrů API a chybových hlášení. Přesné DDL skautIS není veřejné.
Objem dat (cca)
- 78 000+ členů (osoby v databázi)
- 2 300+ oddílů (aktivní výchovné jednotky)
- 20+ let historie členství a akcí
- Unikátnost osob zajištěna přes rodná čísla (u cizinců datum narození)
- Mechanismy pro slučování duplicitních účtů přes podporu
Klíčové entity
Jednotka (Unit)
Organizační strom (Ústředí → Kraj → (Okres) → Středisko → Oddíl → (Družina)) s rekurzivní vazbou ID_Parent, typem jednotky (UnitType), evidenčním číslem (RegistrationNumber), názvem, příznakem aktivity (IsActive – soft delete), vazbou na adresu (LocationID). Pro efektivní dotazy nad stromem (např. „všechny členy všech oddílů v kraji“) se využívají rekurzivní CTE (Common Table Expressions) nebo materializace cesty (Path Enumeration / Nested Sets) v uložených procedurách; složitá agregační logika je delegována na databázový server (T-SQL).
Osoba (Person) vs. Uživatel (User)
Striktní oddělení fyzické osoby (jméno, příjmení, RČ, datum narození) od přihlašovací identity. Person reprezentuje reálnou osobu; User reprezentuje přihlašovací účet (vazba 1:N – jedna osoba může teoreticky mít více účtů, snahou je 1:1). Validace formátu a unikátnosti RČ slouží jako primární mechanismus deduplikace členů. Bezpečnostní kód (Security Code): Každá osoba má přiřazen unikátní kód (UUID nebo alfanumerický), který slouží pro bezpečné přesuny mezi jednotkami bez nutnosti žádosti na ústředí.
Členství (Membership)
Časově ohraničený vztah Osoba–Jednotka s rokem (Year), typem členství (řádné, čestné, hostování) a stavem.
Stavy členství:
- Rozpracované – jednotka edituje registraci
- Odevzdané – předáno nadřízené úrovni ke kontrole
- Platné – po schválení vyšší jednotkou/ústředím
Rok členství: Kalendářní rok, rozhodný den pro věkové kategorie je 31. leden. Umožňuje historizaci – systém eviduje např. že někdo byl v jednom roce členem oddílu A, v dalším oddílu B, později vedoucím střediska C – což je klíčové pro služební léta a odznaky věrnosti.
Události (Events)
Dědičnost tabulek (Table-per-Type nebo Table-per-Hierarchy). Event_Base: společné atributy (název, datum, pořadatel). Event_Camp (tábor): GPS, katastrální území, hlavní vedoucí, zdravotník. Event_Education: typ kurzu (čekatelský, vůdcovský), kapacita, vazba na akreditační vyhlášku.
Bezpečnost (RBAC)
Oprávnění nejsou vázána přímo na uživatele, ale na role v kontextu jednotky. Tabulky Role (např. Event.Create, Person.View) a UserRole (ID_User, ID_Role, ID_Unit). Uživatel může být např. administrátor v oddíle a pouze čtenář v nadřízeném středisku.
Pravidla viditelnosti: Vedoucí vidí členy své jednotky a všech podřízených jednotek (např. vedoucí střediska vidí všechny oddíly pod ním). Vedoucí oddílu A nevidí členy oddílu B v jiném středisku bez explicitního oprávnění. Registrace a editace: Registraci nových členů provádí vedoucí oddílu nebo jím pověřený administrátor. Členi nad 15 let mohou editovat své údaje sami; u mladších to dělají rodiče nebo vedoucí.