Professional Documents
Culture Documents
Baze Vjezbe
Baze Vjezbe
BAZE PODATAKA
O predmetu
Web
http://www2.fsr.ba/nastava/baze
To: goran.kraljevic@hteronet.ba
Subject: Baze
1
Polaganje ispita kroz kolokvije ...
Uvod
2
Sustav za upravljanje bazama podataka
Osnovni pojmovi
3
Kljuĉevi, ograniĉenja u relacijskom modelu ...
• Entitetski integritet
• Referencijalni integritet
primarni kljuĉ
primarni kljuĉ strani kljuĉ entitetski integritet
entitetski integritet referencijalni
integritet
4
UML (Unified Modeling Language)
Osnivaĉi UML-a
Relacije u UML-u
ZAVISNOST (dependency)
AGREGACIJA (aggregation)
GENERALIZACIJA (generalization)
REALIZACIJA (realization)
5
UML notacija ...
Modeliranje
primjeri
6
Primjer 1.
Normalizacija na 1NF
7
Normalizacija na 2NF
Normalizacija na 3NF
8
Primjer 1. ( ER model )
9
Primjer 2.
Primjer 2. ( ER model )
10
Primjer 2. ( Relacijski model )
Primjer 3.
11
Primjer 3. ( ER model )
12
Primjer 4.
Primjer 4. ( ER model )
13
Primjer 4. ( Relacijski model )
Primjer 5.
14
Primjer 5.
(nastavak zadatka ...)
...
Evidentiraju se letovi samo putničkih zrakoplova. Let je identificiran šifrom
i datumom leta (npr. "OU763", 1.6.2001), a za let se evidentira s kojeg
aerodroma zrakoplov polijeće, na koji aerodrom slijeće te vrijeme
polijetanja i vrijeme slijetanja. Evidentira se koji zrakoplov leti na kojem
letu.
Evidentiraju se kategorije cijena karata. Svaka kategorija cijena ima svoju
šifru (jedinstveno identificira kategoriju) i naziv (npr. "poslovna",
"ekonomska", "s popustom za zaposlenika kompanije", "s popustom za
osobe mlaĎe od 27 godina", itd). Putnik kupuje kartu točno odreĎene
kategorije cijene za odreĎeni let. Putnik ne može za jedan let kupiti više
od jedne karte. Za svakog putnika se evidentira jmbg (jedinstveno
odreĎuje putnika), prezime i ime.
Primjer 5. ( ER model )
15
Primjer 5. ( Relacijski model )
Modeliranje
primjeri za vjeţbu
16
Primjer 1.
Primjer 2.
17
Primjer 3.
18
Primjer 5. (1.kolokvij – 19.04.2007.)
SQL
19
SQL
SQL
• Primjer SQL naredbe iz DML dijela jezika (iz tablice mjesto dohvaća sve
n-torke kojima je vrijednost atributa poštanski broj jednaka 88000):
SELECT *
FROM mjesto
WHERE pbr = 88000;
20
Izvršavanje SQL iskaza (ORACLE server)
DDL naredbe
Kreiranje tablica
21
Kreiranje tablica
Kreiranje tablice:
Brisanje tablice:
22
Ograniĉenja nad stupcima tablice i nad tablicama ...
• NULL/NOT NULL
• UNIQUE
• PRIMARY KEY
• FOREIGN KEY
• CHECK
• VARCHAR2(size)
• CHAR[(size)]
• NUMBER[(p,s)]
• DATE
23
Tipovi podataka
Veliki objekti
24
SQL – Kreiranje tablica
25
SQL – Izmjena definicije tablice
ALTER TABLE
dodavanje novih atributa
modificiranje postojećih atributa
definiranje default-ne vrijednosti za novi atribut
brisanje atributa
Primjeri:
26
DML naredbe
SELECT, INSERT, UPDATE, DELETE
27
INSERT – Unos podataka u tablicu
Primjeri:
Primjer:
28
UPDATE – Aţuriranje podataka u tablici
Primjer:
Primjer:
29
INSERT – Primjeri
INSERT – Primjeri
30
UPDATE – Primjeri
DELETE – Primjeri
31
Test 1.
(10 bodova)
FSR Schema
(napunjena testnim podacima - koristiti ćemo je na vjeţbama za SELECT upite ...)
32
SELECT – Odabir podataka iz tablice
33
Primjeri
Primjeri
34
Primjeri
Primjeri
35
Primjeri
Primjeri
36
Agregatne funkcije SQL-a
37
Agregatne funkcije SQL-a – Primjeri
GROUP BY
Primjer:
38
GROUP BY
• PRAVILO !
Bilo koji atribut ili izraz u SELECT listi koji
nije agregatna funkcija mora biti i u
GROUP BY iskazu.
MeĎutim, dopušteno je u GROUP BY iskazu
koristiti i one atribute koji se ne nalaze u
SELECT listi.
GROUP BY – Primjeri
• SELECT AVG(placa)
FROM djelatnik
GROUP BY sifra_radmj;
39
GROUP BY – Primjeri
HAVING
40
WHERE – GROUP BY – HAVING
HAVING – Primjeri
41
ORDER BY
Primjer:
42
Izvršavanje SQL iskaza ...
1 DIR 4800
2 TAJNIK 1100 ID_DJELATNIKA SIFRA_RADMJ PLACA
100 IT-VOD 2500
101 IT-PROG 1600 1 DIR 4800
102 IT-ADM 1400 2 TAJNIK 1100
103 IT-PROG 1800
104 IT-PROG 1500 1. 100
101
IT-VOD
IT-PROG
2500
1600 2.
105 IT-PROG 1500 102 IT-ADM 1400
106 IT-ADM 1300 103 IT-PROG 1800
107 IT-PROG 1250 WHERE 104 IT-PROG 1500 GROUP BY
108 IT-PROG 1200
placa > 1000 105 IT-PROG 1500 sifra_radmj
109 IT-PROG 1000 106 IT-ADM 1300
110 IT-PROG 800 107 IT-PROG 1250
111 IT-PROG 900 108 IT-PROG 1200
112 IT-ADM 700 113 IT-PROG 1100
113 IT-PROG 1100 115 IT-PROG 1350
114 IT-PROG 950 200 PROD-VOD 2000
115 IT-PROG 1350 202 PROD-KAM 1400
200 PROD-VOD 2000 203 PROD-KAM 1100
201 PROD-KAM 1000 204 PROD-KAM 1200
202 PROD-KAM 1400 ... ... ...
203 PROD-KAM 1100
204 PROD-KAM 1200
... ... ...
2. 3.
SIFRA_RADMJ COUNT(*) SIFRA_RADMJ COUNT(*)
4.
SIFRA_RADMJ COUNT(*)
ORDER BY IT-PROG 8
2 desc PROD-KAM 3
43
DML naredbe
Funkcije
Funkcije
• CHARACTER funkcije
- LOWER, UPPER, INITCAP, CONCAT, LPAD, RPAD, SUBSTR, INSTR,
LTRIM, RTRIM, LENGTH, TRANSLATE, REPLACE
• NUMBER funkcije
- ROUND, TRUNC, SIGN, SQRT, ABS, MOD
Matematičke (LOG, SIN, TAN, COS, EXP)
• DATE funkcije
- ADD_MONTHS, MONTHS_BETWEEN, NEXT_DAY, LAST_DAY,
ROUND, TRUNC
44
Primjeri – funkcije
Primjeri – funkcije
45
Primjeri – funkcije
NVL funkcija
46
DECODE funkcija – Primjeri
47
Spajanje tablica (ORACLE)
equi-join
non-equi join
outer join
self join
Kartezijev produkt
OSOBA MJESTO
ID IME PBR PBR NAZIV_MJESTA
1 Pero 88000 88000 Mostar
2 Mate 88000 88220 Široki Brijeg
3 Ivo 88220
48
Osnovna sintaksa spajanja
• SELECT COLUMN(S)
FROM TABLES
WHERE uvjet spajanja
PRAVILO !
equi join
Primjer:
• SELECT id, ime, naziv_mjesta
FROM osoba, mjesto
WHERE osoba.pbr=mjesto.pbr;
OSOBA MJESTO
49
equi join
Primjer:
• SELECT id, ime, naziv_mjesta
FROM osoba, mjesto
WHERE osoba.pbr=mjesto.pbr;
ID IME NAZIV_MJESTA
1 Pero Mostar
Rezultat
upita 2 Mate Mostar
3 Ivo Široki Brijeg
4 Tomo Mostar
5 Marija Široki Brijeg
equi join
Primjeri:
50
outer join
Primjer:
• SELECT id, ime, naziv_mjesta
FROM osoba, mjesto
WHERE osoba.pbr=mjesto.pbr;
OSOBA MJESTO
outer join
51
outer join
Primjer:
self join
Primjer:
• SELECT a.id, a.ime ime_dj, b.ime ime_sefa
FROM osoba a, osoba b
WHERE a.id_sefa=b.id;
OSOBA
52
self join
Primjer:
SQL: 1999
53
SQL: 1999 sintaksa – spajanje tablica
Primjer:
54
SQL: 1999 – NATURAL JOIN
Primjer:
Primjer:
55
SQL: 1999 – JOIN ... ON ...
Primjer:
• SELECT d.id_djelatnika, d.ime, d.prezime, o.sifra_opcine,
o.naziv_opcine
FROM djelatnik d JOIN opcina o
ON (d.sifra_opcine = o.sifra_opcine);
56
SQL: 1999 – OUTER JOIN
Primjer:
Primjer:
57
Usporedba SQL: 1999 i ORACLE sintakse
Test 2.
(10 bodova)
58
SQL podupiti
Podupiti
SELECT ...
FROM ...
WHERE ...
( SELECT ...
FROM ... Podupit
WHERE ... )
59
Korištenje podupita
Primjer:
Tipovi podupita
60
Podupiti – Primjer
Primjer:
• Prikaţi djelatnike ĉije radno mjesto je isto kao i djelatnika 101.
( SELECT sifra_radmj
FROM djelatnik
WHERE id_djelatnika = 101 );
Primjer:
• Prikaţi sve djelatnike (ime, prezime, datum zaposlenja, plaća)
ĉija plaća je veća od prosjeĉne plaće u poduzeću.
61
Podupiti – Primjer
Primjer:
• Prikaţi djelatnike ĉije radno mjesto je isto kao i djelatnika 101
i ĉija plaća je veća od plaće djelatnike 2.
Primjer:
• SELECT sifra_radmj, AVG (placa)
FROM djelatnik
GROUP BY sifra_radmj
HAVING AVG (placa) >
( SELECT AVG(placa)
FROM djelatnik
WHERE sifra_radmj='IT-PROG');
62
Podupiti – Primjeri najĉešćih pogrešaka
Primjer:
• SELECT ime, prezime, sifra_radmj
FROM djelatnik
WHERE sifra_radmj =
( SELECT sifra_radmj
FROM djelatnik
WHERE prezime='Crnjac' );
63
Podupiti koji vraćaju više od jednog retka
IN operator
Primjer:
• SELECT ime, prezime, placa, sifra_radmj
FROM djelatnik
WHERE placa IN
( SELECT MIN(placa)
FROM djelatnik d, radno_mjesto rm, odjel o
WHERE d.sifra_radmj=rm.sifra_radmj
AND rm.sifra_odjela=o.sifra_odjela
GROUP BY o.sifra_odjela );
64
Podupiti – Primjer
Primjer:
• Prikaţi djelatnike koji nisu IT programeri i ĉija plaća je niţa od
plaće nekog od IT programera.
Podupiti – Primjer
Primjer:
• Prikaţi djelatnike koji nisu na radnom mjestu PROD-KAM i ĉija
plaća je niţa od plaće svih djelatnika na radnom mjestu PROD-KAM.
65
Korelacijski podupiti
Korelacijski podupiti
Primjer:
• Prikaţi sve djelatnike koji zaraĊuju više od prosjeĉne plaće u
njihovom odjelu.
66
EXISTS operator
Podupiti – Primjer
Primjer:
• Prikaţi sve djelatnike koji imaju bar jednu osobu koja im je
“podreĊena”.
a) korištenjem EXISTS operatora
67
Podupiti – Primjer
Primjer:
• Prikaţi sve djelatnike koji imaju bar jednu osobu koja im je
“podreĊena”.
b) korištenjem IN operatora
Podupiti – Primjer
Primjer:
• Prikaţi općine u kojima ne ţivi niti jedan djelatnik poduzeća.
a) korištenjem NOT EXISTS operatora
68
Podupiti – Primjer
Primjer:
• Prikaţi općine u kojima ne ţivi niti jedan djelatnik poduzeća.
b) korištenjem NOT IN operatora
69
Korisnici i sigurnost
Korisnici i sigurnost
• CONNECT pero/pero;
70
Sistemske privilegije
Sistemske privilegije
GRANT sistemske_privilegije
TO korisnik|uloga|PUBLIC
[WITH ADMIN OPTION]
REVOKE sistemske_privilegije
FROM korisnik|uloga|PUBLIC
71
Sistemske privilegije
Primjeri:
Uloga (Role)
Korisnici
Uloga
Privilegije
72
Uloga (Role)
• GRANT uloga_1
TO pero;
Objektne privilegije
73
Objektne privilegije
Objektne privilegije
Primjer:
• GRANT select
ON opcina
TO PUBLIC;
74
Upravljanje transakcijama
Upravljanje transakcijama
500 KM
Raĉun 1 Raĉun 2
5.000 KM 1.000 KM
75
Upravljanje transakcijama (ORACLE)
• 2 tipa transakcija:
– DML – sadrži jedan ili više DML iskaza
– DDL – sadrži jedan DDL iskaz
Upravljanje transakcijama
76
Upravljanje transakcijama
Upravljanje transakcijama
77
Upravljanje transakcijama
Primjer
Upravljanje transakcijama
Primjer
78
Deadlock
Primjer
UPDATE djelatnik
t1 SET placa=placa+1000
WHERE id_djelatnika=1; UPDATE djelatnik
t2 SET placa=placa-500
WHERE id_djelatnika=2;
UPDATE djelatnik
t3 SET placa=placa-500
WHERE id_djelatnika=2;
UPDATE djelatnik
t4 SET placa=placa+1000
WHERE id_djelatnika=1;
t5 → ORA-00060: deadlock detected while waiting for resource
79
Objekti u bazi podataka
• TABLE – Tablica
• VIEW – Pogled
• SEQUENCE – Sekvenca
• INDEX – Indeks
• SYNONYM – Sinonim
Pogled (VIEW)
Što je pogled?
- “prozor” u podatke
- podaci se izvode, ne posjeduju
- pohranjuje se kao SELECT izraz u rječnik podataka
Uporaba pogleda
- za ograničenje pristupa podacima
- za pojednostavljenje složenih upita
- za omogućavanje neovisnosti podataka
- za prikaz različitih pogleda na iste podatke
80
Pogled (VIEW)
Jednostavni pogled
- podaci su iz jedne tablice
- ne sadrži funkcije ili grupe
- može izvršiti DML
Sloţeni pogled
- podaci su iz više tablica
- sadrži funkcije ili grupe
- ne može izvršiti DML
81
Pogled (VIEW)
82
Indeks (INDEX)
– AUTOMATSKI
• UNIQUE INDEX se automatski kreira kada se definira
PRIMARY KEY ili UNIQUE CONSTRAINT u definiciji
tablice
– RUĈNO
• Korisnik može ručno dodati indeks na neki drugi
atribut (radi ubrzanja pristupa podacima)
Primjer:
• CREATE INDEX djelatnik_prez_idx
ON djelatnik(prezime);
83
Indeks (INDEX)
Indeks (INDEX)
84
Indeks (INDEX)
Sekvence (SEQUENCES)
Što je sekvenca?
85
Sekvence (SEQUENCES)
Sekvence (SEQUENCES)
86
Sekvence (SEQUENCES)
• SELECT odjel_sifra_seq.CURRVAL
FROM dual;
Sinonimi (SYNONYMS)
Primjer:
CREATE [PUBLIC] SYNONYM ime_sinonima
FOR [vlasnik.]ime_objekta;
87
Test 3.
(10 bodova)
O predmetu
Web
http://www2.fsr.ba/nastava/baze
To: goran.kraljevic@hteronet.ba
Subject: Baze
88