Professional Documents
Culture Documents
Baze Podataka
Baze Podataka
Analiza potreba
Normalizacija
Jednostavni upiti
Kreiranje i modificiranje tablica
Složeni upiti
Funkcije
Grupirajući upiti
Čuvanje integriteta baze
Zaštita podataka
Neki korisni linkovi
Za praćenje vježbi vezanih za SQL (od "Jednostavni upiti" nadalje), te za izradu druge zadaće, trebat će Vam
korisnički račun za pristup MySQL bazi na računalu student. To nije isto što i korisnički račun za pristup
računalnom sustavu na PMF-MO-u, nego račun za pristup MySQL-u morate posebno otvoriti. Korisnički račun
za pristup MySQL-u kreirate tako da Vašem asistentu pošaljete e-mail sa subjectom otvoriti bazu, sljedećeg
sadržaja:
Pri čemu username treba zamijeniti svojim korisničkim imenom (na svih 6 mjesta), a lozinka zamijeniti
svojom željenom lozinkom. Prilikom utipkavanja lozinke pripazite da ne obrišete jednostruke navodnike - oni
moraju okruživati lozinku. Lozinka se smije sastojati od znamenki te malih i velikih slova engleske abecede i
mora biti dugačka između 4 i 8 znakova. Nakon slanja e-maila, u roku tjedan dana Vaš račun će biti kreiran.
Pacijent se obično smješta u bolničku sobu prilikom dolaska u bolnicu. Svaka soba može primiti mnogo
pacijenata, i imamo sobe različitih tipova. Konzultanti (stariji kirurzi) bolnice smiju imati i svoje pacijente, koji
su smješteni u jednokrevetnim privatnim sobama. Informacije koje treba pamtiti o pacijentu uključuju
jedinstveni broj zdravstvenog osiguranja, ime, adresu itd.
Sestra može ili ne mora biti zadužena za sobu. Pritom jedna sestra može biti zadužena za najviše jednu sobu, no
za istu sobu može biti zaduženo više sestara. Sestra je jednoznačno određena svojom identifikacijskom
oznakom.
Jednu operaciju obavlja samo jedan kirurg, a za ostale prisutne kirurge se smatra da oni asistiraju operaciji.
Kirurge nadgledaju stariji kirurzi, tzv. konzultanti, koji također mogu obavljati operacije ili asistirati.
Informacije o jednom kirurgu su ime (pretp. jedinstveno), adresa, br. telefona itd. Svaki konzultant ima svoju
specijalnost.
Jedna operacija se odvija u samo jednoj sali, no ista sala može biti mjesto mnogih operacija. Svaka sala ima
svoj identifikacijski broj. Neke sale su specijalno opremljene za neke vrste operacija.
Sestra može ili ne mora biti zadužena za salu, no ne može biti zadužena za više od jedne sale. Za jednu salu
može biti zaduženo mnogo sestara.
Rješenje
Lista atributa bi se svakako mogla i proširiti, no bit će dovoljna za primjer. Dalje slijedi lista veza:
1. OBAVLJA, 1:N veza između tipova entiteta KIRURG i OPERACIJA, s time da OPERACIJA ima
obavezno članstvo.
2. ASISTIRA, N:M veza između tipova entiteta KIRURG i OPERACIJA. Mogući atribut veze je ULOGA
kirurga u operaciji.
3. NADGLEDA, 1:N veza između tipova entiteta KONZULTANT i KIRURG. Članstvo KIRURGA je
neobavezno, jer ima kirurga (npr. konzultanti) koje nitko ne nadgleda.
4. LIJEČI, 1:N veza između tipa entiteta KONZULTANT i podtipa PRIVATNI_PACIJENT. Članstvo
PRIVATNOG_PACIJENTA je obavezno.
5. PODVRGAVA_SE, 1:N veza između tipova entiteta PACIJENT i OPERACIJA. Članstvo OPERACIJE
je obavezno.
6. ZAUZIMA, 1:N veza između tipova entiteta SOBA i PACIJENT, gdje je članstvo PACIJENTA "skoro"
obavezno (svi pacijenti osim nekolicine privatnih smješteni su u običnim sobama).
7. ODVIJA_SE, 1:N veza između tipova entiteta SALA i OPERACIJA. Članstvo OPERACIJE je
obavezno.
8. ZADUŽENA_ZA_SOBU, 1:N veza između tipova entiteta SOBA i SESTRA. Mogući atribut veze je
DATUM_ZADUŽIVANJA. Članstvo SESTRE je neobavezno.
9. ZADUŽENA_ZA_SALU, 1:N veza tipova entiteta SALA i SESTRA. Atribut veze je DATUM_
ZADUŽENJA. Članstvo SESTRE je neobavezno.
Osim navedenih veza imamo standardnu vezu JE između podtipa KOZULTANT i tipa KIRURG, te također
između podtipa PRIVATNI_PACIJENT i tipa PACIJENT.
Vježbe 2: Normalizacija
1. Promatramo zapis o suradniku neke firme i njegovoj djeci:
SURADNIK
MATIČNI_BROJ_SURADNIKA IME_I_PREZIME GOD_ROĐENJA_SURADNIKA IME_DJETETA GOD_ROĐENJA_DJETETA
Rješenje:
SURADNIK
MATIČNI_BROJ_SURADNIKA IME_I_PREZIME GOD_ROĐENJA_SURADNIKA
DIJETE
JMBG_DJETETA IME_DJETETA GOD_ROĐENJA_DJETETA
IMA_DIJETE
MATIČNI_BROJ_RADNIKA JMBG_DJETETA
2. Tvornica sklapa proizvode od dijelova, a dijelove kupuje od raznih dobavljača. Isti dio se može dobiti od
raznih dobavljača po raznim cijenama, a isti dobavljač nudi razne dijelove. Situacija je opisana relacijom
CJENIK
BR_DIJELA BR_DOBAVLJAČA NAZIV_DIJELA NAZIV_DOBAVLJAČA ADRESA_DOBAVLJAČA CIJENA
Rješenje:
DOBAVLJAČ
BR_DOBAVLJAČA NAZIV_DOBAVLJAČA ADRESA_DOBAVLJAČA
DIO
BR_DIJELA NAZIV_DIJELA
PRODAJE
BR_DOBAVLJAČA BR_DIJELA CIJENA
3. Suradnici neke firme rade na raznim projektima. Pritom jedan suradnik radi na točno jednom projektu.
Situacija je opisana relacijom
SURADNIK
MATIČNI_BROJ IME_I_PREZIME PLAĆA BROJ_PROJEKTA ROK_ZAVRŠETKA_PROJEKTA
Rješenje:
SURADNIK
MATIČNI_BROJ IME_I_PREZIME PLAĆA BROJ_PROJEKTA
PROJEKT
BROJ_PROJEKTA ROK_ZAVRŠETKA_PROJEKTA
ISPORUKA
BR_ISPORUKE DATUM_SLANJA BR_KUPCA IME_KUPCA ADRESA_KUPCA BR_PROIZVODA NAZIV_PROIZVODA
4. Tvornica isporučuje svoje proizvode kupcima. Jedna isporuka šalje se jednom kupcu i može sadržavati više
komada raznih proizvoda. Situacija je prikazana sljedećim zapisom:
KUPAC
BR_KUPCA IME_KUPCA ADRESA_KUPCA
PROIZVOD
BR_PROIZVODA NAZIV_PROIZVODA
ISPORUKA
BR_ISPORUKE DATUM_SLANJA BR_KUPCA
PROIZVOD_U_ISPORUCI
BR_PROIZVODA BR_ISPORUKE
5. Jedan kolegij održava se uvijek u istoj predavaonici, no u nekoliko vremenskih termina tjedno. Situacija je
opisana relacijom
RASPORED
BR_PREDAVAONICE VREMENSKI_TERMIN BR_KOLEGIJA
Rješenje:
KOLEGIJ
BR_KOLEGIJA BR_PREDAVAONICE
RASPORED
BR_KOLEGIJA VREMENSKI_TERMIN
Vježbe 6: Funkcije
1. Izračunajte izraz esin x + ecos x za x=1.2.
2. Ispišite plaće svih nastavnika u stranoj valuti, kao cijeli broj. Jedinica strane valute vrijedi kao 7.8
jedinica domaće.
3. Ispišite parove studenata koji su se rodili istog dana u tjednu. (Bez dupliciranih parova - parove (A,B) i
(B,A) smatramo jednakima i bez "simetričnih" parova (A,A).
4. Prikažite uspjeh studenata koji su položili predmet sa šifrom 56001 u obliku histograma (veća ocjena -
dulji niz zvjezdica).
5. Ispišite svoje korisničko ime i trenutnu verziju MySQL-a.
Primjer 1: Stvorit ćemo nove tablice STUDENT, NASTAVNIK, PREDMET i UPISAO, ali tako da u što većoj mjeri
štitimo integritet. Nove tablice ćemo napuniti podacima iz demo baze fakultet.
Prvo moramo obrisati stare tablice naredbama:
DROP TABLE STUDENT;
DROP TABLE NASTAVNIK;
DROP TABLE PREDMET;
DROP TABLE UPISAO;
Nakon toga stvaramo tablice na novi način:
CREATE TABLE STUDENT
(JMBAG NUMERIC(10) UNSIGNED NOT NULL,
PREZIMES CHAR(20),
IMES CHAR(20),
DATR DATE,
GODINA ENUM('1','2','3','4','5'),
PRIMARY KEY(JMBAG))ENGINE=INNODB;
Transakcija je niz naredbi koji prevodi bazu iz jednog konzistentnog stanja u drugo. Međustanja (stanja između
pojedinih naredbi unutar transakcije) mogu biti nekonzistentna. Zato transakcija mora biti izvršena cijela ili ne
smije uopće biti izvršena. Znači, kada želimo da se neke naredbe izvrse "u komadu" (recimo da želimo uplatiti
neki iznos sa našeg računa na račun nekog poduzeća, ne bismo htjeli da se operacija oduzimanja novaca s našeg
računa provede prije nego što budemo sigurni da će se provesti i operacija uplate na račun primatelja) takve
naredbe pišemo unutar transakcije. Transakciju počinjemo naredbom SET AUTOCOMMIT=0; (koja prebacuje
SQL iz početnog stanja u kome se svaka naredba izvršava odmah nakon što je napisana u stanje u kojem se
čeka eksplicitni zahtjev za izvršavanjem naredbi) i naredbom BEGIN; (koja označava početak transakcije).
Nakon toga pišemo naredbe koje su dio transakcije i kada smo gotovi pišemo naredbu COMMIT; (ako želimo
izvršiti čitavu transakciju) ili ROLLBACK; (ako ne želimo da se transakcija izvrši). Na kraju vraćamo SET
AUTOCOMMIT=1;. Za korištenje transakcija, tablice moraju biti tipa InnoDB.
Primjer 2: Transakcija kojom se novčani iznos od 1000 kuna prebacuje iz plaće nastavnika Cantora u plaću
nastavnika Codda. Pod čuvanjem konzistentnosti smatramo činjenicu da je ukupan zbroj plaća ostao isti.
SET AUTOCOMMIT=0;
BEGIN;
UPDATE NASTAVNIK SET SALARY=SALARY-1000 WHERE LNAME='Cantor';
UPDATE NASTAVNIK SET SALARY=SALARY+1000 WHERE LNAME='Codd';
COMMIT;
SET AUTOCOMMIT=1;
Možete nakon svake naredbe pisati SELECT * FROM NASTAVNIK; kako biste vidjeli efekt onoga sto se
događa).
Primjer 1: Naredba kojom se neregistiriranom (anonymous) korisniku, prijavljenom sa lokalnog računala (tj.
računala na kojem se nalazi baza) dozvoljava pretraživanje baze fakultet.
GRANT SELECT ON fakultet.* TO ' '@localhost;
Primjer 2: Niz naredbi kojima se stvara korisnik somestudent s lozinkom loz000, koji se prijavljuje sa
lokalnog računala, može raditi što želi u svojoj bazi s imenom somestudent, smije pretraživati demo bazu
fakultet i smije učitavati ili ispisivati ASCII datoteke.
CREATE DATABASE somestudent;
GRANT ALL ON somestudent.* TO somestudent@localhost IDENTIFIED BY 'loz000';
GRANT SELECT ON fakultet.* TO somestudent@localhost;
GRANT FILE ON *.* TO somestudent@localhost;
Primjer 3: Naredba kojom se korisniku somestudent oduzima pravo čitanja tablice PREDMET u bazi fakultet.
REVOKE SELECT ON fakultet.NASTAVNIK FROM somestudent@localhost;
________________________________________________________________________________________
ŠTA JE NORMALIZACIJA?
Normalizacija je proces efikasnog organizovanja podataka u bazi podataka. Proces normalizacije se sprovodi da
bi se postigla dva cilja. Prvo, da bi se eliminisali suvišni podaci (na primer, skladištenje istih podataka u
najmanje dve tabele) i drugo, da bi se obezbedio smisao zavisnosti podataka (skladištenje samo onih podataka u
tabeli koji su u relaciji). Oba cilja su izuzetno važna i korisna jer smanjuju prostor koji zauzima baza podataka i
obezbeđuju logičnu povezanost podataka koji se nalaze u tabeli.
NORMALNE FORME
Stručnjaci za baze podataka stvorili su niz smernica čijom primenom se obezbeđuje normalizacija baza
podataka. Ta uputstva se nazivaju normalne forme i obeležene su brojevima od jedan (najniža forma
normalizacije naziva se prva normalna forma ili 1NF) do pet (peta normalna forma ili 5NF). U praktičnoj
upotrebi su uglavnom 1NF, 2NF i 3NF i povremeno 4NF. Peta normalna forma se vrlo retko viđa i zbog toga je
nećemo ovde razmatrati. Pre nego što počnemo da vas upoznajemo sa normalnim formama, važno je da
istaknemo da one predstavljaju smernice i samo smernice. Povremeno je potrebno odstupiti od njih da bi se
zadovoljili praktični zahtevi poslovanja. Međutim, kad god dođe do nekih promena, izuzetno je važno da se
procene svi njihovi mogući uticaji na sistem kao i da se utvrde razlozi za pojavu nedoslednosti. Sad bismo
mogli da razmotrimo normalne forme.
Bojs-Kodova normalna forma naziva se i „treća i po (3,5) normalna forma“ i dodaje još jedan zahtev:
• Tabela mora da zadovoljava kriterijume treće normalne forme.
• Sve determinante moraju biti kandidati za ključ.
Iako je normalizacija baze podataka često odlična ideja, ipak nije neophodna. U stvari, postoje i neki slučajevi u
kojima je namerno narušavanje pravila normalizacije ne samo prihvatljivo, već i preporučljivo.
Ako želite da budete sigurni da je vaša baza podataka normalizovana, obavestite se kako da postavite svoju
bazu podataka u prvu normalnu formu