- rajzolj fel egy fát (aminek fent van a gyökere, piramis-szerûen)
- minden csomópont egy node
- Az alsó node alá 5-15 user tartozik, amibõl az egyik a node-ban is tárolt megbízott.
- Minden nodehoz tartozik egy user (megbízott). Nem alsó node-hoz a megbízottat a node alatt levõ node-okban tárolt userek közül választjuk.
A megbízott a szavazás formai szabályait felügyeli. Kb, mint a "házelnök". Továbbá a megbízott pontoz a szomszédos csoportokból jövõ pontozási felhívásokban az alatta levõ node-okhoz képest 3x-os súllyal, de maximum akkora súllyal, mint a nem szavazó node-ok száma. Vagyis ha alatta minden node szavaz (ami opcionális, nem kötelezõ, kedve szerint szavaz vagy sem), akkor a megbízott súlya is csak 1x-es.
Adatbázis Séma a ReszveteliDemokracia -hoz
A mezõk, melyek az elsõdleges (egyúttal unique) kulcsot alkotják: vastagon szedve:
User (késõbb akár pseudonym):
- userid (szám is elég)
- tikiid (string)
- név
- cím
- jsz
level (hanyadik szint) mező nem kell ide (csak a csomópont táblába)
Tree
- treeid
- tree desc
nem kell floors (szintek száma). Nem is tudnánk előre meghatározni, hogy a fa hány szintű lesz. A gyökér szintje: select max level from node where treeid=tree.treeid Az első node level=1 lesz, és amikor ágakra bomlik, akkor jön létre új node magasabb level értékkel.
új fát ki tud létrehozni? Egyelõre akárki. Késõbb jóvá kell hagyatni, hogy ne legyen egy adott téma szétforgácsolva. Eleve létrehozunk csoportokat: marketingkommunikáció, nyilvánosan auditálható tokenek kezelése, gazdaságépítésre (SzovetKezet, KozossegiPenz, piac=AjanlatTetel +keresés, jogi vonatkozások, stb...).
A fa csomópontokból, node-okból áll:
- nodeid (önmagában is kulcs, nem csak a treeid-val együtt. Van elég sok szám, ki tudunk adni nagy tartományokat, ha több gépre kell végül szétosztani a rendszert)
- treeid (a hozzá tartozó fa)
- parentnodeid (a gyökér esetében ez 0)
- userid (hogy melyik user tartozik ehhez a node-hoz, mint megbízott "összekötõ". Amikor ez változik, a nodeid marad !)
- level (alulról hanyadik szint) hasznos ! Erre is lehet indexet tenni.
minden új user egy meglévõ node alá kerül. Ha ezzel túllépi a küszöböt a node alatt számlált userek száma, akkor külön lépésként kettébomlik: létrejön egy node level=x értékkel, átmegy oda a userek fele. Továbbá létrejön egy node level=x+1 értékkel. A user mindig falevél lesz és marad, még akkor is, ha egy fentebbi node-ba összekötõ megbízott szerepként bekerül.
Forest (=erdõ): Ez egy nagyobb tábla, tartalmazza magukat a fákat:
- userid (User.userid)
- treeid (opcionális)
- nodeid (Node.nodeid) hogy melyik node alá tartozik a user
- A parentid a gyökér esetében 0, nem kategorizált esetben NULL.
A treeid mezõ nem lenne fontos, hiszen a nodeid-ból is következik. De így talán könnyebb biztosítani, hogy egy user egy tree-ben csak 1 node alatt lehessen (azért fa a fa).
Vagyis az erdo tábla mutatja, a user egyáltalán melyik fában van benne, és melyik node alatt. Egy személy benne lehet több szakmai csoportban is, meg persze a földrajzi részvételidemokrácia fában.
Az id-k vagy ascii string, vagy csak (integer) szám lehet. Ha a tiki-ben a user-t számmal azonosítja, akkor mi is feltétlen számot használunk.
A pontozás leírása (scoring description):
- scoringid
- userid (aki létrehozta)
treeid (melyik fában lett kiírva. Nem ide kell, mert különbözõ fákban is szavazhatnak ugyanarra?) nem kell, majd megadja a Felhívás pontozásra (scoringinit) táblában.
- szavazatszam (ha pl. ez 800, akkor ezt a szavazást nem tudja 10 megbízott eldönteni, hanem lentebb kell küldjék két szinttel - ha lehet. Persze a leveleknél már nem lehet, ott pontozhat kevesebb is )
- description
Késõbb felvehetünk még status mezõt. Pl. befagyasztva (amikor már nem lehet szavazni). Meg azt, hogy meddig lehet (kell) szavazni. Meg hogy hány szavazó esetén érvényes az eredmény. Egyelõre szerintem nem létkérdés.
Egy pontozáshooz több aspect (szempont) is tartozhat:
- aspectid
- scoringid
- aspect (speciális: 'escalate')
- description
Felhívás pontozásra (scoringinit).
- scoringinitid
- scoringid (scoring description.scoringid)
- userid (aki elindítja) Bár van egy user (az eredeti kiíró) a pontozás leírása (scoring description) táblában, mégis kell, mert a terjedéskor a felhívás már más fennhatósága alá tartozik. De lehet, hogy a nodeid erre elég ?
- treeid (Tree.treeid) ezzel lehet elérni, hogy különbözõ fákban is szavazhatnak ugyanarra
- nodeid (Node.nodeid) Ugyanaz a szavazás késõbb más node-okra is átterjedhet.
- StartDate
- EndDate
A user (userid ) elindít egy szavazást egy adott fában (treeid ), egy adott témárol (scoring desc).
Minden olyan user pontozása számít, amelyiknek az adott treeid fában a nodeid alatt van. Egyelõre csak ha közvetlen alatta, késõbb lehet akárhol alatta.
Amikor oszlik egy node két ágra, duplikálni kell ezt a rekordot.
Pontozás (scoring).
- userid (aki szavaz)
- scoringid (scoringinit.scoringid)
- treeid (ha különbözõ fákban is szavazhatnak ugyanarra) A scoringinit treeid-hez kötött!!
- aspect
- score
- javaslat: 0..100 (integer). Természetesen a pontozás kiírásakor lehet szûkíteni pl. 0-5-re, ami tároláskor: 0,20,40,60,80,100
Késõbb felvehetünk még idõpontot, meg "hányszor változtatott" mezõt.
Elvileg az alap csak ennyi. Egyelõre a felterjesztés (aspect='escalate') threshold-score -ja lehet bedrótozva (mondjuk 60% szavazott ÉS az átlag a 60%-ot elérte. Vagy 40% szavazott ÉS az átlag a 80%-ot elérte). Ezen küszöbérték felett a parent-hez kerül, és a parent testvérei megkapják pontozásra, hogy tovább felterjesztik-e.
Késõbb kell még:
- idõ kezelése (sürgõsség)
- fontosság kezelése (prioritás)
- szebb megjelenítés, riportok
Egyéb tervezõi döntések (design decision).
Azt nem tudom, hogy kell-e az erdonek hisztorikusnak lenni. Szerintem elso korben nem.
Mi van, ha adott scoringid-t pontoztak, és felterjesztésre kerül (az aspect='escalate' átlagban elég magas).
- Akkor magasabb szinten új scoringid lesz kiírva,
- vagy pedig a scoringid mellé felvegyük a treeid, parentid-t, hogy épp melyik szinten történik a pontozás ? Ez jobban hangzik.
Hogyan dől el, hogy egy új usernek ki a parent-je egy adott fában ?
Legjobb lenne, ha be tudna csatlakozni bármelyik fába 1 helyre, bármely 16-nál kisebb csoportba, ahol csak levelek vannak.
Aztán majd ezt a részt kicsit fejleszteni kell, pl. a csoportszétszedést adminisztrátor meg tudja tenni
Levelek = olyan user, akik semmi másnak nem parent-jei