Baza podataka - etf-sarajevo/zamger GitHub Wiki
Schema baze podataka
Stari dokument (sadrži i ERD): https://github.com/etf-sarajevo/zamger/blob/master/static/doc/schema.odt
NOMENKLATURA
-
Sve tabele osim many-to-many relacija imaju primarni ključ koji se zove id i koji je tipa int veličine 11 bita. U ovom dokumentu će se podrazumijevati da je polje koje se zove id primarni ključ, u suprotnom će biti stavljena oznaka PK.
-
U nekim tabelama je ovo polje auto_increment, u kojem slučaju će biti stavljena oznaka INC. Obzirom da u MySQLu auto_increment pravi više problema nego koristi, u narednim verzijama Zamgera će se težiti da se ovo potpuno ukine.
-
Strani ključ (foreign key) se u pravilu zove isto kao tabela na koju se odnosi. Npr. u tabeli student polje studij je strani ključ na tabelu studij odnosno vezuje se za njeno polje id. U ovom dokumentu ćemo takva polja označavati sa FK.
-
Izuzeci od ovog pravila su sljedeći: Svojevremeno kada je kreirana nova tabela predmet, a sadržaj stare tabele prebačen u tabelu ponudakursa, jedan broj ključeva se i dalje zove predmet iako pokazuju na tabelu ponudakursa. Takođe, kako su tabele student i nastavnik spojene u tabelu osoba, polja student i nastavnik su FK na tabelu osoba. Ove nedosljednosti će biti ispravljene u sljedećoj verziji ZAMGERa.
-
Imena svih tabela su u jednini; npr. student, akademska_godina, cas.
-
Many-to-many relacije su tabele koje se sastoje od dva polja koja se zovu kao tabele između kojih se uspostavlja relacija, a odnose se na njihova respektivna id polja. Ove tabele se u principu zovu prvatabela_drugatabela ali od ovoga se često odstupa, a ima i drugih tabela koje u imenu sadrže znak _.
-
Boolean vrijednost (koja ne postoji u starijim verzijama mysql-a) implementirana je kao tinyint.
TABLICE
akademska_godina
Spisak akademskih godina tokom kojih je izvođena nastava.
- id (int) - jedinstveni ID (IDovi moraju ići u hronološkom redu!)
- naziv (varchar) - naziv akademske godine kakav će biti prikazan u interfejsu
- aktuelna (boolean) - većina upita se odnosi na godinu kod koje je ova vrijednost 1 (npr. na početnoj stranici nastavnika sve ostale godine su skrivene iza linka "Prikaži ranije akademske godine"
Primjer:
(1, '2005/2006', 0),
(2, '2006/2007', 0),
(3, '2007/2008', 1);`
auth
Tablica za autentikaciju (provjeru identiteta korisnika). Detaljniji podaci o korisniku nalaze se u tabeli osoba.
- id (int) - jedinstveni numerički ID; u kodu Zamgera se u principu koristi ovaj ID a ne login
- login (varchar) - korisničko ime s kojim se korisnik prijavljuje
- password (varchar) - šifra (prazno ako se koristi LDAP)
- admin (boolean) - da li korisnik ima pristup admin dijelu sajta? (deprecated)
- external_id (varchar) - ID u nekoj vanjskoj bazi korisnika (ne koristi se trenutno)
- aktivan (boolean) - ako je 0, korisnik ne može pristupiti sistemu
Primjer:
(1, 'admin', 'admin', 0, '', 0);
cas
Tablica sa spiskom održanih časova. Koristi se za praćenje prisustva.
- id (int) - INC - jedinstveni ID
- datum (date) - datum kada je čas održan
- vrijeme (time) - u koliko sati, minuta je održan čas
- labgrupa (int) - FK - u kojoj grupi je održan čas
- nastavnik (int) - FK na tabelu osoba - koji nastavnik je držao čas
- predmet (int) - FK na tabelu ponudakursa - za koji predmet je održan čas
- komponenta (int) - FK - kojoj od komponenti za prisustvo pripada čas, obzirom da može biti definisano više komponenti tipa "prisustvo" (vidjeti tabelu komponenta)
Moguća nekonzistentnost: ovdje može doći do nekonzistentnosti baze pošto labgrupa već pripada predmetu. Polje predmet je potrebno jer nastavnici mogu izabrati da uopšte ne kreiraju grupe na predmetu nego da prisustvo vode pod "Svi studenti".
Primjer:
(306, '2006-09-26', '08:00:00', 33, 0, 4, 5),
(307, '2006-09-26', '10:00:00', 35, 0, 4, 5),
(308, '2006-09-27', '08:00:00', 43, 0, 4, 5),
(309, '2006-09-27', '10:00:00', 42, 0, 4, 5),
institucija
Akademske institucije: fakulteti, odsjeci i slično. Koristi se kako bi se znala institucija koja organizuje određeni studij ili nudi određeni predmet. Na ETFu je studij u principu jednak odsjeku, ali na drugim fakultetima to ne mora biti tako. Npr. na Filozofskom fakultetu postoje odsjeci: Anglistika, Germanistika, Slavistika a studiji su: "Engleski+Njemački", "Engleski+Francuski", "Komparativna književnost", "Bosanski+Hrvatski+Srpski jezik" itd.
- id (int) - INC - jedinstveni ID
- naziv (varchar) - puni naziv institucije
- roditelj (int) - pokazivač na polje id koji omogućuje da se kreira struktura stabla. U primjeru datom ispod, institucije 2-5 (odsjeci) pripadaju instituciji 1 (ETF). Ukoliko nema roditelja, stavlja se nula
- kratki_naziv (varchar) - skraćeni naziv za tabelarni ispis
Primjer:
(1, 'Elektrotehnički fakultet Sarajevo', 0, 'ETF'),
(2, 'Odsjek za računarstvo i informatiku', 1, 'RI'),
(3, 'Odsjek za automatiku i elektroniku', 1, 'AE'),
(4, 'Odsjek za elektroenergetiku', 1, 'EE'),
(5, 'Odsjek za telekomunikacije', 1, 'TK'),
ispit
Održani ispiti.
- id (int) - jedinstveni ID
- naziv (varchar) - naziv ispita npr. "Popravni ispit" (deprecated)
- predmet (int) - FK na tabelu ponudakursa - za koji predmet je održan ispit?
- datum (date) - kada je održan ispit?
- komponenta (int) - FK - kojoj od komponenti pripada ispit (vidjeti tabelu komponenta). Na ovaj način se određuje i da li je ispit parcijalni ili integralni.
- vrijemeobjave (timestamp) - datum i vrijeme kada su objavljeni rezultati ispita (ne koristi se u kodu Zamgera, ali je generalno koristan podatak)
Primjer:
(1, '1. parc.', 4, '2006-11-09', 1, '0000-00-00 00:00:00'),
(2, '1. parc', 5, '2006-04-20', 1, '0000-00-00 00:00:00'),
(3, '2. parc', 5, '2006-06-15', 2, '0000-00-00 00:00:00'),
(4, '1. parc', 6, '2005-11-24', 1, '0000-00-00 00:00:00'),
(5, '2. parc', 6, '2006-01-19', 2, '0000-00-00 00:00:00'),
ispitocjene
Many-to-many relacija. Spisak bodova koje su studenti ostvarili na ispitu. Ispit i student zajedno čine ključ, odnosno jedan student ne može više puta izlaziti na isti ispit. U slučaju da je student više puta ponavljao isti tip ispita, uzima se najbolja ocjena.
- ispit (int) - FK
- student (int) - FK na tabelu osoba
- ocjena (float) - koliko bodova je student dobio na ispitu.
Moguća nekonzistentnost: student ne mora biti upisan na predmet kojem pripada ispit, ne mora uopšte biti student?
kanton
Spisak kantona, kao i RS, Distrikt Brčko i "Strani državljanin". Ova tablica se trenutno koristi samo za tabelu prijemni. Promijeniti naziv u "lokacija" ili nešto slično? Dodati broj kantona (npr. Kanton 10 = Livanjski) ?
- id (int) - INC - jedinstveni ID
- naziv (varchar) - puni naziv teritorijalne jedinice
- kratki_naziv (varchar) - skraćeni naziv za tabelarni ispis
Primjer:
(1, 'Bosansko-Podrinjski kanton', 'BPK'),
(2, 'Hercegovačko-Neretvanski kanton', 'HNK'),
(3, 'Livanjski kanton', 'LK'),
...
(11, 'Republika Srpska', 'RS'),
(12, 'Distrikt Brčko', 'DB'),
(13, 'Strani državljanin', 'SD');
komentar
Komentari na rad studenata koje nastavnici ostavljaju kroz pregled grupe. Komentari su specifični za labgrupu, odnosno ako se ostavi komentar za studenta u jednoj labgrupi, taj komentar neće biti vidljiv iz druge labgrupe. Kao i kod tabele cas, polje predmet je nužno isključivo zato što nastavnik uopšte ne mora kreirati grupe na svom predmetu nego može koristiti virtuelnu grupu "Svi studenti".
- id (int) - INC - jedinstveni ID
- student (int) - FK na tabelu osoba - na kojeg studenta se odnosi komentar?
- nastavnik (int) - FK na tabelu osoba - koji nastavnik je ostavio komentar?
- labgrupa (int) - FK - u kojoj labgrupi se nalazi student?
- predmet (int) - FK na tabelu ponudakursa - na koji predmet je upisan student?
- datum (datetime) - datum i vrijeme kada je komentar ostavljen
- komentar (text) - tekst komentara
Primjer:
(5, 1477, 10, 84, 8, '2007-09-27 09:12:12', 'Seminarski rad 1: Hyperthreading'),
(6, 1492, 10, 84, 8, '2007-09-27 09:13:29', 'Seminarski rad 1: Hyperthreading'),
(8, 1491, 10, 84, 8, '2007-09-27 09:13:48', 'Seminarski rad 1: Hyperthreading'),
(9, 1468, 10, 84, 8, '2007-09-27 09:18:16', 'Seminarski rad 1: TV kartica'),
komponenta
Komponente ocjene na predmetu. Kroz administrativni dio se mogu kreirati vrste predmeta (tabela tippredmeta) za koje je definisano od čega se sve sastoji ocjena (ispiti, prisustvo, zadaće...) te koliko svaka od tih komponenti nosi bodova. U tabeli komponenta su date gotove komponente iz kojih se može kreirati jedan tip predmeta.
- id (int) - INC - jedinstveni ID
- naziv (varchar) - naziv komponente koji se koristi u admin dijelu sajta, kod kreiranja tipa predmeta. U ovom nazivu je bitno naglasiti razlike između komponenti istog tipa npr. "Prisustvo (ETF BSc)" i "Prisustvo (ETF AB)".
- gui_naziv (varchar) - naziv komponente koji se koristi u izvještajima. Ovdje se u principu samo navodi tip komponente, dakle "Prisustvo".
- kratki_gui_naziv (varchar) - skraćeni naziv radi tabelarnog ispisa izvještaja
- tipkomponente (int) - FK - način računanja bodova za komponentu (određuje na koji način će se unositi bodovi za ovu komponentu - vidjeti tabelu tipkomponente)
- maxbodova (double) - koliko maksimalno bodova se može ostvariti na ovoj komponenti ocjene
- prolaz (double) - koliko minimalno bodova student mora ostvariti da bi se smatralo da je "položio" predmet. Ovo se koristi samo u sumarnim izvještajima prolaznosti, kada se bez unosa konačne ocjene želi saznati da li je student ostvario uslove za prolaz.
- opcija (varchar) - ovisno o komponenti definišu se neki dodatni parametri (opis je dat u tabeli tipkomponente)
Primjer:
(1, 'I parcijalni (ETF BSc)', 'I parcijalni', 'I parc', 1, 20, 10, ''),
(2, 'II parcijalni (ETF BSc)', 'II parcijalni', 'II parc', 1, 20, 10, ''),
(3, 'Integralni (ETF BSc)', 'Integralni', 'Int', 2, 40, 20, '1+2'),
(4, 'Usmeni (ETF BSc)', 'Usmeni', 'Usmeni', 1, 40, 0, ''),
(5, 'Prisustvo (ETF BSc)', 'Prisustvo', 'Prisustvo', 3, 10, 0, '3'),
(6, 'Zadaće (ETF BSc)', 'Zadaće', 'Zadaće', 4, 10, 0, '');
komponentebodovi
Tablica sa cache-om bodova ostvarenih po raznim komponentama, radi bržeg generisanja izvještaja (many-to-many). Polja student, predmet i komponenta zajedno čine ključ.
- student (int) - FK na tabelu osoba
- predmet (int) - FK na tabelu ponudakursa
- komponenta (int) - FK
- bodovi (float) - koliko bodova je ostvareno
Moguće nekonzistentnosti: student ima bodove a da nije slušao predmet. Nepostojeći predmeti, studenti, komponente. Komponenta ne postoji za predmet datog tipa.
konacna_ocjena
Tablica konačnih ocjena zaključenih po predmetima. Polja student i predmet zajedno čine ključ.
- student (int) - FK na tabelu osoba
- predmet (int) - FK na tabelu ponudakursa
- ocjena (int) - ocjena (6-10)
- datum (timestamp) - datum zaključivanja ocjene. Ne koristi se u kodu Zamgera, ali je korisna informacija
Moguća nekonzistentnost: student ima ocjenu a da nije slušao predmet.
labgrupa
Spisak grupa po predmetima. Svaki student koji sluša predmet može biti upisan u 0, 1 ili više labgrupa na datom predmetu (vidjeti tabelu student_labgrupa).
- id (int) - INC - jedinstveni ID
- naziv (varchar) - tekst koji opisuje labgrupu npr. "Grupa 1", "Ponovci"
- predmet (int) - FK na tabelu ponudakursa - kojem predmetu pripada labgrupa?
Primjer:
(14, 'Grupa 1', 1),
(15, 'Grupa 2', 1),
(16, 'Grupa 3', 1),
(17, 'Grupa 4', 1),
(18, 'Grupa 5', 1),
(19, 'Grupa 6', 1),
log
Sve aktivnosti korisnika na Zamgeru se loguju. U ovoj verziji Zamgera se ne koristi šifrarnik događaja nego se tekst upisuje u polje dogadjaj. U tekstu su sadržani ključevi iz relevantnih drugih tabela. Nivoi događaja su:
- 1 - pristup stranici / čitanje podataka,
- 2 - nedestruktivna izmjena podataka,
- 3 - greška bilo kojeg tipa,
- 4 - destruktivna ili inače potencijalno interesantna izmjena podataka (admin nivoa).
Kolone:
- id (int) - INC - jedinstveni ID
- vrijeme (timestamp) - datum i vrijeme aktivnosti
- userid (int) - FK na tabelu osoba
- dogadjaj (varchar) - tekst koji opisuje događaj
- nivo (tinyint) - nivoi događaja (legenda data iznad)
Primjer:
(119652, '2008-06-13 08:57:54', 1, 'login', 1),
(119653, '2008-06-13 08:57:54', 1, '/zamger-demo/index.php?loginforma=1 login=admin ', 1),
(119654, '2008-06-13 08:57:58', 1, 'student/intro', 1),
(119655, '2008-06-13 08:58:01', 1, 'studentska/intro', 1),
(119656, '2008-06-13 08:58:03', 1, 'studentska/studenti ', 1),
(119657, '2008-06-13 08:58:04', 1, 'studentska/predmeti', 1),
(119658, '2008-06-13 08:58:08', 1, 'studentska/nastavnici', 1),
(119659, '2008-06-13 08:58:11', 1, 'studentska/predmeti', 1),
(119660, '2008-06-13 08:58:16', 1, 'studentska/predmeti akcija=novi naziv=Teorija nameta na pamet', 1),
(119661, '2008-06-13 08:58:16', 1, 'potpuno novi predmet p2, akademska godina ag1', 4),
nastavnik_predmet
Many-to-many relacija, koji nastavnici su angažovani na kojim predmetima i kakve privilegije imaju. Polja nastavnik i predmet zajednički čine ključ.
- nastavnik (int) - FK na tabelu osoba
- predmet (int) - FK na tabelu ponudakursa
- admin (boolean) - 1 ako nastavnik ima mogućnost ulaska u administravni dio za predmet, a 0 ako nema. U budućnosti je moguće da će ovo polje imati više vrijednosti.
ogranicenje
Pomoću ove tabele definiše se zabrana pristupa na sve labgrupe osim nabrojanih. Ako su za nekog nastavnika nabrojane određene labgrupe, onda on ima pravo pristupa samo tim labgrupama na predmetu kojem te labgrupe pripadaju. Ukoliko nije navedena nijedna labgrupa za neki predmet na kojem je nastavnik angažovan, onda ima pravo pristupa svim labgrupama na tom predmetu. Razlog za ovakvu proceduru je što je ograničenje izuzetak a ne pravilo, tako da je tabela ograničenja relativno mala.
- nastavnik (int) - FK na tabelu osoba
- labgrupa (int) - FK
osoba
Tablica koja sadrži podatke o svim osobama (nastavnicima, studentima, studentskoj službi itd.) koji se u nekoj funkciji javljaju u zamgeru. Osobe koje imaju login dobijaju svoj zapis u tabeli auth, nastavnici se javljaju u tabeli nastavnik_predmet itd. Privilegije korisnika date su u tabeli privilegija.
Neka od polja bi u budućoj verziji mogla imati šifrarnik.
- id (int) - jedinstveni ID korisnika
- ime (varchar)
- prezime (varchar)
- email (varchar)
- brindexa (varchar) - broj indeksa (za studente)
- datum_rodjenja (date)
- mjesto_rodjenja (varchar)
- drzavljanstvo (varchar)
- srednja_skola (varchar) - završena srednja škola
- jmbg (varchar) - jedinstveni matični broj građana
- adresa (varchar)
- telefon (varchar)
- kanton (int) - FK
- treba_brisati (boolean) - ne koristi se
Primjer:
(1, 'Site', 'Admin', '[email protected]', '', '0000-00-00', '', '', '', '', '', '', 0, 0);
ponudakursa
Konkretna instanca održanog predmeta (vidjeti tabelu predmet). Primjer: u tabeli predmet drži se podatak da postoji predmet koji se zove RPR, a kojeg nudi Odsjek za računarstvo i informatiku. U tabeli ponudakursa nalazi se zapis o konkretnom kursu RPR koji je održan akademske 2007/2008 kao izborni predmet na V semestru studija Automatike i elektronike.
- id (int) - INC - jedinstveni Id
- predmet (int) - FK na tabelu predmet ! (obično je polje predmet FK na tabelu ponudakursa tj. upravo ovu tabelu)
- studij (int) - FK - u okviru kojeg studija je izveden predmet
- semestar (int) - cjelobrojna vrijednost koja predstavlja semestar u kojem je održan predmet. Godina se dobija kao ceil(semestar/2)
- obavezan (boolean) - ako je vrijednost FALSE (0) onda je predmet izborni
- akademska_godina (int) - FK - koje akademske godine je izveden predmet?
- tippredmeta (int) - FK - sistem bodovanja na predmetu
Primjer:
(2, 2, 3, 5, 0, 3, 1)
Tumačenje primjera:
- ID ponude kursa je 2.
- U pitanju je predmet čiji je ID takođe 2, a to je "Razvoj programskih rješenja" (vidjeti tabelu predmet).
- Predmet je održan u okviru studija 3, a to je "Automatika i elektronika (BSc)" (vidjeti tabelu studij).
- Predmet je održan na petom semestru tog studija.
- Predmet je izborni.
- Održan je akademske godine 3, a to je "2007/2008" (vidjeti tabelu akademska_godina).
- Tip predmeta je 1, a to je "ETF Bologna Standard" (vidjeti tabelu tippredmeta).
poruka
Sistem internih poruka u Zamgeru.
Legenda polja opseg i primalac (polje opseg određuje značenje polja primalac):
- 0 - svi korisnici Zamgera (primalac nedefinisan),
- 1 - svi studenti (primalac nedefinisan),
- 2 - svi nastavnici (primalac nedefinisan),
- 3 - svi studenti na studiju (primalac - FK na tabelu studij),
- 4 - svi studenti na godini (primalac - FK na tabelu akademska_godina),
- 5 - svi studenti koji slušaju predmet (primalac - FK na tabelu ponudakursa),
- 6 - svi studenti u labgrupi (primalac - FK na tabelu labgrupa),
- 7 - pojedinačni korisnik (primalac - FK na tabelu osoba)
Većina opsega se ne može uopšte slati kroz uobičajene komponente Zamgera nego samo kroz poseban modul dostupan samo site adminu. Samo studenti mogu vidjeti poruke tipa obavještenje u centralnom dijelu dashboarda. Obične poruke idu u polje poruke, a korisnik dobija trepčuće obavještenje prilikom prvog sljedećeg logina.
- id (int) - INC - jedinstveni id
- tip (tinyint) - tip poruke (1 = obavještenje, 2 = obična poruka)
- opseg (tinyint) - ko sve treba da dobije poruku? legenda data iznad
- primalac (int) - FK na razne tabele (ovisno o polju opseg)
- posiljalac (int) - FK na tabelu osoba - korisnik koji je poslao poruku i kome će stići eventualni odgovor
- vrijeme (timestamp) - datum i vrijeme slanja poruke
- ref (int) - ukoliko je poruka odgovor, ID poruke na koju se odgovara (potrebno za threading)
- naslov (text) - naslov poruke
- tekst (text) - tekst poruke
predmet
Spisak predmeta koji uopšte postoje po programu, sa institucijama koje drže te predmete. Primarni razlog za postojanje ove tabele su izborni predmeti sa drugih fakulteta.
- id (int) - INC - jedinstveni ID
- naziv (varchar) - puni naziv predmeta
- institucija (int) - FK - koja institucija organizuje spomenuti predmet
- kratki_naziv (varchar) - skraćeni naziv radi tabelarnog prikaza
Primjer:
(2, 'Razvoj programskih rješenja', 2, 'RPR');
preference
Generalna tablica koja drži preference korisnika po raznim osnovama. Trenutno se koristi samo na jednom mjestu: da li korisnik kod masovnog unosa više voli da razdvaja vrijednosti zarezom ili znakom TAB (paste iz Excela). Polja korisnik i preferenca zajedno čine ključ.
- korisnik (int) - FK na tabelu osoba
- preferenca (varchar) - naziv preference
- vrijednost (varchar) - vrijednost za datu preferencu; značenje ovog polja ovisi o preferenci, a dato je u kodu Zamgera
Primjer:
(1, 'mass-input-format', '0'),
(1, 'mass-input-separator', '0'),
prijemni
Tablica koja sadrži podatke o kandidatima za prijemni ispit. Ova tablica sadrži dosta ponavljanja u odnosu na tabelu osoba, pa je predviđeno spajanje (izbacivanje viškova). Pošto su naknadno dodavane stvari po zahtjevima iz studentske, tablica nije normalizovana.
- id (int) - jedinstveni ID i primarni ključ
- ime (varchar)
- prezime (varchar)
- datum_rodjenja (date)
- mjesto_rodjenja (varchar)
- drzavljanstvo (varchar)
- srednja_skola (varchar) - završena srednja škola
- jmbg (varchar) - jedinstveni matični broj građana
- adresa (varchar)
- telefon (varchar)
- kanton (int) - FK
- redovni (boolean) - želi li studirati kao redovni student ili paralelni
- odsjek_prvi (varchar) - odsjek - prvi izbor (dvoslovna oznaka)
- odsjek_drugi (varchar) - odsjek - prvi izbor (dvoslovna oznaka)
- odsjek_treci (varchar) - odsjek - prvi izbor (dvoslovna oznaka)
- odsjek_cetvrti (varchar) - odsjek - prvi izbor (dvoslovna oznaka)
- opci_uspjeh (double) - bodovi po osnovu općeg uspjeha
- kljucni_predmeti (double) - bodovi po osnovu prosjeka iz ključnih predmeta važnih za studij
- dodatni_bodovi (double) - dodatni bodovi po osnovu takmičenja i sl.
- prijemni_ispit (double) - bodovi ostvareni na prijemnom ispitu
- izasao_na_prijemni (boolean) - da li je izašao na prijemni ispit?
- student_generacije (boolean) - da li je u pitanju student generacije (radi bodovanja)?
- prijemni_ispit_dva (double) - bodovi ostvareni na prijemnom ispitu, drugi termin
- prijavio_drugi (boolean) - da li se prijavio za izlazak na drugi termin?
prijemniocjene
Tablica koja sadrži konkretne ocjene koje je kandidat na prijemnom imao tokom srednje škole. Pošto svaka škola može imati svoje predmete, u tabeli se ne čuvaju konkretna imena predmeta. Umjesto toga, markirane su samo ključne ocjene iz tri predmeta (Matematika, Fizika, Bosanski jezik) pošto se one posebno boduju, a ostale ocjene nisu posebno naznačene
- prijemni (int) - FK na tabelu prijemni
- razred (tinyint) - razred (1, 2, 3 ili 4)
- ocjena (tinyint) - ocjena (od 2 do 5)
- tipocjene (tinyint) - 1, 2 i 3 za ocjene iz ključnih predmeta, 0 za sve ostale ocjene
prijemni_trenutno_edituje
Ova tabela je uvedena zato da bi se omogućilo više korisnika (uposlenika u studentskoj) da s jedne strane edituju iste podatke, a s druge da unose nove i dobiju jedinstven ID. Princip je da se prilikom unosa nove aplikacije na prijemnom ID aplikacije koji se automatski generiše reciklira nakon 15 minuta.
- prijemni (int) - FK
- vrijeme (timestamp)
prisustvo
Podaci da li je dati student na datom času bio prisutan ili odsutan. Many-to-many relacija. Polja student i cas zajedno čine ključ.
Ukoliko za određenog studenta i čas ne postoji slog u tabeli prisustvo, iako je student upisan u odgovarajuću labgrupu za koju je održan čas (vidjeti tabelu student_labgrupa), to se tretira kao treće stanje "ni prisutan ni odsutan". U interfejsu ovo je predstavljeno žutim poljem sa znakom kosa crta (/). To stanje se ne tretira kao odsustvo prilikom bodovanja, što znači da student dobija maksimalan broj bodova bez obzira na broj žutih polja. Do ove situacije dolazi kada se student prebacuje iz grupe u grupu. Ideja je da nastavnik treba sam odlučiti da li će studentu priznati određeno prisustvo ili ne (ako se ništa ne odluči, bodovanje ide u korist studenta).
Ova tabela se prazni prilikom kompaktovanja baze.
- student (int) - FK na tabelu osoba
- cas (int) - FK
- prisutan (boolean) - da li je bio prisutan ili odsutan?
- plus_minus (tinyint) - deprecated
privilegije
Određuje koje privilegije posjeduje određeni korisnik. U ovoj verziji Zamgera polje privilegija je obično tekstualno polje čije je značenje hardcodirano.
- osoba (int) - FK
- privilegija (varchar)
programskijezik
Spisak podržanih programskih jezika za slanje zadaće iz programerskih predmeta.
- id (int) - jedinstveni id
- naziv (varchar) - tekst koji će se koristiti u admin prozoru
- geshi (varchar) - opis programskog jezika koji se koristi pri pozivu biblioteke Geshi za syntax highlighting
- ekstenzija (varchar) - ekstenzija koja će biti automatski dodana na naziv datoteke prilikom slanja zadaće
Primjer:
(1, 'C', 'C', '.c'),
(2, 'C++', 'C++', '.cpp'),
(0, '---Nije određen---', '', ''),
promjena_odsjeka
Zahtjevi za promjenu odsjeka. Studenti dostavljaju pismene zahtjeve koji se unose u ovu tabelu. Ukoliko zahtjev bude odobren, studentska će manuelno promijeniti odsjek studenta. Ova tablica služi samo za rangiranje i ispis podataka.
- id (int) - INC - jedinstveni ID zahtjeva
- osoba (int) - FK
- iz_odsjeka (int) - FK na tabelu studij
- u_odsjek (int) - isto
promjena_podataka
Zahtjevi za promjenu ličnih podataka. Ukoliko studentska odobri ovaj zahtjev, on će se prepisati u tabelu osoba. Dakle, struktura ovih tabela je skoro ista, novo polje je vrijeme_zahtjeva.
- id (int) - INC - jedinstveni ID zahtjeva
- ime (varchar)
- prezime (varchar)
- email (varchar)
- brindexa (varchar) - broj indeksa (za studente)
- datum_rodjenja (date)
- mjesto_rodjenja (varchar)
- drzavljanstvo (varchar)
- srednja_skola (varchar) - završena srednja škola
- jmbg (varchar) - jedinstveni matični broj građana
- adresa (varchar)
- telefon (varchar)
- kanton (int) - FK
- vrijeme_zahtjeva (timestamp)
ras_raspored i ras_sala
Tabele za raspored. Moraju biti ponovo kreirane zbog loše nomenklature.
rss
Tablica ključeva za pristup RSS feed-u. Polja u ovoj tablici se generišu prilikom logina studenta, a koristi se u rss.php skripti kako bi se odredilo da li korisnik ima pravo pristupa.
- id (varchar) - jedinstveni ključ za pristup RSS-u
- auth (int) - FK na tabelu osoba
- access (datetime) - kada je zadnji put korisnik pristupio svom RSS feedu
stdin
Ova tablica se koristi prilikom izvršavanja programa koji je poslan kao zadaća, što je opcija prilikom pregledanja zadaća u sekciji za saradnike. Saradnik može zadati ulaz (stdin) programa kako bi se program izvršio. Svi ranije korišteni ulazi čuvaju se u ovoj tablici kako bi saradnik mogao brzo izabrati neki od ranijih ulaza.
Ova tabela se prazni prilikom kompaktovanja baze.
- id (bigint) - jedinstveni ID (pošto ih može biti mnogo, stavljen je tip bigint)
- zadaca (int) - FK
- redni_broj (int) - redni broj zadatka npr. 3 = treći zadatak u zadaći
- ulaz (text) - šta će biti poslano na ulaz (stdin) programa prilikom izvršenja
studentski_moduli
Tabela koja određuje koje opcije su dostupne u studentskom dijelu Zamgera, u meniju ispod naziva predmeta. Pošto je situacija sa ovim modulima dosta komplikovana, ova tabela se puni poluautomatski zajedno sa čitavim pregenerisanim URLom, a nastavnik može mijenjati vrijednost polja aktivan kroz administraciju predmeta i time odrediti da li je opcija vidljiva ili ne (po defaultu su sve opcije neaktivne).
- id (int) - INC - jedinstveni ID
- predmet (int) - FK na tabelu ponudakursa
- gui_naziv (varchar) - naziv opcije u meniju u studentskom dijelu
- url (varchar) - na koji URL vodi opcija. URL je kompletan, znači u njega treba staviti i sam ID predmeta, a ako je unutar Zamgera (relativni) autentikacija će biti zadržana.
- aktivan (boolean) - ako je ova opcija isključena (0), meni stavka nije prikazana studentima
- novi_prozor (boolean) - da li se stavka otvara u novom prozoru?
Primjer:
(1, 19, 'Materijali (Moodle)', 'http://c2.etf.unsa.ba/course/view.php?id=76', 1, 1),
(2, 19, 'Slanje zadaće', '?sta=student/zadaca&predmet=19', 1, 0),
(3, 19, 'Dnevnik', '?sta=izvjestaj/predmet&predmet=19', 0, 1),
student_labgrupa
Many-to-many relacija, određuje u koje labgrupe je upisan koji student. Ključ čine oba polja.
- student (int) - FK na tabelu osoba
- labgrupa (int) - FK
student_predmet
Many-to-many relacija, određuje u koje predmete je upisan koji student. Ključ čine oba polja.
- student (int) - FK na tabelu osoba
- predmet (int) - FK na tabelu ponudakursa
student_studij
Many-to-many relacija, određuje koji studij student sluša ili je slušao u datoj akademskoj godini. Ključ čine sva polja.
- student (int) - FK na tabelu osoba
- studij (int) - FK
- semestar (int) - cijeli broj koji određuje semestar
- akademska_godina (int) - FK
studij
Spisak studija koji su dostupni studentima. Odsjek nije isto što i studij, npr. na Filozofskom fakultetu postoje odsjeci: Anglistika, Germanistika, Slavistika a studiji su: "Engleski+Njemački", "Engleski+Francuski", "Komparativna književnost", "Bosanski+Hrvatski+Srpski jezik" itd.
Pošto je jedan od zahtjeva studentske službe (od kojeg sada izgleda odustaju :( ) bio da semestre na MSc studiju vode kao sedmi, osmi itd. uvedena je komplikacija sa "završnim semestrom".
Vrijednost polja tipstudija nema nikakvo značenje. Jednostavno student ne može upisati studij sa preduslovom X ako nema završen studij čiji je tip X.
- id (int) - INC - jedinstveni ID
- naziv (varchar) - puni naziv studija
- zavrsni_semestar (int) - redni broj semestra koji predstavlja zadnji semestar
- institucija (int) - FK - institucija koja organizira studij i nadležna je za njega
- kratki_naziv (varchar) - skraćeni oblik naziva radi tabelarnog prikaza
- moguc_upis (boolean) - mogu li studenti odabrati ovaj studij na prijemnom ispitu
- tipstudija (int) - polje koje se koristi za polje preduslovi
- preduslov (int) - da bi student upisao ovaj studij, mora prethodno završiti neki od studija čiji je tip dat ovdje; ako je vrijednost 0, nema preduslova
Primjer:
(1, 'Prva godina studija', 2, 1, 'PGS', 0, 1, 0),
(2, 'Računarstvo i informatika (BSc)', 6, 2, 'RI', 1, 2, 1),
(3, 'Automatika i elektronika (BSc)', 6, 3, 'AE', 1, 2, 1),
(4, 'Elektroenergetika (BSc)', 6, 4, 'EE', 1, 2, 1),
(5, 'Telekomunikacije (BSc)', 6, 5, 'TK', 1, 2, 1),
(6, 'Računarstvo i informatika (AB)', 9, 2, 'RI', 0, 4, 0);
Tumačenje primjera:
U ovom primjeru prva godina studija se vodi kao zaseban studij, pošto su predmeti na prvoj godini zajednički i slušaju ih svi. Iz tog razloga, stavljeno je da PGS traje 2 semestra, nakon čega se student prebacuje na neki od drugih studija (RI, AE...) koji pak traju 6 semestara, ali je student već odslušao 2 (zato se polje zove "završni semestar").
Ante-Bologna studij RI traje 9 semestara. Tip studija PGS je 1, preduslov za studij RI je 1 znači da bi kandidat mogao upisati RI mora imati završen PGS.
tipkomponente
Određuje tipove komponenti za bodovanje (vidjeti tabelu komponenta). Ova tabela se u biti ne bi nikada trebala mijenjati jer su tipovi komponenti hardkodirani na velikom broju mjesta u Zamgeru.
- id (int) - jedinstveni ID
- naziv (varchar) - puni naziv tipa komponente (prikazuje se samo kod kreiranja novih komponenti u site admin sekciji)
- opis_opcija (varchar) - tekst u kojem je objašnjeno šta predstavlja polje opcija u tabeli komponenta
Primjer:
(1, 'Ispit', ''),
(2, 'Integralni ispit', 'Ispiti koje zamjenjuje (razdvojeni sa +)'),
(3, 'Zadace', ''),
(4, 'Prisustvo', 'Minimalan broj izostanaka (0=linearno)'),
(5, 'Fiksna', '');
tippredmeta
Određuje tipove predmeta prema načinu bodovanja na predmetu, odnosno od kojih komponenti se sastoji ocjena (vidjeti tabele komponenta i tipkomponente). Npr. tip "ETF Bologna Standard" definiše da se predmet sastoji od: dva parcijalna ispita (po 20 bodova), jednog integralnog ispita (popravnog) koji može zamijeniti spomenuta dva parcijalna ispita (dakle nosi 40 bodova), prisustva (10 bodova), zadaća (10 bodova) i usmenog dijela ispita (40 bodova). Koje komponente spadaju u tip predmeta, dato je u tabeli tippredmeta_komponenta.
- id (int) - jedinstveni ID
- naziv (varchar) - puni naziv tipa predmeta (prikazuje se u sekciji za studentsku službu, pri kreiranju novih predmeta)
Primjer:
(1, 'ETF Bologna Standard')
tippredmeta_komponenta
Many-to-many relacija koja određuje koje komponente spadaju u određeni tip predmeta. Oba polja zajedno čine ključ.
- tippredmeta (int) - FK
- komponenta (int) - FK
upis_kriterij
Tablica koja sadrži kriterije za generisanje rang listi na prijemnom ispitu. Kriteriji se definišu za studije koje studenti odaberu.
- studij (int) - FK
- donja_granica (float) - "hard limit", broj bodova na prijemnom ispitu ispod kojeg student ne može biti primljen
- gornja_granica (float) - "soft limit", broj bodova na prijemnog ispitu ispod kojeg student može biti primljen samo ako nema dovoljno kandidata koji su položili prijemni ispit (bez obzira na broj bodova)
- kandidati_strani (int) - broj mjesta predviđenih za studente iz inostranstva
- kandidati_sami_placaju (int) - broj mjesta za samofinansirajuće studente
- kandidati_kanton_placa (int) - broj mjesta za studente o trošku kantona
- prijemni_max (int) - koliko bodova maksimalno nosi prijemni ispit
zadaca
Spisak svih zadaća kreiranih u toku predmeta.
- id (int) - INC - jedinstveni ID
- predmet (int) - FK na tabelu ponudakursa - kojem predmetu pripada ova zadaća?
- naziv (varchar) - naziv zadaće koji će biti prikazan u interfejsu. Ovo polje ne smije biti prazno
- zadataka (int) - broj zadataka po zadaći. Razdvajanje zadaće na zadatke nije nužno, ukoliko se stavlja 1 korisnici neće ni primijetiti da postoje pojedinačni zadaci. Ne smije biti manje od 1
- bodova (float) - koliko bodova maksimalno nosi zadaća. Zbir bodova za zadaće može prekoračiti broj bodova koje nosi sama komponenta (npr. ukoliko neki studenti rade zadaće a neki seminarske radove).
- rok (datetime) - datum i vrijeme do kojeg se zadaća mora poslati (ako slanje zadaća nije aktivno, ne koristi se)
- aktivna (boolean) - ukoliko je FALSE (0) studenti uopšte ne vide ovu zadaću
- programskijezik (int) - FK - ID programskog jezika; ukoliko je 0, smatra se da zadaća nije program i neće se koristiti posebne funkcije za programiranje
- attachment (boolean) - FALSE (0): studenti imaju tekstualno polje u koje mogu ukucati zadaću ili napraviti copy&paste; TRUE (1): studenti šalju prilog (attachment) koji se zatim mora preuzeti (download) da bi bio pregledan
- komponenta (int) - FK - kojoj komponenti zadaća pripada ova zadaća, obzirom da može biti definisano više komponenti tipa "zadaća" (vidjeti tabelu komponenta)
- vrijemeobjave (timestamp) - datum i vrijeme kada je objavljena zadaća; ovo polje se ne koristi nigdje u kodu Zamgera, ali je generalno korisno
Primjer:
(9, 3, 'Zadaća 1', 4, 2, '2006-12-20 12:44:21', 1, 1, 0, 6, '0000-00-00 00:00:00'),
zadatak
Konkretne instance zadataka za zadaću. (Naziv tabele nije najsretnije izabran.) Svaki put kada student pošalje ili promijeni zadatak ili kada nastavnik označi zadatak nekim statusom, kreira se novi slog u ovoj tabeli. Na ovaj način se može pratiti dnevnik izmjena. Ukoliko nije aktivno slanje zadaća, u ovoj tabeli se nalaze samo rezultati zadaća koje nastavnici kreiraju kroz admin interfejs.
Značenje polja status je:
- 0 - nepoznat status (kreirana je zadaća bez statusa) - na interfejsu se prikazuje kao bug
- 1 - student je poslao/la zadatak, nije izvršeno automatsko testiranje
- 2 - zadatak je prepisan
- 3 - zadatak se ne može kompajlirati (sadrži bug)
- 4 - automatsko testiranje je završeno bez problema, potrebno pregledati zadatak
- 5 - pregledan
Prilikom računanja zbira bodova, uzimaju se u obzir samo zadaci sa statusom 5, i to samo zadnji slog (sa najvećim IDom). Većina ovih statusa je korisna samo za programiranje i ne koristi se na ne-programerskim predmetima.
Ova tabela se prazni prilikom kompaktovanja baze.
- id (bigint) - INC - jedinstveni ID (mora ići hronološkim redom!); pošto id vremenom može postati jako velik, stavljen je tip bigint
- zadaca (int) - FK - koju zadaću je student slao?
- redni_broj (int) - cijeli broj koji predstavlja zadatak koji je student radio. Npr. ako se zadaća sastoji od 5 zadataka, ovo može biti broj između 1 i 5.
- student (int) - FK na tabelu osoba - ko je poslao zadaću?
- status (int) - cijeli broj koji predstavlja status poslane zadaće (legenda data iznad)
- bodova (float) - koliko bodova je student dobio za zadatak
- izvjestaj_skripte (text) - poruke kompajlera (upozorenja, greške) prilikom kompajliranja zadaće u nekom od programskih jezika
- vrijeme (datetime) - datum i vrijeme slanja zadatka odnosno izmjene statusa
- komentar (text) - tekstualni komentar koji saradnik može ostaviti na zadaću; komentar je vidljiv studentima u studentskom dijelu Zamgera
- filename (varchar) - u slučaju da je tip zadaće attachment, ovo polje čuva originalni naziv datoteke; u suprotnom, čuva se naziv koji je automatski dat zadatku prilikom slanja (redni broj zadatka + eventualno ekstenzija)
- userid (int) - FK na tabelu osoba - ko je napravio zadnju promjenu (student koji je poslao zadatak, saradnik koji je pregledao itd.) - ovo polje se ne koristi nigdje u kodu Zamgera, ali je generalno korisno.
Primjer:
(1, 10, 3, 374, 5, 0.5, '3.c:33:2: warning: no newline at end of file', '2006-10-11 15:02:32', 'popraviti poravnanje u odnosu na main!', '3.c', 0),
(2, 10, 2, 374, 5, 0.5, '2.c:30:2: warning: no newline at end of file', '2006-10-11 15:02:33', 'sta ako ima beskonacno rjesenja? popraviti poravnanje u odnosu na main!', '2.c', 0),
(3, 10, 2, 534, 5, 0.3, '', '2006-10-19 18:21:42', 'math.h?, nedostaje jedan slucaj - javlja gresku za (3,4, 6,8,10,20)', '', 0),
(4, 10, 1, 534, 5, 0.5, '', '2006-10-19 18:05:27', '', '', 0),
zadatakdiff
Jednostavna tablica koja čuva razlike (diffove) između pojedinih verzija zadatka koji je poslao student. Zbog potencijalno velikih razlika, ovo se ne drži u tabeli zadatak nego je izdvojeno u zasebnu tabelu.
Ova tabela se prazni prilikom kompaktovanja baze.
- zadatak (bigint) - FK
- diff (text) - tekstualno polje koje sadrži razlike u unified diff formatu