Uvod u relacione baze podataka¶
prof. dr Saša Malkov
Univerzitet u Beogradu - Matematički fakultet
2023/24
Inicijalizacija¶
%run db2-jupyter-master/db2.ipynb
%sql connect to stud2020 user smalkov using ?
%sql set schema da
Db2 Extensions Loaded.
Connection successful. Command completed.
Baza podataka Stud2020¶
Na predavanjima i vežbama ćemo da koristimo bazu podataka Stud2020
. To je pojednostavljen model baze podataka informacionog sistema fakulteta. Podaci su nalik na podatke iz baze podataka Matematičkog fakulteta, ali sadržaj ne odgovara stvarnim podacima.
Baza podataka ima dve skoro identične kopije organizovane u dve sheme:
u shemi
DB
su tabele sa Unicode sadržajem;u shemi
DA
su skoro iste tabele, ali sa ASCII niskama, koje su lakše za rad u komandom režimu i u alatima koji ne rade dobro sa Unicode niskama (kao npr. Jupyter).
Svaka od ove dve kopije baze ima po 16 tabela i može da se posmatra kao celovita baza podataka. Ukratko ćemo predstaviti tih 16 tabela.
Svi nazivi shema, tabela i kolona u bazi su određeni korišćenjem samo velikih slova. Ako se nazivi unose bez navodnika, onda će ih DB2 automatski prevesti u velika slova, pa je, na primer, svejedno da li ćemo pisati DOSIJE
, dosije
ili Dosije
. Međutim, ako se nazivi navode između navodnika, onda se ne prevode automatski i pravi se razlika između velikih i malih slova.
%sql -a list tables for schema da
TABNAME | TABSCHEMA | DESCRIPTION | |
---|---|---|---|
0 | DOSIJE | DA | Table |
1 | DOSIJEEXT | DA | Table |
2 | ISPIT | DA | Table |
3 | ISPITNIROK | DA | Table |
4 | KURS | DA | Table |
5 | NIVOKVALIFIKACIJE | DA | Table |
6 | PREDMET | DA | Table |
7 | PREDMETPROGRAMA | DA | Table |
8 | PRIZNATISPIT | DA | Table |
9 | SEMESTAR | DA | Table |
10 | SKOLSKAGODINA | DA | Table |
11 | STUDENTSKISTATUS | DA | Table |
12 | STUDIJSKIPROGRAM | DA | Table |
13 | UPISANKURS | DA | Table |
14 | UPISGODINE | DA | Table |
15 | USLOVNIPREDMET | DA | Table |
%sql -a list tables for schema db
TABNAME | TABSCHEMA | DESCRIPTION | |
---|---|---|---|
0 | DOSIJE | DB | Table |
1 | DOSIJEEXT | DB | Table |
2 | ISPIT | DB | Table |
3 | ISPITNIROK | DB | Table |
4 | KURS | DB | Table |
5 | NIVOKVALIFIKACIJE | DB | Table |
6 | PREDMET | DB | Table |
7 | PREDMETPROGRAMA | DB | Table |
8 | PRIZNATISPIT | DB | Table |
9 | SEMESTAR | DB | Table |
10 | SKOLSKAGODINA | DB | Table |
11 | STUDENTSKISTATUS | DB | Table |
12 | STUDIJSKIPROGRAM | DB | Table |
13 | UPISANKURS | DB | Table |
14 | UPISGODINE | DB | Table |
15 | USLOVNIPREDMET | DB | Table |
%%sql
select * from db."NIVOKVALIFIKACIJE"
ID | NAZIV | |
---|---|---|
0 | 1 | Основне академске студије |
1 | 3 | Докторске академске студије |
2 | 2 | Мастер академске студије |
%%sql
select * from da.nivokvalifikacije
ID | NAZIV | |
---|---|---|
0 | 1 | Osnovne akademske studije |
1 | 3 | Doktorske akademske studije |
2 | 2 | Master akademske studije |
Dijagram baze podataka¶
Dijagram baze podataka ćemo predstaviti u notaciji nalik na UML dijagram klasa domena. U svakoj tabeli su označeni atributi koji pripadaju primarnom ključu. Strani ključevi i jedinstveni ključevi su navedeni u drugom odeljku, odvojeno od atributa. Strani ključevi su ilustrovani i strelicama od zavisne tabele prema baznoj tabeli.
Tabela NivoKvalifikacije¶
Tabela NivoKvalifikacije
sadrži osnovne podatke o nivoima studija:
%sql select * from NivoKvalifikacije
ID | NAZIV | |
---|---|---|
0 | 1 | Osnovne akademske studije |
1 | 3 | Doktorske akademske studije |
2 | 2 | Master akademske studije |
Tabela StudijskiProgram¶
Tabela StudijskiProgram
sadrži osnovne podatke o studijskim programima. Svaki studijski program ima oznaku, naziv, nivo, obim u ESPB, odgovarajuće zvanje i opis:
%sql select * from StudijskiProgram
ID | OZNAKA | NAZIV | IDNIVOA | OBIMESPB | ZVANJE | OPIS | |
---|---|---|---|---|---|---|---|
0 | 101 | M | Matematika | 1 | 240 | Diplomirani matematicar | Studijski program Matematika, osnovne akademsk... |
1 | 103 | I | Informatika | 1 | 240 | Diplomirani informaticar | Studije na studijskom programu osnovnih akadem... |
2 | 104 | A | Astronomija i astrofizika | 1 | 240 | Diplomirani astronom | Studijski program Astronomija i astrofizika, o... |
3 | 201 | M2 | Matematika | 2 | 60 | Master matematicar | Studijski program Matematika, master akademske... |
4 | 202 | I2.2 | Informatika | 2 | 120 | Master informaticar | Studije na studijskom programu master akademsk... |
5 | 203 | I2.1 | Informatika | 2 | 60 | Master informaticar | Studije na studijskom programu master akademsk... |
6 | 204 | A2 | Astronomija i astrofizika | 2 | 60 | Master astronom | Studijski program Astronomija i astrofizika, m... |
7 | 301 | M3 | Matematika | 3 | 180 | Doktor nauka - matematicke nauke | Studijski program Matematika, doktorske akadem... |
8 | 302 | I3 | Informatika | 3 | 180 | Doktor nauka - racunarske nauke | Studije se sastoje iz 2 obavezna predmeta koji... |
9 | 303 | A3 | Astronomija i astrofizika | 3 | 180 | Doktor nauka - astronomske nauke | Studijski program Astronomija i astrofizika, d... |
Tabela Predmet¶
Tabela Predmet
sadrži podatke o svim predmetima koji postoje na fakultetu. Svaki predmet ima skraćenu oznaku, naziv i broj ESPB koje nosi:
%sql -all select * from Predmet
ID | OZNAKA | NAZIV | ESPB | |
---|---|---|---|---|
0 | 1578 | P100 | Programiranje 1 | 8 |
1 | 1580 | M105 | Diskretne strukture 1 | 6 |
2 | 1588 | P101 | Programiranje 2 | 8 |
3 | 1590 | M106 | Diskretne strukture 2 | 6 |
4 | 1594 | M1.02 | Uvod u matematicku logiku | 5 |
... | ... | ... | ... | ... |
646 | 2499 | RK2.PMS | Programiranje mreznog saobracaja | 2 |
647 | 2500 | RK2.OTS | Osnove testiranja softvera | 2 |
648 | 2501 | RK2.UITP | Upravljanje IT projektima - Agile metodologije | 2 |
649 | 2502 | RK2.KTP | Kurs tehnoloskog preduzetnistva | 2 |
650 | 2503 | RK2.RVI | Razvoj video igara u C++-u | 2 |
651 rows × 4 columns
Tabela PredmetPrograma¶
Tabela PredmetPrograma
sadrži podatke o obaveznim i izbornim predmetima na studijskim programima.
Da bi student diplomirao, mora da položi sve obavezne predmete studijskog programa i još onoliko izbornih predmeta koliko je potrebno do ukupnog obima studijskog programa u ESPB. Radi jednostavnosti, smatraćemo da se ostali predmeti, koji nisu ni obavezni ni izborni na upisanom studijskom programu, ne računaju u savladan obim predmeta.
Ako je predmet obavezan, onda postoji i podatak o semestru u kome je uobičajeno da se sluša i polaže:
%sql select * from PredmetPrograma
IDPREDMETA | IDPROGRAMA | VRSTA | SEMESTAR | |
---|---|---|---|---|
0 | 1594 | 101 | obavezan | 1 |
1 | 1595 | 101 | obavezan | 1 |
2 | 1600 | 101 | obavezan | 2 |
3 | 1877 | 101 | obavezan | 3 |
4 | 1878 | 101 | obavezan | 3 |
... | ... | ... | ... | ... |
763 | 2438 | 303 | izborni | <NA> |
764 | 2439 | 303 | izborni | <NA> |
765 | 2440 | 303 | izborni | <NA> |
766 | 2441 | 303 | izborni | <NA> |
767 | 2442 | 303 | izborni | <NA> |
768 rows × 4 columns
Tabela UslovniPredmet¶
Tabela UslovniPredmet
sadrži podatke o parovima uslovnhm predmeta. Uslovnosti se definišu na nivou studijskog programa - Na studijskom programu IdPrograma
za polaganje predmeta IdPredmeta
je neophodno da se prvo položi predmet IdUslovnogPredmeta
:
%sql select * from UslovniPredmet
IDPROGRAMA | IDPREDMETA | IDUSLOVNOGPREDMETA | |
---|---|---|---|
0 | 101 | 1600 | 1595 |
1 | 101 | 1883 | 1594 |
2 | 101 | 1889 | 1878 |
3 | 101 | 1890 | 2166 |
4 | 101 | 1890 | 2167 |
... | ... | ... | ... |
393 | 301 | 2315 | 1792 |
394 | 301 | 2315 | 1793 |
395 | 302 | 2277 | 2264 |
396 | 302 | 2283 | 2282 |
397 | 302 | 2289 | 2288 |
398 rows × 3 columns
Tabela StudentskiStatus¶
Tabela StudentskiStatus
sadrži osnovne podatke o statusima koje studenti mogu imati tokom studiranja. Status ima atribute ID, naziv i Studira. Atribut Studira
je 1 akko je status aktivan, tj. ako student u tom statusu trenutno aktivno studira. Primetimo da je ID negativan ako se radi o neaktivnom statusu.
%sql -a select * from StudentskiStatus
ID | NAZIV | STUDIRA | |
---|---|---|---|
0 | 1 | Budzet | 1 |
1 | 2 | Samofinansiranje | 1 |
2 | 3 | Konkurise za budzet | 1 |
3 | -13 | Ispis po resenju | 0 |
4 | -12 | Ispis gostujuceg | 0 |
5 | -11 | Ispunjen uslov za sticanje zvanja | 0 |
6 | -10 | Ispis zbog prekoracenja | 0 |
7 | -9 | Na razmeni | 0 |
8 | -8 | Suspendovan | 0 |
9 | -7 | Mirovanje (budzet) | 0 |
10 | -6 | Ponisten indeks | 0 |
11 | -5 | Neupisan | 0 |
12 | -4 | Stare studije | 0 |
13 | -3 | Mirovanje (samof.) | 0 |
14 | -2 | Diplomirao | 0 |
15 | -1 | Ispisan | 0 |
Tabela Dosije¶
Tabela Dosije
sadrži podatke o studentima. Od ličnih podataka tu su ime, prezime, mesto rođenja i pol. Od podataka o studiranju imamo broj indeksa, upisan studijski program, trenutni status, datum upisa i datum diplomiranja.
Broj indeksa ima oblik GGGGNNNN
, gde je GGGG
godina upisa na fakultet a NNNN
redni broj studenta u toj godini. Iako broj indeksa nije neposredno zavisan od upisanog programa, on implicira tačno jedan upisan program. Ako student menja studijski program ili ponovo upisuje fakultet, onda on dobija nov broj indeksa i novi red u tabeli Dosije
.
%sql select * from Dosije
INDEKS | IDPROGRAMA | IME | PREZIME | POL | MESTORODJENJA | IDSTATUSA | DATUPISA | DATDIPLOMIRANJA | |
---|---|---|---|---|---|---|---|---|---|
0 | 20150069 | 101 | Nemanja | Nicic | m | Sabac | -2 | 2015-07-06 | 2019-09-12 |
1 | 20150090 | 103 | Andrijana | Beara | z | Sabac | -2 | 2015-07-06 | 2019-09-06 |
2 | 20150320 | 103 | Milos | Milenkovic | m | Krusevac | 2 | 2015-07-06 | <NA> |
3 | 20150185 | 101 | Valentina | Stojanov | z | Beograd (Savski venac) | 2 | 2015-07-06 | <NA> |
4 | 20150230 | 103 | Aida | Babic | z | Cacak | 2 | 2015-07-06 | <NA> |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
3491 | 20180100 | 103 | Tara | Bozinovic | z | Beograd (Savski venac) | 1 | 2018-07-02 | <NA> |
3492 | 20190011 | 101 | Ana | Ilic | z | Vrsac | 1 | 2019-07-01 | <NA> |
3493 | 20190254 | 101 | Tamara | Zejak | z | Beograd (Savski venac) | 1 | 2019-07-02 | <NA> |
3494 | 20200213 | 103 | Uros | Stanojkov | m | Uzice | 1 | 2020-07-15 | <NA> |
3495 | 20151029 | 201 | Milos | Djokic | m | Valjevo | -5 | 2015-10-23 | <NA> |
3496 rows × 9 columns
Tabela DosijeExt¶
Tabela DosijeExt
sadrži dodatne opisne podatke o studentima. Namenjena je za rad sa velikim i strukturiranim podacima tipa BLOB
, CLOB
i XML
, kao što su fotografija studenta ili neki dodatni podaci dobijeni skeniranjem i slično. Nećemo je upotrebljavati u okviru ovog predmeta.
%sql describe table DA.DosijeExt
COLNAME | TYPESCHEMA | TYPENAME | LENGTH | SCALE | NULLABLE | |
---|---|---|---|---|---|---|
0 | INDEKS | SYSIBM | INTEGER | 4 | 0 | N |
1 | FOTOGRAFIJA | SYSIBM | BLOB | 10485760 | 0 | Y |
2 | PODACICLOB | SYSIBM | CLOB | 10485760 | 0 | Y |
3 | PODACIXML | SYSIBM | XML | 0 | 0 | Y |
Tabela SkolskaGodina¶
Tabela SkolskaGodina
sadrži podatke o školskim godinama. Školske godine se označavaju kalendarskom godinom početka. Na primer, školska godina 2019/2020 se označava brojem 2019:
%sql select * from SkolskaGodina
SKGODINA | DATPOCETKA | DATKRAJA | |
---|---|---|---|
0 | 2015 | 2015-10-01 | 2016-09-30 |
1 | 2016 | 2016-10-01 | 2017-09-30 |
2 | 2017 | 2017-10-01 | 2018-09-30 |
3 | 2018 | 2018-10-01 | 2019-09-30 |
4 | 2019 | 2019-10-01 | 2020-09-30 |
5 | 2020 | 2020-10-01 | 2021-09-30 |
Tabela UpisGodine¶
Tabela UpisGodine
sadrži podatke o upisanim školskim godinama. Svaki red sadrži podatke o jednom upisu školske godine od strane jednog studenta. Atributi su indeks studenta koji je upisao godinu, oznaka upisane školske godine, datum upisa i status koji je student imao pri upisu. Status može i naknadno da se promeni, na primer zbog mirovanja:
%sql select * from UpisGodine
INDEKS | SKGODINA | DATUPISA | IDSTATUSA | |
---|---|---|---|---|
0 | 20150069 | 2015 | 2015-07-06 | 1 |
1 | 20150069 | 2016 | 2016-10-03 | 1 |
2 | 20150069 | 2017 | 2017-10-03 | 1 |
3 | 20150069 | 2018 | 2018-10-02 | 1 |
4 | 20150109 | 2015 | 2015-07-06 | 1 |
... | ... | ... | ... | ... |
9040 | 20200112 | 2020 | 2020-09-28 | 2 |
9041 | 20200015 | 2020 | 2020-09-28 | 2 |
9042 | 20200022 | 2020 | 2020-09-30 | 2 |
9043 | 20200011 | 2020 | 2020-10-01 | 2 |
9044 | 20200239 | 2020 | 2020-10-02 | 2 |
9045 rows × 4 columns
Tabela Semestar¶
Tabela Semestar
sadrži podatke o semestrima:
%sql select * from Semestar
SKGODINA | SEMESTAR | |
---|---|---|
0 | 2015 | 1 |
1 | 2015 | 2 |
2 | 2016 | 1 |
3 | 2016 | 2 |
4 | 2017 | 1 |
... | ... | ... |
7 | 2018 | 2 |
8 | 2019 | 1 |
9 | 2019 | 2 |
10 | 2020 | 1 |
11 | 2020 | 2 |
12 rows × 2 columns
Tabela Kurs¶
Tabela Kurs
sadrži podatke o kursevima. Kurs je jedno držanje nastave iz jednog predmeta. Jedan red sadrži podatke o držanju jednog predmeta u jednom semestru. Jedan predmet može da se drži u oba semestra jedne školske godine:
%sql select * from Kurs
SKGODINA | SEMESTAR | IDPREDMETA | |
---|---|---|---|
0 | 2015 | 1 | 1578 |
1 | 2015 | 1 | 1580 |
2 | 2015 | 1 | 1594 |
3 | 2015 | 1 | 1595 |
4 | 2015 | 1 | 1673 |
... | ... | ... | ... |
2406 | 2020 | 2 | 2488 |
2407 | 2020 | 2 | 2490 |
2408 | 2020 | 2 | 2491 |
2409 | 2020 | 2 | 2497 |
2410 | 2020 | 2 | 2501 |
2411 rows × 3 columns
Tabela UpisanKurs¶
Tabela UpisanKurs
sadrži podatke o kursevima koje studenti upisuju u upisanim školskim godinama. Postoje podaci o tome koji student je u kojoj skolskoj godini i kom semestru upisao koji predmet (tj. kurs). Jedan student ne može da upiše dva kursa iz istog predmeta u istoj školskoj godini:
%sql select * from UpisanKurs
INDEKS | SKGODINA | SEMESTAR | IDPREDMETA | |
---|---|---|---|---|
0 | 20150069 | 2015 | 1 | 1594 |
1 | 20150069 | 2015 | 1 | 1595 |
2 | 20150069 | 2015 | 1 | 2166 |
3 | 20150069 | 2015 | 1 | 2167 |
4 | 20150069 | 2015 | 1 | 2168 |
... | ... | ... | ... | ... |
74039 | 20200165 | 2020 | 1 | 2168 |
74040 | 20180008 | 2020 | 1 | 2022 |
74041 | 20180012 | 2020 | 1 | 2022 |
74042 | 20180057 | 2020 | 1 | 2022 |
74043 | 20180145 | 2020 | 1 | 2022 |
74044 rows × 4 columns
Tabela IspitniRok¶
Tabela IspitniRok
sadrži podatke o ispitnim rokovima. Za svaki ispitni rok imamo oznaku i naziv, datume početka i kraja, kao i školsku godinu na koju se odnosi:
%sql select * from IspitniRok
SKGODINA | OZNAKAROKA | NAZIV | DATPOCETKA | DATKRAJA | |
---|---|---|---|---|---|
0 | 2015 | jan1 | Januar1 2016 | 2016-01-01 | 2016-01-28 |
1 | 2015 | jan1P | Januar1-PS 2016 | 2016-01-01 | 2016-01-28 |
2 | 2015 | jan2 | Januar2 2016 | 2016-01-25 | 2016-02-18 |
3 | 2015 | jun1 | Jun1 2016 | 2016-05-23 | 2016-06-16 |
4 | 2015 | jun2 | Jun2 2016 | 2016-06-10 | 2016-07-06 |
... | ... | ... | ... | ... | ... |
34 | 2019 | jun2 | Jun2 2020 | 2020-06-13 | 2020-07-06 |
35 | 2019 | sep1 | Septembar1 2020 | 2020-08-05 | 2020-08-28 |
36 | 2019 | sep2 | Septembar2 2020 | 2020-08-18 | 2020-09-10 |
37 | 2019 | sep3 | Septembar3 2020 | 2020-09-01 | 2020-09-24 |
38 | 2019 | sep4 | Septembar4 2020 | 2020-09-17 | 2020-10-08 |
39 rows × 5 columns
Tabela Ispit¶
Tabela Ispit
sadrži podatke o prijavljenim i održanim ispitima. Za svaki prijavljen i/ili položen ispit se vode podaci o školskoj godini, oznaci roka, predmetu, indeksu studenta, statusu prijave, datumu polaganja, broju osvojenih poena (0-100) i oceni (5-10). Status prijave može da bude:
- p - ispit je prijavljen i još nije održan (broj poena i ocena nisu uneseni);
- n - student nije izašao (broj poena i ocena nisu uneseni);
- o - student je polagao ispit (broj poena i ocena su uneseni);
- d - student je diskvalifikovan (broj poena i ocena su uneseni, ocena=5);
- s - student je odustao (broj poena i ocena su uneseni, ocena=5);
- x - ispit je poništen (broj poena i ocena su uneseni ali imaju samo arhivski značaj).
Samo redovi sa statusom "o" i pozitivnom ocenom označavaju da je ispit položen.
%sql select * from Ispit
SKGODINA | OZNAKAROKA | INDEKS | IDPREDMETA | STATUS | DATPOLAGANJA | POENI | OCENA | |
---|---|---|---|---|---|---|---|---|
0 | 2015 | jan1 | 20150069 | 1594 | o | 2016-02-03 | 100 | 10 |
1 | 2015 | jan1 | 20150069 | 1595 | o | 2016-02-02 | 96 | 10 |
2 | 2015 | jan1 | 20150069 | 2168 | o | 2016-01-30 | 92 | 10 |
3 | 2015 | jan1 | 20150109 | 1594 | o | 2016-02-17 | 100 | 10 |
4 | 2015 | jan1 | 20150109 | 1595 | o | 2016-02-02 | 100 | 10 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
119138 | 2019 | sep4 | 20192005 | 1673 | o | 2020-09-15 | 79 | 8 |
119139 | 2019 | sep4 | 20192005 | 1674 | o | 2020-09-30 | 85 | 9 |
119140 | 2019 | sep4 | 20192015 | 1673 | o | 2020-09-28 | 90 | 9 |
119141 | 2019 | sep4 | 20192015 | 1674 | o | 2020-09-29 | 73 | 8 |
119142 | 2019 | sep4 | 20192010 | 1674 | o | 2020-09-28 | 97 | 10 |
119143 rows × 8 columns
Tabela PriznatIspit¶
Tabela PriznatIspit
sadrži podatke o ispitima koji su studentima priznati. Ispiti koji se priznaju su položeni na drugom fakultetu ili na drugom (možda starijem) studijskom programu. Radi jednostavnosti, ne čuvaju se detaljni podaci o položenim prdmetima već samo oni koji su neophodni za njihovo vrednovanje: naziv, obim u ESPB i ocena. Svi priznati ispit se vrednuju kao da su na upisanom studijskom programu, a mogu imati nedefinisanu ocenu, ako se predmet nije ocenjivao:
%sql select * from PriznatIspit
INDEKS | NAZIVPREDMETA | ESPB | OCENA | |
---|---|---|---|---|
0 | 20150381 | Diferencijalne jednacine | 6 | 9 |
1 | 20150381 | Finansije | 6 | 9 |
2 | 20150381 | Fizika | 6 | 7 |
3 | 20150381 | Funkcionalna analiza | 6 | 9 |
4 | 20150381 | Geometrija | 6 | 9 |
... | ... | ... | ... | ... |
4994 | 20200265 | Programiranje 1 | 6 | 6 |
4995 | 20200265 | Programiranje 2 | 6 | 6 |
4996 | 20200265 | Psihologija | 3 | 9 |
4997 | 20200265 | Uvod u astronomiju | 6 | 7 |
4998 | 20200265 | Uvod u filozofiju | 5 | 9 |
4999 rows × 4 columns
Podaci o bazi podataka¶
Sistem DB2 ima više naredbi koje mogu da nam pomognu da bolje upoznamo bazu podataka sa kojom radimo. Na samom početku smo već videli naredbu LIST TABLES
koja izdvaja spisak tabela baze podataka:
%sql list tables
TABNAME | TABSCHEMA | DESCRIPTION | |
---|---|---|---|
0 | ADVISE_INDEX | SMALKOV | Table |
1 | ADVISE_INDEX | SYSTOOLS | Table |
2 | ADVISE_INSTANCE | SMALKOV | Table |
3 | ADVISE_INSTANCE | SYSTOOLS | Table |
4 | ADVISE_MQT | SMALKOV | Table |
5 | ADVISE_MQT | SYSTOOLS | Table |
6 | ADVISE_PARTITION | SMALKOV | Table |
7 | ADVISE_PARTITION | SYSTOOLS | Table |
8 | ADVISE_TABLE | SMALKOV | Table |
9 | ADVISE_TABLE | SYSTOOLS | Table |
10 | ADVISE_WORKLOAD | SMALKOV | Table |
11 | ADVISE_WORKLOAD | SYSTOOLS | Table |
12 | DOSIJE | DA | Table |
13 | DOSIJE | DB | Table |
14 | DOSIJEEXT | DA | Table |
15 | DOSIJEEXT | DB | Table |
16 | EXPLAIN_ACTUALS | SMALKOV | Table |
17 | EXPLAIN_ACTUALS | SYSTOOLS | Table |
18 | EXPLAIN_ARGUMENT | SMALKOV | Table |
19 | EXPLAIN_ARGUMENT | SYSTOOLS | Table |
20 | EXPLAIN_DIAGNOSTIC | SMALKOV | Table |
21 | EXPLAIN_DIAGNOSTIC | SYSTOOLS | Table |
22 | EXPLAIN_DIAGNOSTIC_DATA | SMALKOV | Table |
23 | EXPLAIN_DIAGNOSTIC_DATA | SYSTOOLS | Table |
24 | EXPLAIN_INSTANCE | SMALKOV | Table |
25 | EXPLAIN_INSTANCE | SYSTOOLS | Table |
26 | EXPLAIN_OBJECT | SMALKOV | Table |
27 | EXPLAIN_OBJECT | SYSTOOLS | Table |
28 | EXPLAIN_OPERATOR | SMALKOV | Table |
29 | EXPLAIN_OPERATOR | SYSTOOLS | Table |
30 | EXPLAIN_PREDICATE | SMALKOV | Table |
31 | EXPLAIN_PREDICATE | SYSTOOLS | Table |
32 | EXPLAIN_STATEMENT | SMALKOV | Table |
33 | EXPLAIN_STATEMENT | SYSTOOLS | Table |
34 | EXPLAIN_STREAM | SMALKOV | Table |
35 | EXPLAIN_STREAM | SYSTOOLS | Table |
36 | ISPIT | DA | Table |
37 | ISPIT | DB | Table |
38 | ISPITNIROK | DA | Table |
39 | ISPITNIROK | DB | Table |
40 | KURS | DA | Table |
41 | KURS | DB | Table |
42 | NIVOKVALIFIKACIJE | DA | Table |
43 | NIVOKVALIFIKACIJE | DB | Table |
44 | OBJECT_METRICS | SMALKOV | Table |
45 | OBJECT_METRICS | SYSTOOLS | Table |
46 | PREDMET | DA | Table |
47 | PREDMET | DB | Table |
48 | PREDMETPROGRAMA | DA | Table |
49 | PREDMETPROGRAMA | DB | Table |
50 | PRIZNATISPIT | DA | Table |
51 | PRIZNATISPIT | DB | Table |
52 | SEMESTAR | DA | Table |
53 | SEMESTAR | DB | Table |
54 | SKOLSKAGODINA | DA | Table |
55 | SKOLSKAGODINA | DB | Table |
56 | STUDENTSKISTATUS | DA | Table |
57 | STUDENTSKISTATUS | DB | Table |
58 | STUDIJSKIPROGRAM | DA | Table |
59 | STUDIJSKIPROGRAM | DB | Table |
60 | UPISANKURS | DA | Table |
61 | UPISANKURS | DB | Table |
62 | UPISGODINE | DA | Table |
63 | UPISGODINE | DB | Table |
64 | USLOVNIPREDMET | DA | Table |
65 | USLOVNIPREDMET | DB | Table |
%sql list tables for schema da
TABNAME | TABSCHEMA | DESCRIPTION | |
---|---|---|---|
0 | DOSIJE | DA | Table |
1 | DOSIJEEXT | DA | Table |
2 | ISPIT | DA | Table |
3 | ISPITNIROK | DA | Table |
4 | KURS | DA | Table |
5 | NIVOKVALIFIKACIJE | DA | Table |
6 | PREDMET | DA | Table |
7 | PREDMETPROGRAMA | DA | Table |
8 | PRIZNATISPIT | DA | Table |
9 | SEMESTAR | DA | Table |
10 | SKOLSKAGODINA | DA | Table |
11 | STUDENTSKISTATUS | DA | Table |
12 | STUDIJSKIPROGRAM | DA | Table |
13 | UPISANKURS | DA | Table |
14 | UPISGODINE | DA | Table |
15 | USLOVNIPREDMET | DA | Table |
Još jedna korisna naredba je naredba DESCRIBE
, koja opisuje kolone izabrane tabele ili čak kolone upita koji smo postavili. Opis obuhvata nazive kolona i njihove tipove:
%sql describe table dosije
COLNAME | TYPESCHEMA | TYPENAME | LENGTH | SCALE | NULLABLE | |
---|---|---|---|---|---|---|
0 | INDEKS | SYSIBM | INTEGER | 4 | 0 | N |
1 | IDPROGRAMA | SYSIBM | INTEGER | 4 | 0 | N |
2 | IME | SYSIBM | VARCHAR | 50 | 0 | N |
3 | PREZIME | SYSIBM | VARCHAR | 50 | 0 | N |
4 | POL | SYSIBM | CHARACTER | 1 | 0 | Y |
5 | MESTORODJENJA | SYSIBM | VARCHAR | 50 | 0 | Y |
6 | IDSTATUSA | SYSIBM | SMALLINT | 2 | 0 | N |
7 | DATUPISA | SYSIBM | DATE | 4 | 0 | N |
8 | DATDIPLOMIRANJA | SYSIBM | DATE | 4 | 0 | Y |
%sql describe select indeks, ime, prezime from dosije
SQLTYPE_ID | SQLTYPE | SQLLENGTH | SQLSCALE | SQLNAME_DATA | SQLNAME_LENGTH | SQLDATATYPE_NAME_DATA | SQLDATATYPE_NAME_LENGTH | |
---|---|---|---|---|---|---|---|---|
0 | 496 | INTEGER | 4 | 0 | INDEKS | 6 | 0 | |
1 | 448 | VARCHAR | 50 | 0 | IME | 3 | 0 | |
2 | 448 | VARCHAR | 50 | 0 | PREZIME | 7 | 0 |
Po standardu SQL-a svi podaci o bazi podataka moraju da budu sačuvani upravo u toj istoj bazi podataka. Štaviše, sve podatke o bazi podataka bi trebalo da možemo da pročitamo (ali ne i da izmenimo) upotrebom istih upitnih naredbi kojima čitamo i sadržaj naših podataka zapisanih u toj bazi podataka. To se ostvaruje tako što se u samoj bazi podataka prave tzv. sistemske tabele u kojima se nalaze podaci o organizaciji ali i implementaciji baze podataka.
U slučaju sistema DB2, ti podaci se nalaze zapisani u rezervisanim shemama SYSIBM
, SYSIBMADM
, SYSPUBLIC
, SYSCAT
, SYSSTAT
i SYSTOOLS
. Podaci o strukturi i sadržaju baze podataka mogu da se pročitaju iz tzv sistemskog kataloga, koji čine podaci u shemi SYSCAT
:
%sql -a list tables for schema syscat
TABNAME | TABSCHEMA | DESCRIPTION | |
---|---|---|---|
0 | ATTRIBUTES | SYSCAT | View |
1 | AUDITPOLICIES | SYSCAT | View |
2 | AUDITUSE | SYSCAT | View |
3 | BUFFERPOOLDBPARTITIONS | SYSCAT | View |
4 | BUFFERPOOLEXCEPTIONS | SYSCAT | View |
... | ... | ... | ... |
150 | XSROBJECTCOMPONENTS | SYSCAT | View |
151 | XSROBJECTDEP | SYSCAT | View |
152 | XSROBJECTDETAILS | SYSCAT | View |
153 | XSROBJECTHIERARCHIES | SYSCAT | View |
154 | XSROBJECTS | SYSCAT | View |
155 rows × 3 columns
Na primer, tabela (zapravo je u pitanju pogled, ali o tome ćemo više kasnije) SYSCAT.TABLES
sadrži podatke o svim
tabelama, a SYSCAT.COLUMNS
podatke o svim kolonama u bazi podataka:
%%sql -a
select *
from syscat.tables
where tabschema = 'DA'
%%sql -a
select *
from syscat.columns
where tabschema = 'DA'
and tabname = 'DOSIJE'
TABSCHEMA | TABNAME | COLNAME | COLNO | TYPESCHEMA | TYPENAME | LENGTH | SCALE | TYPESTRINGUNITS | STRINGUNITSLENGTH | DEFAULT | NULLS | CODEPAGE | COLLATIONSCHEMA | COLLATIONNAME | LOGGED | COMPACT | COLCARD | HIGH2KEY | LOW2KEY | AVGCOLLEN | KEYSEQ | PARTKEYSEQ | NQUANTILES | NMOSTFREQ | NUMNULLS | TARGET_TYPESCHEMA | TARGET_TYPENAME | SCOPE_TABSCHEMA | SCOPE_TABNAME | SOURCE_TABSCHEMA | SOURCE_TABNAME | DL_FEATURES | SPECIAL_PROPS | HIDDEN | INLINE_LENGTH | PCTINLINED | IDENTITY | ROWCHANGETIMESTAMP | GENERATED | TEXT | COMPRESS | AVGDISTINCTPERPAGE | PAGEVARIANCERATIO | SUB_COUNT | SUB_DELIM_LENGTH | AVGCOLLENCHAR | IMPLICITVALUE | SECLABELNAME | ROWBEGIN | ROWEND | TRANSACTIONSTARTID | PCTENCODED | AVGENCODEDCOLLEN | QUALIFIER | FUNC_PATH | RANDDISTKEY | REMARKS | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | DA | DOSIJE | DATUPISA | 7 | SYSIBM | DATE | 4 | 0 | <NA> | <NA> | <NA> | N | 0 | <NA> | <NA> | 116 | '2020-10-01' | '2015-07-07' | 4 | <NA> | 0 | 20 | 10 | 0 | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | 0 | -1 | N | N | <NA> | O | NaN | -1.0 | -1 | -1 | -1 | <NA> | <NA> | N | N | N | -1 | -1.0 | <NA> | <NA> | N | <NA> | ||||
1 | DA | DOSIJE | DATDIPLOMIRANJA | 8 | SYSIBM | DATE | 4 | 0 | <NA> | <NA> | <NA> | Y | 0 | <NA> | <NA> | 179 | '2020-09-30' | '2016-06-23' | 5 | <NA> | 0 | 20 | 10 | 3091 | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | 0 | -1 | N | N | <NA> | O | NaN | -1.0 | -1 | -1 | -1 | <NA> | <NA> | N | N | N | -1 | -1.0 | <NA> | <NA> | N | <NA> | ||||
2 | DA | DOSIJE | INDEKS | 0 | SYSIBM | INTEGER | 4 | 0 | <NA> | <NA> | <NA> | N | 0 | <NA> | <NA> | 3496 | 20200347 | 20150002 | 4 | 1 | 0 | 20 | 10 | 0 | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | 0 | -1 | N | N | <NA> | O | NaN | -1.0 | -1 | -1 | -1 | <NA> | <NA> | N | N | N | -1 | -1.0 | <NA> | <NA> | N | <NA> | ||||
3 | DA | DOSIJE | IDPROGRAMA | 1 | SYSIBM | INTEGER | 4 | 0 | <NA> | <NA> | <NA> | N | 0 | <NA> | <NA> | 10 | 302 | 103 | 4 | <NA> | 0 | 20 | 10 | 0 | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | 0 | -1 | N | N | <NA> | O | NaN | -1.0 | -1 | -1 | -1 | <NA> | <NA> | N | N | N | -1 | -1.0 | <NA> | <NA> | N | <NA> | ||||
4 | DA | DOSIJE | IME | 2 | SYSIBM | VARCHAR | 50 | 0 | OCTETS | 50 | <NA> | N | 1208 | SYSIBM | SYSTEM_1251 | 464 | 'Zorka' | 'Ada' | 10 | <NA> | 0 | 20 | 10 | 0 | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | 0 | -1 | N | N | <NA> | O | NaN | -1.0 | -1 | -1 | 6 | <NA> | <NA> | N | N | N | -1 | -1.0 | <NA> | <NA> | N | <NA> | ||||
5 | DA | DOSIJE | PREZIME | 3 | SYSIBM | VARCHAR | 50 | 0 | OCTETS | 50 | <NA> | N | 1208 | SYSIBM | SYSTEM_1251 | 1472 | 'Zupcic' | 'Adam' | 12 | <NA> | 0 | 20 | 10 | 0 | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | 0 | -1 | N | N | <NA> | O | NaN | -1.0 | -1 | -1 | 8 | <NA> | <NA> | N | N | N | -1 | -1.0 | <NA> | <NA> | N | <NA> | ||||
6 | DA | DOSIJE | POL | 4 | SYSIBM | CHARACTER | 1 | 0 | OCTETS | 1 | <NA> | Y | 1208 | SYSIBM | SYSTEM_1251 | 2 | 'z' | 'm' | 2 | <NA> | 0 | 20 | 10 | 0 | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | 0 | -1 | N | N | <NA> | O | NaN | -1.0 | -1 | -1 | -1 | <NA> | <NA> | N | N | N | -1 | -1.0 | <NA> | <NA> | N | <NA> | ||||
7 | DA | DOSIJE | MESTORODJENJA | 5 | SYSIBM | VARCHAR | 50 | 0 | OCTETS | 50 | <NA> | Y | 1208 | SYSIBM | SYSTEM_1251 | 182 | 'Zrenjanin' | 'Arandjelovac' | 18 | <NA> | 0 | 20 | 10 | 0 | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | 0 | -1 | N | N | <NA> | O | NaN | -1.0 | -1 | -1 | 13 | <NA> | <NA> | N | N | N | -1 | -1.0 | <NA> | <NA> | N | <NA> | ||||
8 | DA | DOSIJE | IDSTATUSA | 6 | SYSIBM | SMALLINT | 2 | 0 | <NA> | <NA> | <NA> | N | 0 | <NA> | <NA> | 9 | 1 | -7 | 2 | <NA> | 0 | 20 | 10 | 0 | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | <NA> | 0 | -1 | N | N | <NA> | O | NaN | -1.0 | -1 | -1 | -1 | <NA> | <NA> | N | N | N | -1 | -1.0 | <NA> | <NA> | N | <NA> |