Professional Documents
Culture Documents
Baze Podataka Preddiplomski Predavanja PDF
Baze Podataka Preddiplomski Predavanja PDF
Slaven Zakošek
Baze podataka
Predavanja
veljača 2012.
Sadržaj
1. Uvod ............................................................................................................ 4
2. Relacijski model podataka ........................................................................ 62
3. Nepotpune informacije i NULL vrijednosti .............................................. 145
4. SQL (1.dio) .............................................................................................. 185
5. SQL (2. dio) ............................................................................................. 288
6. Oblikovanje sheme relacijske baze podataka (1. dio) ............................ 354
7. Oblikovanje sheme relacijske baze podataka (2. dio) ............................ 394
8. Oblikovanje sheme relacijske baze podataka (3. dio - primjeri) .............. 438
9. Fizička organizacija podataka ................................................................ 481
10. Integritet baze podataka ......................................................................... 553
Bill Gates
Informacije
Podaci
Obrada podataka – sveučilište, knjižnica
Sveučilište
• podaci o studentima
• podaci o nastavnicima
• uspjeh na ispitu
• ISVU - Informacijski
sustav visokih učilišta RH
Knjižnica
• podaci o korisniku knjižnice
• podaci o knjigama
• traženje knjiga i časopisa
• posuđivanje knjiga
otvaranje računa
novčane transakcije
praćenje stanja na računu
praćenje kupnji ostvarenih putem
kreditnih kartica
podaci o pozivima
telefonski računi
podaci o mreži
podaci o kvarovima
morski sustavi
(plimna dinamika,
temperatura, slanost,
širenje tvari u moru)
rezultati mjerenja
satelitski podaci
računalne simulacije
ekološko modeliranje
podaci o pacijentu
povijest bolesti
rezultati testova
podaci s bolničkih
instrumenata i
senzora
podaci o natjecateljima
rezultati utakmica i utrka
statistika
Trgovina
• računi
• količina prodanih proizvoda
• zarada
Elektronička trgovina
• narudžbe i prodaja putem Interneta
integracija podataka iz
različitih izvora
izvještaji
višedimenzionalni pogled na podatke
različiti izvori podataka dubinska analiza (data mining)
vizualizacija podataka
FER - Zagreb Baze podataka 2011/2012 18
Uvod u baze podataka
Definicija:
Ukupna infrastruktura, organizacija, osoblje i komponente
koje služe za prikupljanje, obradu, pohranu, prijenos, prikaz,
širenje i raspolaganje informacijama
bilo što, što ima suštinu ili bit i posjeduje značajke s pomoću
kojih se može razlučiti od svoje okoline
osobe: studenti, radnici, građani, ...
• student Horvat Ivan (0036123456)
ostala bića
• Bijeli bor, pas Lajka
objekti: vozila, strojevi, uređaji, ulice, zgrade, mjesta, ...
• Eiffelov toranj, cepelin Hindenburg
apstraktni pojmovi: boje, predmeti nastavnog programa, ...
• predmet Baze podataka u nastavnom programu FER-2
događaji (nešto se desilo, dešava se ili se planira da će se desiti)
• dana 24.11.2006. održava se proslava Dana Fakulteta na FER-u
povezanost među objektima, osobama, događajima, ...
• student Horvat Ivan (0036123456) stanuje u Zagrebu
nešto o čemu želimo prikupljati i pohranjivati podatke
FER - Zagreb Baze podataka 2011/2012 25
Atribut (Attribute)
STUDENT
PREDMET
USTANOVA
RADNIK
ZGRADA
atributi
Skup entiteta PREDMET
vrijednosti atributa
elementarni podatak
shema relacije obuhvaća naziv relacijske sheme (PREDMET) i skup
atributa: ( sifPred, nazPred, ectsBod, nastProg )
domenski integritet:
• vrijednost atributa sifPred mora biti iz intervala [1, 999999]
• vrijednost atributa ectsBod mora biti iz intervala [0.5, 30.0]
• ...
Model entiteti-veze
Entity-Relationship Model
Postrelacijski model
Zadržava dobra svojstva relacijskog modela
Objekti ER modela su entiteti i njihove međusobne veze
SifOdjel
PrezDjelat
MbrDjelat
fizički opis
SUBP
logički opis
aplikacijski
programer
FER - Zagreb Baze podataka 2011/2012 40
Fizička i logička organizacija podataka
C
B
A
aplikacijski
programer
korisnici / aplikacije
...
INTERNA SHEMA
Unutarnja razina
imeKlijent
prezKlijent adrKlijent brRac stanjeRac
imeKlijent
prezKlijent adrKlijent brRac stanjeRac
INTERNA SHEMA
Fizička pohrana
podataka
imeKlijent
prezKlijent adrKlijent brRac stanjeRac
INTERNA SHEMA
Fizička pohrana
podataka
imeKlijent
prezKlijent adrKlijent brRac stanjeRac
imeKlijent
prezKlijent adrKlijent brRac datOtvRac vrijeme iznos
3. Transakcijska obrada
4. Korisnici
• Pristupaju bazi tako da postavljaju upite, mijenjaju podatke i
izrađuju izvještaje
Razlikujemo nekoliko skupina korisnika:
• korisnici koji povremeno pristupaju bazi koristeći upitni jezik
• korisnici koji često koriste bazu postavljajući standardne upite i
radeći standardne promjene koristeći programirana sučelja (npr.
službenici u banci, turističkim agencijama...)
• sofisticirani korisnici koji su dobro upoznati s bazom podataka i
koriste je na složeniji način (npr. inženjeri, znanstvenici, poslovni
analitičari)
D1 D2 D3
(Iva, Novak, 1987)
Iva Novak 1987 (Iva, Novak, 1989)
Hrvoje Kolar 1989 (Iva, Kolar, 1987)
Ivan (Iva, Kolar, 1989)
(Hrvoje, Novak, 1987)
(Hrvoje, Novak, 1989)
R (Hrvoje, Kolar, 1987)
(Hrvoje, Kolar, 1989)
(Ivan, Novak, 1987)
(Iva, Novak, 1989) (Ivan, Novak, 1989)
(Hrvoje, Novak, 1987) (Ivan, Kolar, 1987)
(Ivan, Kolar, 1989) (Ivan, Kolar, 1989)
Relacijska shema
MJESTO = { pbr, nazMjesto, sifZup }
identična je relacijskoj shemi
MJESTO = { sifZup, pbr, nazMjesto }
zupanija zupanija
sifZup nazZup nazZup sifZup
2
7
Primorsko-goranska
Varaždinska
≡ Varaždinska
Istarska
7
4
4 Istarska Primorsko-goranska 2
mjesto
pbr nazMjesto sifZup
42000 Varaždin 7
51000 Rijeka 2
52100 Pula 4 kardinalnost = 5
51300 Delnice 2
42230 Ludbreg 7
stupanj = 3 Oznake:
deg(mjesto) = 3
card(mjesto) = 5
Kratki pogled
SUBP
Baza podataka Rječnik
CREATE DATABASE knjiznica; knjiznica podataka
...
Rječnik podataka sadrži opise relacijskih shema, integritetskih ograničenja, ...
mjesto
DELETE FROM mjesto pbr nazMjesto sifZup
WHERE sifZup = 7; 52100 Pula 4
Unarne operacije
• projekcija, selekcija, preimenovanje
• agregacija, grupiranje
Binarne operacije
• skupovske operacije (set operations)
temelje se na relacijama kao skupovima n-torki
unija, presjek, razlika
zrakoplov pecivo
oznaka naziv oznaka naziv
B-747 Boeing 747 ZE Žemlja
A-360 Airbus 360 PR Perec
polozioMatem
polozioBaremJedan =
mbr ime prez
polozioMatem ∪ polozioProgr
100 Ivan Kolar
102 Ana Novak polozioBaremJedan
103 Tea Ban mbr ime prez
107 Jura Horvat 100 Ivan Kolar
studenti koji su položili ili
102 Ana Novak Matematiku ili
polozioProgr
103 Tea Ban Programiranje ili
mbr ime prez oba predmeta
105 Rudi Kolar
102 Ana Novak
107 Jura Horvat
105 Rudi Kolar
107 Jura Horvat
r1 ∪ r2 ≡ r2 ∪ r1
polozioMatem
mbr ime prez polozioOba =
100 Ivan Kolar polozioMatem ∩ polozioProgr
102 Ana Novak
103 Tea Ban polozioOba
107 Jura Horvat mbr ime prez studenti koji su
polozioProgr
102 Ana Novak položili i Matematiku
107 Jura Horvat i Programiranje
mbr ime prez
102 Ana Novak
105 Rudi Kolar
107 Jura Horvat
r1 ∩ r2 ≡ r2 ∩ r1
r "međurezultat"
A B C D B C s
izdvajanje eliminacija
vertikalnog duplikata B C
s = πB, C(r)
podskupa
tenor grad
P. Domingo London
"međurezultat"
student predmet
mbr ime prez sifra naziv
100 Ivan Kolar 1 Programiranje
102 Ana Novak 2 Matematika
103 Tea Ban
drugačija sintaksa:
SELECT SELECT List
FROM table [CROSS JOIN table]...
[WHERE Condition]
SELECT *
FROM student CROSS JOIN predmet;
SELECT *
FROM r1 CROSS JOIN r2 CROSS JOIN r3;
NIJE RELACIJA!
p = r × ρs(B2, C)(s) p A B B2 C
1 a c α
r A B s B C 1 a d β
1 a c α 2 b c α
2 b d β 2 b d β
3 c 3 c c α
3 c d β
FER - Zagreb Baze podataka 2011/2012 116
SQL - Preimenovanje atributa
A B B2 C
1 a c α
SELECT A, r.B, s.B AS B2, C 1 a d β
FROM r, s; 2 b c α
2 b d β
3 c c α
3 c d β
linija zrakoplov
let udaljenost tip dolet
CA-825 700 B747 13000
LH-412 4800 A320 5400
BA-722 15000 DC-9 3100
CA-311 13000
SELECT *
FROM linija, zrakoplov Kartezijev produkt
WHERE dolet >= udaljenost; Selekcija
drugačija sintaksa:
SELECT SELECT List
FROM table [JOIN table ON joinCondition]...
[WHERE Condition]
SELECT *
FROM linija JOIN zrakoplov
ON dolet >= udaljenost;
Kako pronaći linije i zrakoplove koji na tim linijama mogu letjeti, ali
samo za one linije na kojima je udaljenost veća od 4000 km
SELECT *
FROM linija, zrakoplov
WHERE dolet >= udaljenost
AND udaljenost > 4000; let udaljenost tip dolet
LH-412 4800 B747 13000
LH-412 4800 A320 5400
SELECT * CA-311 13000 B747 13000
FROM linija
ili JOIN zrakoplov
ON dolet >= udaljenost
WHERE udaljenost > 4000;
Koristi se ekvivalencija
σ
r >< s = F (r × s) mjesto pbr nazMjesto sifZup
F 42000 Varaždin 7
52100 Pula 4
42230 Ludbreg 7
mjesto >< zupanija zupanija
sifZup = sifZupanija sifZupanija nazZup
7 Varaždinska
4 Istarska
SELECT *
FROM mjesto, zupanija
WHERE sifZup = sifZupanija;
SELECT *
FROM mjesto
ili JOIN zupanija
ON sifZup = sifZupanija;
drugačija sintaksa:
prosjOcj
SELECT AVG(ocjena) AS prosjOcj
3.625
FROM ispit;
ρrez2(broj2)(GSUM(tezina)(osoba))
101 62 170
rez2 broj2
103 94 186
105 74 181 292
107 62 165
ρrez3(broj3)(GAVG(visina)(osoba)) rez3 broj3
175.5
broj1
SELECT COUNT(sifra) AS broj1 FROM osoba;
4
broj2
SELECT SUM(tezina) AS broj2 FROM osoba;
292
broj3
SELECT AVG(visina) AS broj3 FROM osoba;
175.5
Loše rješenje:
• Za svaki predmet napisati po jedan upit
ρprosjek(prosjOcjMat)(GAVG(ocjena)(σnazPred= 'Matematika'(ispit)))
SELECT AVG(ocjena) AS prosjOcjMat
FROM ispit prosjOcjMat
WHERE nazPred = 'Matematika'; 3.25
ρprosjek(prosjOcjFiz)(GAVG(ocjena)(σnazPred= 'Fizika'(ispit)))
SELECT AVG(ocjena) AS prosjOcjFiz
FROM ispit prosjOcjFiz
WHERE nazPred = 'Fizika'; 4
Zadana je relacija r(R). Neka su atributi A1, A2, ..., Am, B1, B2, ...,
Bn atributi sheme R. Opći oblik operacije grupiranja je sljedeći:
A1, A2, ..., AmGAF1(B1), AF2(B2), ..., AFn(Bn) (r)
SELECT nazPred
nazPred akGod prosjOcj maxOcj
, akGod
Matematika 2005 3.333 5
, AVG(ocjena) AS prosjOcj
Matematika 2006 3 3
, MAX(ocjena) AS maxOcj
Fizika 2004 5 5
FROM ispit
Fizika 2006 3.5 5
GROUP BY nazPred, akGod; Vjerojatnost 2005 4 4
Način na koji se
NULL vrijednost
prikazuje korisniku
SQuirreL SQL Client
ovisi o programskom
alatu koji se koristi:
SELECT mbr
, prez mbr prez placaUSD
, placa/5.6 AS placaUSD
100 Novak 1339.28571429
FROM dohodak
WHERE placa*0.136 > 1000; 105 Kolar 1607.14285714
5 + NULL → NULL
NULL - NULL → NULL
NULL * 0 → NULL
- NULL → NULL
SELECT mbr
, prez
, bodLab + bodMI AS ukupBodova
, - bodLab AS negBodLab
FROM bodovi;
7 ≥ 5 → true
'atlas' > 'zvuk' → false
-17.8 ≤ NULL → unknown
NULL = NULL → unknown
NULL ≠ NULL → unknown
r A B
s = σB≤50 (r)
1 20 20 ≤ 50 → true s A B
2 NULL NULL ≤ 50 → unknown 1 20
3 60 60 ≤ 50 → false
r A B
s = σB≠20 (r)
1 20 20 ≠ 20 → false s A B
2 NULL NULL ≠ 20 → unknown 3 60
3 60 60 ≠ 20 → true
σpostBr = 10000
matBr prez postBr
SELECT * FROM student
102 Horvat 10000
WHERE postBr = 10000;
107 Ban 10000
σpostBr ≠ 10000
SELECT * FROM student matBr prez postBr
WHERE postBr <> 10000; 100 Kolar 52000
gdje je Novak ?
s = σB≤50 ∧ C≠300(r)
r A B C
1 NULL 100 NULL ≤ 50 ∧ 100 ≠ 300 → unknown (*)
2 20 200 20 ≤ 50 ∧ 200 ≠ 300 → true
3 30 300 30 ≤ 50 ∧ 300 ≠ 300 → false
4 40 NULL 40 ≤ 50 ∧ NULL ≠ 300 → unknown
5 50 500 50 ≤ 50 ∧ 500 ≠ 300 → true
6 60 NULL 60 ≤ 50 ∧ NULL ≠ 300 → false (**)
s A B C
2 20 200
5 50 500
Primjer:
osoba student
mbr ime prez postBr mbr ime prez postBr
100 Ivan Novak 10000 nije kopija 100 Ivan Novak NULL
102 Ana Horvat 21000 jest kopija 102 Ana Horvat 21000
103 Tea Ban 52000 nije kopija 103 Tea Ban 21000
105 NULL Kolar NULL jest kopija 105 NULL Kolar NULL
"međurezultat"
2 b NULL b NULL b NULL
3 NULL γ NULL γ NULL γ
4 a α a α NULL NULL
5 NULL NULL NULL NULL
6 NULL γ NULL γ
7 NULL NULL NULL NULL
r s
A B C E F
1 a α 1 NULL
2 b NULL NULL f
3 NULL NULL
r×s
A B C E F
1 a α 1 NULL
2 b NULL 1 NULL
3 NULL NULL 1 NULL
1 a α NULL f
2 b NULL NULL f
3 NULL NULL NULL f
linija
mogućnost = linija >< zrakoplov
let udaljenost dolet ≥ udaljenost
CA-825 700
LH-412 NULL
BA-722 4100 mogućnost
CA-311 13000 let udaljenost tip dolet
? CA-825 700 A320 5400
zrakoplov
CA-825 700 DC-9 3100
tip dolet BA-722 4100 A320 5400
B747 NULL
A320 5400
DC-9 3100
broj5
SELECT AVG(ocjena) AS broj5 FROM ispit;
3.25
student *><*nastavnik
temaSt = temaNast
student nastavnik
mbrSt prezSt temaSt sifNast prezNast temaNast
101 Horvat Tranzistori 202 Ban Teslini izumi
103 Novak Teslini izumi 204 Toplek Elektrane
105 Kolar Teorija kaosa 206 Oreb Teslini izumi
209 Pernar Teorija kaosa
student *><*nastavnik
temaSt = temaNast
≡
SELECT * FROM mjesto select * FrOm MJesto
WHERE sifZupanija = 7 wHERE SIFZupanIJA = 7
SELECT
SELECT * FROM mjesto
WHERE sifZupanija = 7 ≡ *
FROM
mjesto WHERE
sifZupanija = 7
"linijski komentari"
• mjesto u retku na kojem se nalaze znakovi -- predstavlja
početak komentara koji se proteže do kraja retka
-- ovo je komentar
SELECT * FROM mjesto -- ovo je komentar
WHERE pbr = 10000 -- ovo je komentar
INTEGER
• cijeli broj pohranjen u 4 bajta u aritmetici dvojnog komplementa.
Dopušteni raspon brojeva određen je intervalom
[ - 2n-1, 2n-1 - 1 ] n=32
• dakle, raspon brojeva bi trebao biti:
[-2147483648, 2147483647]
• u stvarnosti je manji, jer se vrijednost -2147483648 koristi za
pohranu NULL vrijednosti. Raspon brojeva koji se mogu
prikazati je:
[-2147483647, 2147483647]
Konstante:
5 -30000 0 1765723712 NULL
SMALLINT
• cijeli broj pohranjen u 2 bajta. Raspon brojeva koji se mogu
prikazati je [-32767, 32767]
Konstante:
5 -30000 0 NULL
CHAR(m)
• znakovni niz (string) s unaprijed definiranom maksimalnom
duljinom m ≤ 32767. Npr: CHAR(24).
Konstante:
'Ana' '12345' NULL
'Dvostruki navodnik " unutar niza'
'Jednostruki navodnik '' unutar niza'
NCHAR(m)
• jednako kao i CHAR tip podatka, ali omogućava ispravno
leksikografsko uređenje nizova znakova koji sadrže znakove iz
nacionalnih kodnih stranica (character set). Koristi se onda
kada se predviđa potreba za leksikografskim poretkom nizova
znakova u kojima se pojavljuju specifični nacionalni znakovi
(Č, Ć, Š, Đ, Ž, ...), npr. za atribut prezime
REAL
• odgovara tipu podatka float u jeziku C (IEEE-754 format
prikaza - jednostruka preciznost)
Konstante:
23 -343.23 232.233E3 23.0e-24 NULL
DOUBLE PRECISION
• odgovara tipu podatka double u jeziku C (IEEE-754 format
prikaza - dvostruka preciznost)
Konstante:
23 -343.23 232.233E3 23.0e-302 NULL
DECIMAL(m, n)
• ukupni broj znamenki (precision, m ≤ 32)
• broj znamenki iza decimalne točke (scale, n ≤ m)
• npr, DECIMAL (15, 3) predstavlja decimalni broj sa ukupno
najviše 15 znamenki, od toga se najviše 3 znamenke nalaze
iza decimalne točke
• razlikuje se od float ili double tipa podatka u jeziku C
ako se za pohranu broja 1.3 koristi tip podatka DECIMAL(2,1),
broj će biti pohranjen bez numeričke pogreške
ako se za pohranu broja 1.3 koristi tip podatka float u jeziku C,
u memoriji će se zapravo pohraniti broj 1.2999999523162842
(num. pogreška zbog karakteristika IEEE-754 formata pohrane)
DATE
• podaci ovog tipa se uvijek prikazuju u obliku datuma (npr.
18.11.2006). Interno je podatak predstavljen brojem dana
proteklih od 31.12.1899. Ovaj tip podatka omogućava korištenje
sljedećih operacija zbrajanja i oduzimanja:
dat1 - dat2 rezultat je podatak tipa INTEGER - broj
dana proteklih između dat2 i dat1
dat + cijeliBroj rezultat je podatak tipa DATE - izračunava
koji datum je cijeliBroj dana nakon dana dat
dat - cijeliBroj rezultat je podatak tipa DATE - izračunava
koji datum je cijeliBroj dana prije dana dat
Konstante:
'17.2.2007' '16.07.1969' NULL
Sintaksni dijagrami
prez postBr
SELECT ALL prez SELECT prez
, postbr ≡ , postbr
Kolar
Horvat
52000
10000
FROM student; FROM student;
Kolar 52000
Ban 10000
prez postBr
SELECT DISTINCT prez
Kolar 52000
, postbr
Horvat 10000
FROM student;
Ban 10000
KASNIJE
KASNIJE
KASNIJE
KASNIJE
Primjer: mjesto
pbr nazMjesto sifZup
42000 Varaždin 7
52100 Pula 4
Unarni operatori
+ -
Binarni operatori
+ - * /
|| ulančavanje nizova znakova
(nadovezivanje, konkatenacija)
mbr (expression)
SELECT mbr, - bodLab
100 -12
FROM bodovi;
107 -17
(expression)
SELECT mbr || '-' || ime 100-Ana
FROM bodovi; 107-Ivo
ABS
MOD
ROUND
SUBSTRING
UPPER
LOWER
TRIM
CHAR_LENGTH
OCTET_LENGTH
MDY
DAY
MONTH
YEAR
WEEKDAY
TODAY
USER
ABS (num_expression)
• računa apsolutnu vrijednost izraza
num_expression – mora biti numerički tip podatka (INTEGER, DECIMAL, FLOAT, ...)
rezultat funkcije – tip podatka ovisi o tipu podatka ulaznog argumenta (expression)
UPPER (expression)
• sva mala slova (a-z) koja se pojavljuju u zadanom nizu
expression zamjenjuje odgovarajućim velikim slovima (A-Z)
LOWER (expression)
• sva velika slova (A-Z) koja se pojavljuju u zadanom nizu
expression zamjenjuje odgovarajućim malim slovima (a-z)
TRIM(source_expression)
• funkcija vraća niz znakova koji nastaje tako da se s početka i
kraja niza source_expression izbace sve praznine
CHAR_LENGTH(expression)
• funkcija vraća broj znakova u zadanom nizu expression
uključujući i prateće praznine
OCTET_LENGTH(expression)
• funkcija vraća broj byte-ova zadanog niza expression
uključujući i prateće praznine
USER
• funkcija vraća login korisnika koji je trenutno prijavljen za rad
sa bazom podataka
TODAY
• funkcija vraća današnji datum (dobiven iz operacijskog
sustava)
DAY(date_expression)
• funkcija vraća redni broj dana u mjesecu za zadani datum
MONTH(date_expression)
• funkcija vraća redni broj mjeseca za zadani datum
YEAR(date_expression)
• funkcija vraća redni broj godine za zadani datum
WEEKDAY(date_expression)
• funkcija vraća redni broj dana u tjednu za zadani datum
(0 – nedjelja, 1 – ponedjeljak, 2 – utorak, itd…)
rbr (expression)
SELECT rbr, MOD(iznos, 10) Ispisuje ostatak
FROM upl_ispl; 1 0
dijeljenja iznosa sa 10
2 3
student
CREATE TABLE student (
jmbag CHAR(10) jmbag ime prezime
, ime NCHAR(25)
, prezime NCHAR(25)); 0036368145 Tomislav Babić
0036369296 Linda Jurić
SELECT jmbag
jmbag (expression)
, SUBSTRING(ime FROM 1 FOR 1) || '.' ||
SUBSTRING(prezime FROM 1 FOR 1)|| '.'
0036368145 T.B.
FROM student; 0036369296 L.J.
student
CREATE TABLE student (
jmbag CHAR(10) jmbag ime prezime
, ime NCHAR(25)
, prezime NCHAR(25)); 0036368145 Tomislav Ban
0036369296 Linda Kekez
student
CREATE TABLE student (
jmbag CHAR(10) jmbag ime prezime
, ime NCHAR(25)
, prezime NCHAR(25)); 0036368145 Tomislav Božanić
0036369296 Linda Kekez
Ispisuje broj znakova u imenu i broj znakova u imenu iz kojeg su izbačene praznine
SELECT CHAR_LENGTH(ime) (expression) (expression)
, CHAR_LENGTH(TRIM(ime)) 25 8
FROM student;
25 5
Ispisuje broj znakova i broj bajtova koji čine prezime iz kojeg su izbačene praznine
SELECT CHAR_LENGTH(TRIM(prezime)) (expression) (expression) Zbog utf8:
, OCTET_LENGTH(TRIM(prezime)) 7 9 ž-2 okteta
FROM student;
5 5 ć-2 okteta
nastavnik
CREATE TABLE nastavnik (
sifNastavnik INTEGER sifNastavnik datumZaposlenOd datumZaposlenDo
, datumZaposlenOd DATE 1 22.01.1995 20.02.2007
, datumZaposlenDo DATE);
2 01.06.2004 01.03.2007
nastavnik
CREATE TABLE nastavnik (
sifNastavnik INTEGER sifNastavnik datumZaposlenOd datumZaposlenDo
, datumZaposlenOd DATE 1 22.01.1995 20.02.2007
, datumZaposlenDo DATE);
2 01.06.2004 01.03.2007
Ispisuje datum koji odgovara sljedećem danu nakon prestanka zaposlenja nastavnika
SELECT MDY(MONTH(datumZaposlenDo)
, DAY(datumZaposlenDo)+1
, YEAR(datumZaposlenDo)) (expression)
FROM nastavnik; 21.02.2007
02.03.2007
SELECT datumZaposlenDo+1
FROM nastavnik;
FER - Zagreb Baze podataka 2011/2012 223
Funkcije i NULL vrijednosti
SELECT mbr
, MOD(bodLab, 10) AS ostatak
, SUBSTRING(prez FROM 1 FOR 2) AS podniz
FROM bodovi;
SQL omogućava
dodatne oblike za
opisivanje uvjeta KASNIJE
(1)
(2)
(3)
(4)
(5)
matBr prez
SELECT * FROM student
103 Novak
WHERE prez NOT IN ('Kolar', 'Horvat');
109 Ban
matBr ime
SELECT * FROM osoba
5 Marko
WHERE ime LIKE 'Ma_k%';
matBr ime
SELECT * FROM osoba 2 Metka
WHERE ime LIKE '%tk%';
4 Ratkec
(1)
(2)
(1)
(2) KASNIJE
KASNIJE
(1)
KASNIJE
KASNIJE
Zadane su relacije: r ({ A, B }) s ({ C, D }) t ({ D, E })
r×s SELECT *
FROM r, s;
SELECT *
r >< s FROM r, s
A=C ∧ B≥D
WHERE A = C
AND B >= D;
SELECT *
r >< s FROM r, s
B=C
WHERE B = C;
σD>5(r ><
B=C
s) SELECT *
FROM r, s
WHERE B = C
AND D > 5;
• r ({ A, B }) s ({ C, D }) t ({ D, E })
(2) KASNIJE
KASNIJE
r CROSS JOIN s
r INNER JOIN s ON uvjetSpajanja
r LEFT OUTER JOIN s ON uvjetSpajanja
r RIGHT OUTER JOIN s ON uvjetSpajanja
r FULL OUTER JOIN s ON uvjetSpajanja
Zadane su relacije: r ({ A, B }) s ({ C, D }) t ({ D, E })
r×s SELECT *
FROM r CROSS JOIN s;
SELECT *
r >< s FROM r
A=C ∧ B≥D INNER JOIN s
ON A = C AND B >= D;
SELECT *
r >< s FROM r
INNER JOIN s
B=C
ON B = C;
SELECT *
σD>5(r ><
FROM r
s) INNER JOIN s
ON B = C
B=C
WHERE D > 5;
• r ({ A, B }) s ({ C, D }) t ({ D, E }) p ({ E, F })
SELECT r.*, s.*, t.E
(r × s) >< t FROM r
CROSS JOIN s
INNER JOIN t
ON s.D = t.D;
σC=100(s >< t)
FROM s
INNER JOIN t
ON s.D = t.D
WHERE C = 100;
• r ({ A, B }) s ({ C, D }) t ({ D, E }) p ({ E, F })
SELECT r.*, s.*, t.E
FROM r
(r × s) *><
>< t CROSS JOIN s
LEFT OUTER JOIN t
ON s.D = t.D;
σC=100(s *><
FROM s
>< t) LEFT OUTER JOIN t
ON s.D = t.D
WHERE C = 100;
SELECT * SELECT *
FROM student FROM student
INNER JOIN mjesto INNER JOIN mjesto
ON pbrSt = pbr ON pbrSt = pbr
WHERE prez = 'Kolar'; AND prez = 'Kolar';
SELECT *
FROM student
LEFT OUTER JOIN mjesto
ON pbrSt = pbr
WHERE prez = 'Kolar';
SELECT *
FROM student
LEFT OUTER JOIN mjesto
ON pbrSt = pbr
AND prez = 'Kolar';
>< r2 ) >< r3 ≠
( r1 *>< r1 *><
>< ( r2 >< r3 )
( stud *><
>< mjesto ) >< zupanija
pbrSt=pbr sifZupMj=sifZup
stud *><
>< ( mjesto >< zupanija ) da bismo izraz
pbrSt=pbr sifZupMj=sifZup relacijske algebre mogli
napisati u obliku SQL
naredbe, napisat ćemo
≡ ( mjesto >< zupanija ) ><*
>< stud ga u drugačijem obliku
sifZupMj=sifZup pbrSt=pbr
Kako dobiti
sljedeći rezultat:
mbr prez pbrRod pbrStan nazMjestoR
100 Kolar 10000 21000 Zagreb
102 Novak 21000 10000 Split
103 Ban 10000 10000 Zagreb
To je lako:
SELECT student.*, mjesto.nazMjesto AS nazMjestoR
FROM student
, mjesto
WHERE student.pbrRod = mjesto.pbr;
Upit nije dobar jer jednu n-torku iz relacije student pokušavamo spojiti
s jednom n-torkom iz relacije mjesto uz sljedeći uvjet spajanja:
vrijednost atributa pbrRod, te istovremeno i vrijednost atributa pbrStan
iz relacije student su jednake vrijednosti atributa pbr iz relacije mjesto
FER - Zagreb Baze podataka 2011/2012 265
Paralelno spajanje
Odjel A Odjel B
SELECT orgjed.sifOrgjed
, orgjed.nazOrgjed
, orgjed.sifNadorgjed
, nadorgjed.nazOrgjed AS nazNadorgjed
FROM orgjed, orgjed AS nadOrgjed
WHERE orgjed.sifNadorgjed = nadOrgjed.sifOrgjed;
SELECT orgjed.sifOrgjed
, orgjed.nazOrgjed
, orgjed.sifNadorgjed
, nadorgjed.nazOrgjed AS nazNadorgjed
FROM orgjed, orgjed AS nadOrgjed
WHERE orgjed.sifNadorgjed = nadOrgjed.sifOrgjed;
SELECT orgjed.sifOrgjed
, orgjed.nazOrgjed
, orgjed.sifNadorgjed
, nadorgjed.nazOrgjed AS nazNadorgjed
FROM orgjed
LEFT OUTER JOIN orgjed AS nadOrgjed
ON orgjed.sifNadorgjed = nadOrgjed.sifOrgjed;
SELECT orgjed.sifOrgjed
, orgjed.nazOrgjed
, podOrgjed.nazOrgjed AS nazPodorgjed
FROM orgjed
LEFT OUTER JOIN orgjed AS podOrgjed
ON podOrgjed.sifNadorgjed = orgjed.sifOrgjed;
SELECT osoba.*
FROM osoba
INNER JOIN osoba AS osoba103 sifra ime prez placa
ON osoba.placa < osoba103.placa 102 Ivan Kolar 3000
AND osoba103.sifra = 103; 104 Jura Ban 4000
ispit
matBr nazPredmet ocjena
100 Matematika 3
SELECT nazPredmet AS naziv
100 Programiranje 2
, AVG(ocjena) AS prosjek
100 Fizika 5 FROM ispit
101 Matematika 2 GROUP BY nazPredmet
101 Programiranje 2 HAVING MAX(ocjena) <= 4;
101 Fizika 3
102 Matematika 4
naziv prosjek
Matematika 3
Programiranje 2
bodoviMat mbr prez bodLab bodMI bodoviProg mbr prez bodLab bodMI
101 Novak 20 30 102 Kolar 12 NULL
103 Horvat NULL 20 104 Novak 30 0
107 Ban 10 80
1. FROM 1. FROM
2. WHERE 2. WHERE
3. GROUP BY 3. GROUP BY
4. HAVING 4. HAVING
5. DISTINCT 5. DISTINCT
6. UNION
7. ORDER BY
rezultat
Logički promatrano, tj. konačni rezultat će sigurno odgovarati rezultatu
koji bi se dobio kada bi se operacije obavljale navedenim redoslijedom.
Fizički promatrano, upit će se možda izvesti drugačijim redoslijedom.
FER - Zagreb Baze podataka 2011/2012 287
5. SQL
(2. dio)
Podupiti
Ukoliko podupit čiji bi rezultat trebao biti skalar vrati više od jedne
n-torke ili više nego jedan atribut, sustav će dojaviti pogrešku
SELECT * FROM stud
WHERE pbrSt = (SELECT pbr FROM mjesto Pogreška
WHERE nazMjesto LIKE '%r%');
Ukoliko podupit čiji bi rezultat trebao biti skalar ne vrati niti jednu
n-torku, dobivena skalarna vrijednost će biti NULL vrijednost
SELECT * FROM stud
WHERE pbrSt = (SELECT pbr FROM mjesto
NULL
WHERE nazMjesto = 'Grad Split');
SELECT *
FROM vozilo
WHERE nosivost > (SELECT MAX(tezina)
FROM teret);
1800
FER - Zagreb Baze podataka 2011/2012 301
Korelirani podupit (Correlated subquery)
oznStr dopBrSati
S1 1000 1000 < (SELECT SUM ... WHERE oznStr = 'S1'⇒1100) → true
S2 1500 1500 < (SELECT SUM ... WHERE oznStr = 'S2'⇒1200) → false
S3 500 500 < (SELECT SUM ... WHERE oznStr = 'S3'⇒600) → true
SELECT oznStr
, dopBrSati
, (SELECT SUM(brSatiRada)
FROM radStroja
WHERE radStroja.oznStr = stroj.oznStr) AS koristenSati
FROM stroj
WHERE dopBrSati <
(SELECT SUM(brSatiRada)
FROM radStroja
WHERE radStroja.oznStr = stroj.oznStr);
SELECT stroj.oznStr
, dopBrSati
, SUM(brSatiRada) AS koristenSati
FROM stroj
JOIN radStroja
ON stroj.oznStr = radStroja.oznStr
GROUP BY stroj.oznStr, dopBrSati
HAVING dopBrSati < SUM(brSatiRada);
SELECT *
FROM stud Kolar
WHERE prez <> (SELECT prez Ban
FROM nastavnik); Pernar
Kolar
Ban
Pernar
SELECT *
FROM stud
mbr ime prez
WHERE prez <> ALL (SELECT prez
100 Ivan Horvat
FROM nastavnik);
102 Marko Novak
SELECT *
FROM dvorana 100
WHERE kapacitet > SOME (SELECT brojSt 170
FROM grupa); 150
oznDv kapacitet
D1 150
D2 120
izraz IN (podupit)
• true ako se u (multi)skupu vrijednosti dobivenih podupitom
nalazi barem jedan element jednak vrijednosti izraza
• ekvivalentno sa: izraz = SOME (podupit)
izraz NOT IN (podupit)
• true ako se u (multi)skupu vrijednosti dobivenih podupitom ne
nalazi niti jedan element jednak vrijednosti izraza
• ekvivalentno sa: izraz <> ALL (podupit)
FER - Zagreb Baze podataka 2011/2012 313
Jednostupčani podupit (Single-column subquery)
rbrUpl iznosUpl
rbrUpl iznosUpl
3 100
4 80
FER - Zagreb Baze podataka 2011/2012 319
Primjeri: podupiti i NULL vrijednosti
uplata rbrUpl iznosUpl isplata rbrIspl iznosIspl
1 50 1 80
2 NULL 2 100
3 100 3 NULL
4 80 4 150
rbrUpl iznosUpl
EXISTS (podupit)
• true ako rezultat podupita sadrži barem jednu n-torku (bilo kakvu).
Pri tome nije važno koliko u dobivenoj n-torci ili n-torkama ima
atributa (podupit ne mora biti jednostupčan) niti koje su vrijednosti
njihovih atributa
NOT EXISTS (podupit)
• true ako rezultat podupita ne sadrži niti jednu n-torku
na rezultat vanjskog upita ne utječe eventualna pojava NULL
vrijednosti u rezultatu podupita
FER - Zagreb Baze podataka 2011/2012 321
Operator EXISTS
Ispravno rješenje:
SELECT student.*, nazMjesto
FROM student
LEFT OUTER JOIN mjesto
ON pbrStan = pbr; Zašto LEFT OUTER JOIN?
SELECT *
FROM polozioMatem
WHERE EXISTS
(SELECT * FROM polozioProgr
WHERE polozioProgr.mbr = polozioMatem.mbr
AND polozioProgr.ime = polozioMatem.ime
AND polozioProgr.prez = polozioMatem.prez);
SELECT *
FROM polozioMatem
WHERE EXISTS
(SELECT * FROM polozioProgr
WHERE
(polozioProgr.mbr = polozioMatem.mbr OR
polozioProgr.mbr IS NULL AND polozioMatem.mbr IS NULL)
AND
(polozioProgr.ime = polozioMatem.ime OR
polozioProgr.ime IS NULL AND polozioMatem.ime IS NULL)
AND
(polozioProgr.prez = polozioMatem.prez OR
polozioProgr.prez IS NULL AND polozioMatem.prez IS NULL));
SELECT polozioMatem.*
FROM polozioMatem, polozioProgr
WHERE
(polozioMatem.mbr = polozioProgr.mbr OR
polozioMatem.mbr IS NULL AND polozioProgr.mbr IS NULL)
AND
(polozioMatem.ime = polozioProgr.ime OR
polozioMatem.ime IS NULL AND polozioProgr.ime IS NULL)
AND
(polozioMatem.prez = polozioProgr.prez OR
polozioMatem.prez IS NULL AND polozioProgr.prez IS NULL);
SELECT *
FROM polozioMatem
WHERE NOT EXISTS
(SELECT * FROM polozioProgr
WHERE polozioProgr.mbr = polozioMatem.mbr
AND polozioProgr.ime = polozioMatem.ime
AND polozioProgr.prez = polozioMatem.prez);
SELECT *
FROM polozioMatem
WHERE NOT EXISTS
(SELECT * FROM polozioProgr
WHERE
(polozioProgr.mbr = polozioMatem.mbr OR
polozioProgr.mbr IS NULL AND polozioMatem.mbr IS NULL)
AND
(polozioProgr.ime = polozioMatem.ime OR
polozioProgr.ime IS NULL AND polozioMatem.ime IS NULL)
AND
(polozioProgr.prez = polozioMatem.prez OR
polozioProgr.prez IS NULL AND polozioMatem.prez IS NULL));
INSERT
DELETE
UPDATE
(1)
(2)
KASNIJE
prosjek
INSERT INTO prosjek (
prosOcj predmet prosOcj akGod
, predmet
) prosjek
SELECT AVG(ocjena)
predmet prosOcj akGod
, predmet
Elektronika 1.0 NULL
FROM ispit
Matematika 3.5 NULL
GROUP BY predmet;
Fizika 3.0 NULL
mjesto
DELETE FROM mjesto pbr nazMjesto sifZup
WHERE sifZup = 7; 52100 Pula 4
KASNIJE
KASNIJE
KASNIJE
UPDATE mjesto
SET (pbr, nazMjesto) = (
(SELECT noviPbr
mjesto
FROM konverzija
WHERE konverzija.stariPbr = mjesto.pbr pbr nazMjesto
) 41000 ZAGREB
, (SELECT noviNaziv 52000 Pazin
FROM konverzija 52100 Pula
WHERE konverzija.stariPbr = mjesto.pbr 31000 Osijek
)
)
WHERE pbr IN (SELECT stariPbr
FROM konverzija);
narudzba stavkaNarudzbe
brNar nazProd datNar brNar sifArtikl kolicina
13/25 Konzum-7 1.5.2011 13/25 129 1200
43-21 Diona-28 7.2.2011 13/25 139 2000
41/56 Konzum-7 4.2.2012 43-21 129 1200
43-21 221 1800
41/56 129 1100
Za vježbu provjerite
• postoji li redundancija u ovoj bazi podataka ?
• je li moguća pojava lažnih n-torki ?
t
t(X)
relacija osoba(OSOBA)
osoba matBr prezime ime postBr grad
11234 Novak Josip 21000 Split
12345 Horvat Ivan 10000 Zagreb
22211 Kolar Ante 21000 Split
33345 Ban Tomo 31000 Osijek
23456 Kolar Ana 31000 Osijek
R = { A, B, C }
Vrijedi li FZ AB → C na shemi R?
r(R)
A B C moguće je da vrijedi, ali to ne
a α 1 možemo sa sigurnošću tvrditi
b γ 1 bez poznavanja značenja atributa A,
b α 1
B i C, ne možemo zaključiti koje
c α 3
a α 1 funkcijske zavisnosti zaista vrijede
na shemi R
r(R)
A B C
Vrijedi li FZ BC → A na shemi R?
a α 1
b γ 1
Sa sigurnošću možemo tvrditi: NE
b α 1
c α 3
a α 1
ispituju se svi parovi n-torki t1, t2 koje imaju jednake X-vrijednosti (u primjeru
X = { mbr, sifNast })
ako postoji par n-torki t1 i t2 koje imaju iste X-vrijednosti, a različite Y-vrijednosti
(u primjeru Y = { ocjena, datIspit }), tada FZ sigurno ne vrijedi
SELECT *
FROM ispit AS t1, ispit AS t2 n-torke t1 i t2
WHERE t1.mbr = t2.mbr koje imaju
AND t1.sifNast = t2.sifNast jednake ... a različite
AND (t1.ocjena <> t2.ocjena X-vrijednosti ... Y-vrijednosti
OR t1.datIspit <> t2.datIspit);
A-1 REFLEKSIVNOST
Ako je Y ⊆ X, tada vrijedi X → Y
• uvijek vrijedi X → X
A-2 UVEĆANJE
Ako u shemi R vrijedi X → Y, tada vrijedi i XZ → Y
• možemo uvećati lijevu stranu funkcijske zavisnosti
PRIMJER: osoba(OSOBA) matBr prezime ime postBr grad
11234 Novak Josip 21000 Split
12345 Horvat Ivan 10000 Zagreb
23456 Kolar Ana 31000 Osijek
34567 Novak Josip 31000 Osijek
A-3 TRANZITIVNOST
Ako u shemi R vrijedi X → Y i Y → Z, tada vrijedi i X → Z
• X → Z je tranzitivna zavisnost
→ ime prezime
⇒ u relaciji osoba vrijedi i FZ matBr→
→ ime
⇒ u relaciji osoba vrijedi i FZ matBr→
→ prezime
⇒ u relaciji osoba vrijedi i FZ matBr→
Dokaz:
A → BD (P2: dekompozicija) ⇒ A → B
A → B ∧ B → C (A3: tranzitivnost) ⇒ A → C
(A1: refleksivnost) ⇒ A → A
A → A ∧ A → C (P1: unija) ⇒ A → AC
A → AC (A2: uvećanje) ⇒ AE → AC
PRAVILO O AKUMULACIJI
Ako u shemi R vrijedi
• X → VZ i Z → W, tada vrijedi i X → VZW
R = { L, M, N, P, Q, R }, F = { Q → R, M → PQ, PQL → N }
dokazati da vrijedi FZ MLR → QN.
R = { L, M, N, P, Q, R }, F = { Q → R, M → PQ, PQL → N }
dokazati da vrijedi FZ MQ → LN.
(A1: refleksivnost) ⇒ MQ → MQ
MQ → MQ ∧ Q → R (akumulacija) ⇒ MQ → MQR
⇒ MQ → LN ne vrijedi
entitet je bilo što, što ima suštinu ili bit i posjeduje značajke
s pomoću kojih se može razlučiti od svoje okoline
ključ entiteta sadrži one atribute koji omogućuju da se
pojedini entiteti mogu razlučiti od okoline
relacijom se opisuje skup entiteta
matBr → prezime
matBr → ime
matBr → postBr
Za K = { matBr, prezime } također vrijedi
matBr → grad
K → { ime, postBr, grad },
ali K nije ključ jer postoji K' = { matBr }, K' ⊂ K, za
kojeg vrijedi
K' → { prezime, ime, postBr, grad }
mogući ključevi:
• { matBr }
• { JMBG }
primarni ključ: { matBr }
alternativni ključ: { JMBG }
E. F. Codd:
“Normalized data base structure: A brief tutorial”
Proc. ACM SIGFIDET Workshop on Data Description, Access and Control, 1971
Dekompozicija
• početne relacije (relacijske sheme) se dekomponiraju na
temelju uočenih funkcijskih zavisnosti
Sinteza
• zadan je skup atributa i nad njima skup funkcijskih zavisnosti iz
kojih se sintetiziraju relacijske sheme koje zadovoljavaju 3NF
mjesto
postBr nazMj MJESTO = { postBr, nazMj }
21000 Split
10000 Zagreb KMJESTO = { postBr }
31000 Osijek
osoba
matBr prez ime postBr nazMj
OSOBA1 ∩ MJESTO = { postBr }
11234 Novak Josip 21000 Split
12345 Horvat Ivan 10000 Zagreb
⇒ osoba ≡ osoba1 >< mjesto
23456 Kolar Ana 31000 Osijek
34567 Novak Josip 10000 Zagreb
Definicija:
Definicija:
PRIMJER:
PRIMJER:
Definicija:
Zadano je:
relacijska shema R,
skupovi atributa X ⊆ R, Y ⊆ R, Z ⊆ R
R1 = XYZ R2 = ZV
KR1= X KR2 = Z
R1 = XZ R2 = XYV
KR1= X KR2 = XY
R1 i R2 su u 2NF i 3NF
K1OSOBA2 = { matBr }
K2OSOBA2 = { JMBG }
K1R = X K2R = Z
X i Z su mogući ključevi.
zadovoljen je uvjet 1NF prema kojem neključni atributi funkcijski ovise o ključu
FER - Zagreb Baze podataka 2011/2012 427
1. primjer normalizacije - 2NF ispit (ISPIT)
matBr prez ime sifPred nazPred datIsp ocj sifNas prezNas
1111 Novak Ivan 1001 Mat-1 29.01.06 1 1111 Pašić
1111 Novak Ivan 1001 Mat-1 05.02.06 3 1111 Pašić
1111 Novak Ivan 1003 Fiz-1 28.06.06 2 3333 Horvat
1111 Novak Ivan 1002 Mat-2 27.06.06 4 2222 Brnetić
1234 Kolar Petar 1001 Mat-1 29.01.06 3 2222 Brnetić
sifPred → nazPred
predmet = πsifPred, nazPred(ispit1)
ispit2 = πmatBr, sifPred, datIsp, ocj, sifNas, prezNas(ispit1)
R = ABCDEFGH
F = { ABC → DEFGH, A → D, BC → FGH, FG → H }
R = ABCDEFGH KR = ABC
F = { ABC → DEFGH, A → D, BC → FGH, FG → H }
• Normalizacija na 2NF
Svi atributi iz zavisnog dijela moraju biti potpuno funkcijski ovisni o ključu.
R ABC DEFGH
ABC → D je nepotpuna FZ, jer vrijedi A → D R nije u 2NF
R1=AD KR1= A
R2= ABCEFGH KR2= ABC
F = { ABC → DEFGH, A → D, BC → FGH, FG → H }
Svi atributi iz zavisnog dijela moraju biti potpuno funkcijski ovisni o ključu.
R2 ABC EFGH
ABC → FGH je nepotpuna FZ, jer vrijedi BC → FGH R2 nije u 2NF
Normalizacijom na 2NF se R2 zamjenjuje shemama:
R21=BCFGH KR21= BC R21 je u 2NF
R22= ABCE KR22= ABC R22 je u 2NF
R21 BC → H je tranzitivna FZ
B C F G H
Normalizacijom na 3NF se R21 zamjenjuje shemama:
R211=BCFG KR211= BC R211 je u 3NF
R212= FGH KR212= FG R212 je u 3NF
Definicija:
odrediti primarni ključ relacije (tako da bude zadovoljen uvjet 1NF prema kojem
neključni atributi funkcijski ovise o ključu)
zadovoljen je uvjet 1NF prema kojem neključni atributi funkcijski ovise o ključu
FER - Zagreb Baze podataka 2011/2012 443
Zadatak 1 - 2NF
narudzbaArtikla
narudzba
nazProd pbr nazMjesto adresa brNar datNar
Konzum-7 10000 Zagreb Ilica 20 13/25 1.5.2006 narudzba ima
Diona-28 21000 Split Bolska 7 43-21 7.2.2006 jednostavan ključ
⇒ 2NF OK
Konzum-7 10000 Zagreb Ilica 20 41/56 4.2.2007
stavkaNarudzbe
Jesu li relacije narudzba i
brNar sifArtikl nazArtikl kolicina stavkaNarudzbe u 2NF?
13/25 129 Napolitanke 1200
13/25 139 Albert keks 2000
43-21 129 Napolitanke 1200
43-21 221 Domaćica 1800
41/56 129 Napolitanke 1100
stavkaNarudzbe1
brNar sifArtikl kolicina
artikl 13/25 129 1200
sifArtikl nazArtikl 13/25 139 2000
129 Napolitanke 43-21 129 1200 2NF O.K.
2NF O.K.
139 Albert keks 43-21 221 1800
221 Domaćica 41/56 129 1100
FER - Zagreb Baze podataka 2011/2012 447
Zadatak 1 - 3NF
narudzba
nazProd pbr nazMjesto adresa brNar datNar
Konzum-7 10000 Zagreb Ilica 20 13/25 1.5.2006 Je li
Diona-28 21000 Split Bolska 7 43-21 7.2.2006 relacija
narudzba
Konzum-7 10000 Zagreb Ilica 20 41/56 4.2.2007
u 3NF?
stavkaNarudzbe1
brNar sifArtikl kolicina artikl
13/25 129 1200 sifArtikl nazArtikl
13/25 139 2000 129 Napolitanke
43-21 129 1200 139 Albert keks
43-21 221 1800 221 Domaćica
41/56 129 1100 3NF O.K.
3NF O.K.
FER - Zagreb Baze podataka 2011/2012 448
Zadatak 1 - 3NF
narudzba
KNARUDZBA1 = { brNar}
FER - Zagreb Baze podataka 2011/2012 449
Zadatak 1 - 3NF
narudzba
nazProd pbr nazMjesto adresa brNar datNar
Konzum-7 10000 Zagreb Ilica 20 13/25 1.5.2006
Diona-28 21000 Split Bolska 7 43-21 7.2.2006
Konzum-7 10000 Zagreb Ilica 20 41/56 4.2.2007
narudzba1
prodavaonica
brNar nazProd datNar
nazProd pbr nazMjesto adresa 13/25 Konzum-7 1.5.2006
Konzum-7 10000 Zagreb Ilica 20 43-21 Diona-28 7.2.2006
Diona-28 21000 Split Bolska 7 41/56 Konzum-7 4.2.2007
3NF? 3NF: O.K.
FER - Zagreb Baze podataka 2011/2012 450
Zadatak 1 - 3NF
mjesto prodavaonica1
pbr nazMjesto nazProd pbr adresa
10000 Zagreb Konzum-7 10000 Ilica 20
21000 Split Diona-28 21000 Bolska 7
3NF: O.K. 3NF: O.K.
narudzba1 stavkaNarudzbe1
brNar nazProd datNar brNar sifArtikl kolicina
13/25 Konzum-7 1.5.2006 13/25 129 1200
43-21 Diona-28 7.2.2006 13/25 139 2000
41/56 Konzum-7 4.2.2007 43-21 129 1200
43-21 221 1800
41/56 129 1100
R = ABCDEF
F = { AB → CD, AB → EF, A → F, D → E }
AB → CD
AB → EF
⇒ AB → CDEF (P-1: unija)
Postoje li atributi iz zavisnog dijela koji nisu potpuno funkcijski ovisni o ključu?
R AB CDEF
Jesu li R1 i R2 u 3NF?
Postoje li u R1 i R2 neključni atributi koji tranzitivno ovise o ključu?
R1 je u 3NF
R2 AB → E je tranzitivna FZ
A B C D E
Odredite relacijske sheme kojima treba zamijeniti relacijsku shemu R2.
Odredite ključeve.
R21=DE KR21= D
R22=ABCD KR22= AB
FER - Zagreb Baze podataka 2011/2012 457
Zadatak 2 - 3NF
F = { AB → CD, AB → EF, A → F, D → E }
posudba
sifCln invBrPrim datPos datVr sifKnj nazKnj sifIzd nazIzd
123 11234 3.1.2007 NULL 567 Kiklop 12 AGM
123 21345 3.1.2007 2.2.2007 351 Geto 12 AGM
123 19435 29.1.2007 NULL 459 Bajke 15 VBZ
124 19435 2.1.2007 9.1.2007 459 Bajke 15 VBZ
124 23414 2.1.2007 NULL 398 Svila 15 VBZ
234 21345 3.2.2007 NULL 351 Geto 12 AGM
FER - Zagreb Baze podataka 2011/2012 462
Zadatak 3 – 2NF
posudba1
sifCln invBrPrim datPos datVr
123 11234 3.1.2007 NULL
123 21345 3.1.2007 2.2.2007
123 19435 29.1.2007 NULL
124 19435 2.1.2007 9.1.2007
124 23414 2.1.2007 NULL 2NF?
234 21345 3.2.2007 NULL OK
primjerak
invBrPrim sifKnj nazKnj sifIzd nazIzd
11234 567 Kiklop 12 AGM
21345 351 Geto 12 AGM
19435 459 Bajke 15 VBZ
23414 398 Svila 15 VBZ
2NF?
OK
clan1 mjesto
sifCln prezCln imeCln pbr adrCln pbr nazMj
123 Novak Jasna 10000 Unska 6 10000 Zagreb
124 Horvat Krešo 10020 Siget 8 10020 Zagreb
234 Grgić Ana 10000 Krčka 1
3NF?
3NF? OK
OK
FER - Zagreb Baze podataka 2011/2012 464
Zadatak 3 – 3NF
posudba1
sifCln invBrPrim datPos datVr
123 11234 3.1.2007 NULL
POSUDBA1 zadovoljava 3NF
123 21345 3.1.2007 2.2.2007
- ZAŠTO?
123 19435 29.1.2007 NULL
124 19435 2.1.2007 9.1.2007
124 23414 2.1.2007 NULL
234 21345 3.2.2007 NULL
primjerak
invBrPrim sifKnj nazKnj sifIzd nazIzd Zadovoljava li PRIMJERAK 3NF?
11234 567 Kiklop 12 AGM Postoje li neključni atributi koji
21345 351 Geto 12 AGM tranzitivno ovise o ključu?
19435 459 Bajke 15 VBZ
Normalizirajte relacijsku shemu
23414 398 Svila 15 VBZ
PRIMJERAK na 3NF.
R = ABCDEF
F = { AB → CDE, B → EF, F → B }
AB → CDE
B → EF ⇒ AB → EF (A-2: uvećanje)
⇒ AB → CDEF (P-1: unija)
Postoje li atributi iz zavisnog dijela koji nisu potpuno funkcijski ovisni o ključu?
R AB CDEF
Jesu li R1 i R2 u 3NF?
Postoje li u R1 i R2 neključni atributi koji tranzitivno ovise o ključu?
K1R1 = B K2R1 = F
R1 i R2 su u 3NF
FER - Zagreb Baze podataka 2011/2012 471
Zadatak 5
Postoje li neključni atributi koji ne ovise o čitavom ključu nego samo o dijelu ključa?
Normalizirajte relacijsku shemu KVAR na 2NF.
VRSTAKVARA = { oznVrKv, opVrKv }
KVRSTAKVARA = { oznVrKv }
3NF?
OK
3NF?
OK
FER - Zagreb Baze podataka 2011/2012 479
Zadatak 6 – 3NF
15 Petra
1 Marko
47 Ivana
2 Janko
5 Ana
...
Literatura:
1. Silberschatz, Korth, Sudarshan: Database System Concepts
2 .Garcia-Molina, Ullman, Widom: Database Systems -The Complete Book
Ovdje će biti opisana varijanta B-stabla koja se naziva B+- stablo. Opisi ostalih
varijanti B-stabala (B*-stablo, B-stablo, ...) mogu se pronaći u literaturi.
razina 0 A korijen
razina 2 G E C D
razina 3 listovi J B
listovi
• razina čvora (level): duljina puta od korijena do čvora
• dubina stabla (depth): najveća duljina puta od korijena do lista
• red stabla (order): najveći broj djece koje čvor može imati
FER - Zagreb Baze podataka 2011/2012 491
Stablo kao struktura podataka
A A
B J B J
E C H G E C H G
F D
• 43 •
interni
B-stablo
čvorovi
• 27 • • 56 • 73 •
listovi • 11 • 19 • • 27 • • 43 • • 56 • 61 • • 73 • 79 •
blokovi s 27
Ana
19
Davor
11
Ivan
43
Tea
56
Jura
79
Iva
61 73
Ante Igor
podacima Novak Turk Kolar Ban Anić Pek Tomić Šimić
P1 K1 P2 K2 P3 ... Kn-1 Pn
• • • •
• 27 • • 56 • 73 •
k < 27 k ≥ 27 k < 56 k ≥ 73
56 ≤ k < 73
• 11 • 19 • • 27 • • 43 • • 56 • 61 • • 73 • 79 •
k = 56 k = 61
27 19 11 43 56 79 61 73
Ana Davor Ivan Tea Jura Iva Ante Igor
Novak Turk Kolar Ban Anić Pek Tomić Šimić
• 27 • • 56 • 73 •
na ovoj slici nisu
prikazani blokovi s
podacima
• 11 • 19 • • 27 • • 43 • • 56 • 61 • • 73 • 79 •
• 9 • • 31 • 39 • • 67 •
• 3 • 7 • • 9 • • 13 • 17 • • 31 • • 39 • • 48 • • 67 • 93 •
13 9 3 31 15 7 17 39 48 93 67
Ana Josip Davor Maja Tomo Ivan Tea Jura Iva Ante Igor
Novak Rajt Turk Šapar Grec Kolar Ban Anić Pek Tomić Šimić
• 13 • • 48 •
• 9 • • 17 • • 39 • • 67 •
• 3 • 7 • • 9 • • 13 • 15 • • 17 • • 31 • • 39 • • 48 • • 67 • 93 •
13 9 3 31 15 7 17 39 48 93 67
Ana Josip Davor Maja Tomo Ivan Tea Jura Iva Ante Igor
Novak Rajt Turk Šapar Grec Kolar Ban Anić Pek Tomić Šimić
• 9 • • 17 • • 48 • 67 •
• 3 • 7 • • 9 • • 13 • 15 • • 17 • • 31 • • 48 • • 67 • 93 •
13 9 3 31 15 7 17 39 48 93 67
Ana Josip Davor Maja Tomo Ivan Tea Jura Iva Ante Igor
Novak Rajt Turk Šapar Grec Kolar Ban Anić Pek Tomić Šimić
Primjer: za broj n-torki m = 1 000 000, za red stabla n = 70, ukupni broj
razina (uključujući i razinu korijena) u najlošijem slučaju je 4:
• 11 • • 24 • 36 •
• 1 • 7 • • 11 • 14 • • 18 • 21 • • 24 • 35 • • 36 • 41 • 43 •
• 1 • 7 • 11 • • 14 • 18 • 21 • • 24 • 35 • 36 • • 41 • 43 •
• 14 • 24 • 41 •
• 1 • 7 • 11 • • 14 • 18 • 21 • • 24 • 35 • 36 • • 41 • 43 •
Koliko n-torki sadrži relacija ako je nad njom izgrađeno B+-stablo reda
101, s ukupno 5 razina, s minimalno dopuštenom popunjenošću svih
čvorova
Koliko n-torki sadrži relacija ako je nad njom izgrađeno B+-stablo reda
101, s ukupno 5 razina, s maksimalno popunjenim svim čvorovima
max. broj kazaljki u jednom listu je 101 - 1 = 100
max. broj kazaljki u internom čvoru je 101
relacija sadrži 101 • 101 • 101 • 101 • 100 ≈ 1.04 • 1010 n-torki
Obavljanjem naredbe za 2
kreiranje indeksa nad CREATE INDEX osoba_prez
relacijom, nad blokovima s ON osoba (prez);
podacima relacije formira se
struktura B-stabla B-stablo za osoba.prez
1
CREATE TABLE osoba (
mbr INTEGER
, ime NCHAR(20)
, prez NCHAR(20)); 7 17 39 48 93 67
Ivan Tea Jura Iva Ante Igor
Kolar Ban Anić Pek Tomić Šimić
INSERT INTO ...;
11 43 56 79 61 73
Ivan Tea Jura Iva Ante Igor
Kolar Ban Anić Pek Tomić Šimić
NE !!! Zašto?
upit oblika:
SELECT * FROM stud
WHERE prez = 'Kolar'
AND ime = 'Ivan';
Indekse r_abc2, r_a1, r_a2, r_ab1 i r_ab2 ne treba kreirati jer SUBP
može koristiti indeks r_abc1 u svim slučajevima u kojima bi se
koristili indeksi r_abc2, r_a1, r_a2, r_ab1 i r_ab2.
H F
G E C D
listovi listovi
J B
522
B-stabla (dodatak)
Stablo kao struktura podataka
A
predak
roditelj potomak
dijete H F
G E C D
J B braća
braća
523
B-stabla (dodatak)
Stablo kao struktura podataka
razina 0 A
razina 1 H F
razina 2 G E C D
razina 3 J B
A A
B J B J
E C H G E C H G
F D
• 43 •
interni
B-stablo
čvorovi
• 27 • • 56 • 73 •
listovi • 11 • 19 • • 27 • • 43 • • 56 • 61 • • 73 • 79
blokovi s 27 19 43 11 56 73 79 61
... ... ... ... ... ... ... ...
podacima ... ... ... ... ... ... ... ...
526
B-stabla (dodatak)
Struktura B-stabla
Struktura internog čvora
• U B+-stablu reda n, interni čvor sadrži
• najviše n kazaljki
• najmanje n/2 kazaljki → a je najmanji cijeli broj ≥ a
• ovo ograničenje ne vrijedi za korijen (2 .. n kazaljki)
• uz p kazaljki u čvoru, broj pripadnih vrijednosti Ki u čvoru je p-1
1. zapis 2. zapis 3. zapis n-ti zapis
P1 K1 P2 K2 P3 ... Kn-1 Pn
• • • •
podstablo s
vrijednostima
ključa k < K1
K1 ≤ k < K2 K2 ≤ k < K3 k ≥ Kn-1
527
B-stabla (dodatak)
Struktura B-stabla
Struktura lista
• U B+-stablu reda n, list sadrži
• najviše n-1 vrijednosti Ki i pripadnih kazaljki na zapise
• najmanje (n-1)/2 vrijednosti Ki i pripadnih kazaljki na zapise
• svi listovi, osim krajnje desnog, sadrže kazaljku na sljedeći list
• omogućuju se upiti tipa od-do
1. zapis 2. zapis n-1. zapis n-ti zapis
• 13 • 48 •
• 9 • • 31 • 39 • • 67 •
• 3 • • 9 • • 13 • 17 • • 31 • • 39 • • 48 • • 67 • 93
Odabire se red stabla čija primjena rezultira veličinom čvora koja odgovara veličini
fizičkog bloka. Ovisno o veličini ključa, red stabla je uglavnom veličine 10 - 200.
529
B-stabla (dodatak)
3. Algoritmi za B-stablo
530
B-stabla (dodatak)
Algoritam za pretragu B+-stabla
531
B-stabla (dodatak)
Algoritam za pretragu B+-stabla
• 13 • 48 •
13 ≤ k < 48
• 9 • • 31 • 39 • • 67 •
31 ≤ k < 39
• 3 • 7 • • 9 • • 13 • 17 • • 31 • 34 • • 39 • • 48 • • 67 • 93
k = 34
532
B-stabla (dodatak)
Algoritam za pretragu B+-stabla
• 13 • 48 •
k < 13
• 9 • • 31 • 39 • • 67 •
k<9
• 3 • 7 • • 9 • • 13 • 17 • • 31 • 34 • • 39 • • 48 • • 67 • 93
k=7
533
B-stabla (dodatak)
Algoritam za dodavanje zapisa u B+-stablo
534
B-stabla (dodatak)
Algoritam za dodavanje zapisa u B+-stablo
• 13 • 48 •
• 9 • • 31 • 39 • • 67 •
ima li
mjesta
?
• 3 • 7 • • 9 • • 13 • 17 • • 31 • • 39 • 47 • • 48 • • 67 • 93
9 93 13 39 67 34 7 47 3 17 48 31
... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ... ... ...
535
B-stabla (dodatak)
Algoritam za dodavanje zapisa u B+-stablo
• 13 • 48 •
• 9 • • 31 • 39 • • 67 •
ima li
mjesta
?
• 3 • 7 • • 9 • • 13 • 17 • • 31 • • 39 • • 48 • • 67 • 93
• 13 • 48 •
ima li
mjesta
?
• 9 • • 31 • 39 • • 67 •
?
• 3 • 7 • • 9 • • 13 • 15 • • 17 • • 31 • • 39 • • 48 • • 67 • 93
ima li
mjesta
?
• 13 • 48 •
?
• 9 • • 17 • • 39 • • 67 •
• 3 • 7 • • 9 • • 13 • 15 • • 17 • • 31 • • 39 • • 48 • • 67 • 93
? ?
• 13 • • 48 •
• 9 • • 17 • • 39 • • 67 •
• 3 • 7 • • 9 • • 13 • 15 • • 17 • • 31 • • 39 • • 48 • • 67 • 93
539
B-stabla (dodatak)
Algoritam za dodavanje zapisa u B+-stablo
• 31 •
• 13 • • 48 •
• 9 • • 17 • • 39 • • 67 •
• 3 • 7 • • 9 • • 13 • 15 • • 17 • • 31 • • 39 • • 48 • • 67 • 93
• 13 • • 48 •
• 9 • • 17 • • 39 • • 67 •
dovoljno
zapisa?
• 3 • 7 • • 9 • • 13 • 15 • • 17 • • 31 • • 39 • • 48 • • 67 • 93
• 31 •
• 13 • • 48 •
• 9 • • 17 • • 39 • • 67 •
dovoljno
zapisa?
• 3 • 7 • • 9 • • 13 • 15 • • 17 • • 31 • • 39 • • 48 • • 67 • 93
korekcija ključa u • 31 •
nekom od predaka
• 15 • • 48 •
• 9 • • 17 • • 39 • • 67 •
• 3 • 7 • • 9 • • 15 • • 17 • • 31 • • 39 • • 48 • • 67 • 93
544
B-stabla (dodatak)
Algoritam za brisanje zapisa iz B+-stabla
• 13 • • 48 •
• 9 • • 17 • • 39 • • 67 •
• 3 • 7 • • 9 • • 13 • 15 • • 17 • • 31 • • 39 • • 48 • • 67 • 93
ima li L
ima li brat dovoljno
LX više zapisa?
nego treba?
podijeliti zapise s bratom LX i obaviti potrebne
korekcije ključeva u pretcima 545
B-stabla (dodatak)
Algoritam za brisanje zapisa iz B+-stabla
• 13 • • 48 •
korekcija ključa u
čvoru-pretku
• 9 • • 15 • • 39 • • 67 •
• 3 • 7 • • 9 • • 13 • • 15 • • 31 • • 39 • • 48 • • 67 • 93
546
B-stabla (dodatak)
Algoritam za brisanje zapisa iz B+-stabla
• 13 • • 48 •
• 9 • • 17 • • 39 • • 67 •
• 3 • 7 • • 9 • • 13 • 15 • • 17 • • 31 • • 39 • • 48 • • 67 • 93
• 13 • • 48 •
ima li brat LX
ima li L više nego
dovoljno treba?
zapisa?
• 9 • • 17 • • 39 • • 67 •
• 3 • 7 • • 9 • • 13 • 15 • • 17 • • 31 • • 48 • • 67 • 93
ima li L
korekcija dovoljno
ima li brat ključa zapisa?
LX više
nego treba? • 13 • • 31 •
• 9 • • 17 • • 48 • 67 •
• 3 • 7 • • 9 • • 13 • 15 • • 17 • • 31 • • 48 • • 67 • 93
• 13 • 31 •
• 9 • • 17 • • 48 • 67 •
• 3 • 7 • • 9 • • 13 • 15 • • 17 • • 31 • • 48 • • 67 • 93
d ≤ logn/2 (m / 2) + 1
552
B-stabla (dodatak)
10. Integritet baze podataka
UVOD - Integritet baze podataka
student ispit
mbr prez ime postBrPreb mbr sifPred datIsp ocj sifNast
1111 Novak Ivan 10000 1111 1001 29.01.05 1 1111
1234 Kolar Petar 31000 1111 1001 05.02.05 1 2222
1111 1001 01.04.05 3 1111
predmet 1111 1003 03.02.05 2 3333
sifPred nazPred ECTS sifOrgJed
1111 1002 15.06.05 4 2222
1001 Mat-1 6 102
1234 1001 29.01.05 3 2222
1002 Mat-2 6 102
1003 Fiz-1 5 101
systables syscolumns
tabname owner tabid ncols nrows created ... colname tabid colno coltype collength ...
mjesto bpadmin 101 3 275 15.02.2012 ... pbr 101 1 258 4 ...
mjesto bpadmin 101 3 275 15.02.2012 ... nazmjesto 101 2 271 40 ...
mjesto bpadmin 101 3 275 15.02.2012 ... sifzupanija 101 3 1 2 ...
atribut mbrStud ?
FK1 = { oznDrz, pbr } je strani ključ u relaciji osoba koji se poziva na relaciju mjesto
FK2 = { oznDrz } je strani ključ u relaciji osoba koji se poziva na relaciju drzava
FK3 = { oznDrz } je strani ključ u relaciji mjesto koji se poziva na relaciju drzava
n-torke t1, t2, t3, t4, t5 zadovoljavaju pravila referencijskog integriteta za FK1 i FK2
n-torka t6 ne zadovoljava pravilo referencijskog integriteta za FK2
n-torka t7 ne zadovoljava pravilo referencijskog integriteta za FK1
n-torka t8 ne zadovoljava pravila referencijskog integriteta za FK1 i FK2
FER - Zagreb Baze podataka 2011/2012 568
Strani ključ (Foreign key) i referencijski integritet
SUBP osigurava:
CREATE TABLE ispit (
entitetski integritet i
mbrStud INTEGER
, sifPred INTEGER integritet ključa
, datIsp DATE
, ocj SMALLINT
, sifNast INTEGER
, PRIMARY KEY ( vidjeti sintaksne
mbrStud, sifPred, datIsp) dijagrame 5, 5.1 i 5.5
);
Primjer:
NASTAVNIK (sifNast, jmbgNast, prezNast) nastavnik(NASTAVNIK)
PKNASTAVNIK = sifNast K2NASTAVNIK = jmbgNast
Primjer:
NASTAVNIK (sifNast, jmbgNast, prezNast) nastavnik(NASTAVNIK)
PKNASTAVNIK = sifNast K2NASTAVNIK = jmbgNast
CREATE TABLE nastavnik (
sifNast INTEGER
SUBP osigurava:
, jmbgNast CHAR(13)
, prezNast CHAR(40)
integritet ključa
, PRIMARY KEY (sifNast) vidjeti sintaksne
, UNIQUE (jmbgNast)
dijagrame 5, 5.1 i 5.5
);
SUBP osigurava ref. integritet: strani ključ u relaciji ispit (skup atributa { sifNast })
poziva se na primarni ključ u relaciji nastavnik (skup atributa { sifNast })
Podrazumijeva se da su u relacijama student, predmet i nastavnik pomoću
PRIMARY KEY definirana ograničenja (ent. integritet i integritet ključa)
prosjek
INSERT INTO prosjek
SELECT sifPred, AVG(ocj) sifPred prosOcj
FROM polozeniIspit 1001 4.00
GROUP BY sifPred; 1002 3.50
1003 3.00
Primjer: mbr predmet ocj mbr ime prez pbrStan pbr nazMjesto
100 Elektronika 3 100 Ivan Kolar 52100 42000 Varaždin
100 Fizika 2 101 Ana Horvat 42230 52100 Pula
101 Elektronika 5 102 Jura Novak 52100 42230 Ludbreg
101 Fizika 2 103 Ana Ban 52100
102 Fizika 1
103 Fizika 5 studenti koji su položili predmet Fizika
CREATE VIEW polFiz AS
SELECT stud.*, ocj
FROM ispit, stud
korisnik obavlja: WHERE ispit.mbr = stud.mbr
SELECT * FROM polFiz; AND predmet = 'Fizika'
AND ocj > 1;
SUBP modificira upit
ispit mbr predmet ocj CREATE VIEW prosli AS CREATE VIEW pali AS
100 Elektronika 1 SELECT * FROM ispit SELECT * FROM ispit
100 Fizika 5 WHERE ocj > 1 WHERE ocj = 1
101 Elektronika 1 WITH CHECK OPTION; WITH CHECK OPTION;
101 Fizika 3
polozeniIspit
CREATE VIEW prosjek (sifPred SELECT * FROM prosjek;
mbr sifPred ocj
, prosOcj) AS sifPred prosOcj
100 1001 5
SELECT sifPred, AVG(ocj) 1001 4.00
101 1001 4
FROM polozeniIspit 1002 3.50
102 1001 3 GROUP BY sifPred; 1003 3.00
100 1002 2
101 1002 5
100 1003 3 UPDATE prosjek SET prosOcj = 4.5
WHERE sifPred = 1001; ?
101 1003 3
eksterne sheme
konceptualna shema
racun klijent uplataIsplata
brRac jmbgVl tipRac datRac jmbg ime prez brRac vrijeme valuta iznos
... ... ...
Funkcija koja u zadanom nizu znakova broji koliko ima znakova koji su
znamenke (broji znakove iz intervala '0' ... '9'). Pretpostavlja se da
duljina zadanog niza znakova ne premašuje 255 bajtova
CREATE FUNCTION brojZnamenki (niz CHAR(255))
RETURNING SMALLINT AS broj
DEFINE brojac, i SMALLINT;
LET brojac = 0;
FOR i = 1 TO CHAR_LENGTH(niz)
IF SUBSTRING(niz FROM i FOR 1) BETWEEN '0' AND '9' THEN
LET brojac = brojac + 1;
END IF;
END FOR;
RETURN brojac;
END FUNCTION;
broj
6
Problem: što će se dogoditi ako korisnik pri pozivu procedure kao broj prvog
računa zada postojeći, a kao broj drugog računa zada nepostojeći broj
računa? EXECUTE PROCEDURE prebaci(1001, 1005, 30.15);
Zahtjev
JDBC, ODBC
KLIJENT
POSLUŽITELJ
Rezultat
(SUBP)
KLIJENT
OK
on event
if condition then action
kad god se obavi naredba INSERT nad relacijom uplataIsplata SUBP obavlja
• nakon unosa svake n-torke (jednom INSERT naredbom može se unijeti više
n-torki) provjerava uvjet novaUplataIsplata.iznos <> 0
• na sadržaj unesene n-torke može se referencirati koristeći "ime" n-torke koje
je zadano pomoću REFERENCING NEW AS novaUplataIsplata
• ako je uvjet zadovoljen (za dotičnu n-torku), obavlja izmjenu stanja u relaciji
racun
FER - Zagreb Baze podataka 2011/2012 646
Primjer 3 (nastavak):
...
FOR EACH ROW
(INSERT INTO auditTrailZaRacun VALUES (
USER, CURRENT, stari.brRac, stari.sifKlijent, stari.stanje,
novi.brRac, novi.sifKlijent, novi.stanje));
racun
što se dešava obavljanjem naredbe
brRac sifKlijent stanje
novak UPDATE racun 1001 98281 216.80
SET stanje = stanje + 10 1002 89734 134.99
WHERE brRac BETWEEN 1002 AND 1003; 1003 23232 2750.00
1004 63443 849.50
ako se nakon toga obavi naredba artikl sifArt stanje optKol adresaZaduzenog
UPDATE artikl 1001 0 150 pero@tvrtka.hr
SET stanje = stanje - 100; 1002 150 200 joza@tvrtka.hr
1003 200 350 jura@tvrtka.hr
CREATE PROCEDURE insIspitZad(matBr int, sifPred int, datIsp DATE, ocj SMALLINT)
IF ((SELECT pbrSt FROM stud WHERE matBr = matBr)= 23000) THEN
INSERT INTO ispit VALUES (matBr, sifPred, datIsp, ocj);
ELSE
RAISE EXCEPTION -746, 0, 'Student ne postoji ili nije iz Zadra.';
END IF;
END PROCEDURE;
WHILE uvjet
naredba za realizaciju naredbe
petlje s ispitivanjem ...
EXIT WHILE; kao break u jeziku C
uvjeta na početku CONTINUE WHILE; kao continue u jeziku C
END WHILE;
opseg povrsina
28.27431 63.61720
P.P.Chen:
The Entity-Relationship Model - Toward a Unified View of Data,
ACM Transactions on Database Systems, Vol. 1, No. 1, 1976
T. J. Teorey:
Database Modeling & Design, Morgan Kaufmann, 1999
S2 2345
Prezime
S3 Horvat
Marić
matBrSt:Student→MaticniBroj
Novak
prezSt:Student→Prezime
FER - Zagreb Baze podataka 2011/2012 682
Atributi entiteta
... ili na Kartezijev produkt skupova vrijednosti
PostBroj × Ulica
PostBroj
10000 Ilica 10000
Student 10000 Gundulićeva 31000
10000 Vukovarska 21000
S1
21000 Ilica
21000 Gundulićeva Ulica
S2
21000 Vukovarska Ilica
S3 Gundulićeva
31000 Ilica
Vukovarska
31000 Gundulićeva
31000 Vukovarska
adresa:Student→PostBroj×Ulica
FER - Zagreb Baze podataka 2011/2012 683
Atributi entiteta
... ili na Kartezijev produkt skupova vrijednosti
PostBroj
10000
Student
21000
S1
31000
S2 Ulica
S3 Ilica
Gundulićeva
adresa:Student→PostBroj×Ulica Vukovarska
Chen:
entitet, skup entiteta
veza, skup veza
Teorey:
instanca entiteta, entitet
(entity instance)
(entity occurrence)
instanca veze, veza
(relationship instance)
(relationship occurrence)
PODUZEĆE
binarna ternarna
refleksivna
N 1
DJELATNIK RadiNa PROJEKT
0..N 0..1
DJELATNIK RadiNa PROJEKT
jedan djelatnik radi na nula (niti jednom) ili jednom projektu, na jednom projektu
radi između nula (niti jedan) i više djelatnika
FER - Zagreb Baze podataka 2011/2012 692
Spojnost veze (connectivity)
radi pojednostavljenja
• spojnost 0..N se često označava samo oznakom N
• spojnost 1..1 se često označava samo oznakom 1
1..1 0..N 1 N
≡
0..1 1..N 1 N
≠
N 1
DJELATNIK RadiNa PROJEKT
N N
DJELATNIK RadiNa PROJEKT
1 1
DJELATNIK RadiNa PROJEKT
P1
D1
D1 , P 1
D2 P2
D2 , P 3
D3
P3
D3 , P 2
N 1
DJELATNIK RadiNa PROJEKT
P1
D1
D1 , P 1
D2
D2 , P 1
D3 P2
D3 , P 2
1 N
DJELATNIK RadiNa PROJEKT
P1
D1
D1 , P 1
P2
D2 , P 3
D2
P3
D2 , P 2
N N
DJELATNIK RadiNa PROJEKT
P1
D1
D1 , P 1
D2 , P 1
D2 P2
D2 , P 2
prezime nazMj
ime postBroj
matBrSt
N 1
STUDENT ZiviU MJESTO
matBrSt postBroj
sheme entiteta:
STUDENT = matBrSt, prezime, ime
MJESTO = postBroj, nazMj
shema veze:
ZiviU = matBrSt, postBroj Koji atributi čine ključ veze?
prezime nazMj
ime postBroj
matBrSt
N 1
STUDENT ZiviU MJESTO
matBrSt postBroj
sheme entiteta:
STUDENT = matBrSt, prezime, ime
MJESTO = postBroj, nazMj
shema veze: Iz definicije 1:
ZiviU = matBrSt, postBroj matBrSt → postBroj
FER - Zagreb Baze podataka 2011/2012 703
Ključevi veza
prezime nazProj
ime sifProj
matBrDj
N N
DJELATNIK radiNa PROJEKT
matBrDj sifProj
prezime nazProj
ime sifProj
matBrDj
N N
DJELATNIK RadiNa PROJEKT
N N
STUDENT Položio PREDMET
1 N N 1
STUDENT StudIsp ISPIT PredIsp PREDMET
N 1
DJELATNIK Stanuje MJESTO
N N
DJELATNIK RadiNa PROJEKT
N 1
DJELATNIK RadiNa PROJEKT
STUDENT MJESTO
N 1
Boravi BORAVIŠTE
• • •
Zavod za Zavod za
Zavod za Zavod za
• • • aut.i proc. • • el.,mikroel. i • •
fiziku prim.mat.
računar. int. sust.
• • • • • • • •
• • • • • • • • •
Preimenovati
ImaNad = sifOrgJed, sifOrgJed
jedan od atributa !
ImaNad = sifOrgJed, sifNadOrgJed
ORGJED
sifOrgJed nazOrgJed imaNad
1 FER sifOrgJed sifNadOrgJed
9 Zavod za prim.mat. 9 1
21 Grupa Matematika 21 9
33 Grupa Rač. Znanost 33 9
49 Zavod za aut. i proc. rač. 49 1
53 Grupa Automatika 53 49
67 Grupa RASIP 67 49
73 Zavod za el.mikroel. i int. 73 1
89 Grupa Rač. tehnika 89 73
01 Sektor A XXYYZZZ
XX – šifra sektora
YY – šifra odjela
0101 0102
ZZZ – šifra odsjeka
Odjel X Odjel Y
Oblikovanje ER modela
definiranje entiteta
• ime, opis, komentar
definiranje veza
• ime, opis, komentar, entiteti koje povezuje, preslikavanje
definiranje atributa entiteta
• za svaki atribut: ime, opis, komentar, domena
• definirati ključeve, provjeriti da li zadovoljava 3NF
definiranje atributa veza
• za svaki atribut: ime, opis, komentar, domena
• definirati ključeve, provjeriti da li zadovoljava 3NF
POSTUPAK JE ITERATIVAN!
SADRŽI OPISE
entiteta
veza
atributa entiteta
atributa veza
Stud
1
Polaze
N
N 1
Ispit Iz Pred
N
Ispituje
1
Nast
Stud Mjesto
1
Polaze
N
N 1
Ispit Iz Pred
N
Ispituje
1
Nast
N 1
Stud Prebiva Mjesto
1 PREBIVALIŠTE
N 1 BORAVIŠTE
Polaze Boravi
N
N 1
Ispit Iz Pred
N
Ispituje
1
Nast
N 1
Stud Prebiva Mjesto
1 PREBIVALIŠTE
N 1 BORAVIŠTE
Polaze Boravi
N
N 1
Ispit Iz Pred
N
Ispituje
1
Nast
N 1
Stud Prebiva Mjesto
1 PREBIVALIŠTE
N 1 BORAVIŠTE
Polaze Boravi
N
N 1
Ispit Iz Pred
N
Ispituje
1
N 1
Nast RadiU OrgJed
N 1
Stud Prebiva Mjesto
1 PREBIVALIŠTE
N 1 BORAVIŠTE
Polaze Boravi
N
N 1
Ispit Iz Pred
N
Ispituje
1 NADREĐENA
0..1
N 1
Nast RadiU OrgJed Nadred
N
FER - Zagreb Baze podataka 2011/2012 735
Primjer (nastavak)
N 1
Stud Prebiva Mjesto
1 PREBIVALIŠTE
N 1 BORAVIŠTE
Polaze Boravi
N
N 1
Ispit Iz Pred
N N
Ispituje Pripada
1 1
NADREĐENA 0..1
N 1
Nast RadiU OrgJed Nadred
N
FER - Zagreb Baze podataka 2011/2012 737
Primjer (nastavak) - Opis veza
N 1
Rodjen MJESTO_ROĐENJA
1 1
N 1
NADREĐENA
0..1
Nast RadiU OrgJed Nadred
N
Iz = matBrStud, sifraPred, datumIspit
Ispituje = matBrStud, sifraPred, datumIspit, sifraNast
RadiU = sifraNast, sifraOrgJed
Pripada = sifraPred, sifraOrgJed
Nadred = sifraOrgJed ,sifraNadOrgJed
FER - Zagreb Baze podataka 2011/2012 738
→ Relacijski model
Stud = matBrStud, prezStud, imeStud, datRodStud, datUpisFERStud,
rangKlasIspitStud, eMailStud
Mjesto = pbrMjesto, nazMjesto
Ispit = matBrStud, sifraPred, datumIspit, ocjena
Nast = sifraNast, prezNast, imeNast, eMailNast, URLNast
OrgJed = sifraOrgJed, nazivOrgJed
Pred = sifraPred, kraticaPred, nazivPred, URLPred
Rodjen = matBrStud, postBrMjRodStud
Prebiva = matBrStud, postBrMjPrebStud, adresaMjPrebStud
Boravi = matBrStud, postBrMjBorStud, adresaMjBorStud
Polaze = matBrStud, sifraPred, datumIspit
Iz = matBrStud, sifraPred, datumIspit
Ispituje = matBrStud, sifraPred, datumIspit ,sifraNast
RadiU = sifraNast ,sifraOrgJed
Pripada = sifraPred ,sifraOrgJed
Nadred = sifraOrgJed ,sifraNadOrgJed
FER - Zagreb Baze podataka 2011/2012 739
→ Relacijski model
AUTOMOBIL AVION
MOTOR TRUP
KAROSERIJA
CILINDAR
KLIP BLOK
KOMPONENTA N
SKLOP SklopKomp
N
SKLOP = sifSklop, nazSklop
Preimenovati
SklopKomp = sifSklop, sifSklop jedan od atributa !
AUTOMOBIL AVION
Sklop sklopKomp
sifSklop nazSklop sifSklop sifKomp
17 Automobil 17 19
19 Motor 17 21
21 Karoserija 19 37
37 Klip 19 49
49 Cilindar 19 52
52 Blok 64 19
64 Avion 64 82
82 Trup
FER - Zagreb Baze podataka 2011/2012 745
Refleksivne veze N:N → relacijski model
SELECT sklop.nazSklop
, komponenta.nazSklop AS nazKomponenta
FROM sklop AS komponenta
INNER JOIN sklopKomp
ON komponenta.sifSklop = sklopKomp.sifKomp
RIGHT OUTER JOIN sklop
ON sklopKomp.sifSklop = sklop.sifSklop;
Model proizvodnje:
robot R1 montira prednja lijeva vrata na modelu automobila Volvo
S40 za 45 sekundi i pri tome utroši 0.8 kWh energije
robot R2 oboji poklopac motora na modelu automobila Volvo S40
za 28 sekundi i pri tome utroši 0.4 kWh energije
robot R1 montira prednja lijeva vrata na modelu automobila Volvo
S60 za 52 sekunde i pri tome utroši 0.9 kWh energije
robot R1 montira poklopac motora na modelu automobila Volvo
S40 za 25 sekundi i pri tome utroši 0.75 kWh energije
robot R2 montira prednja lijeva vrata na modelu automobila Volvo
S40 za 40 sekundi i pri tome utroši 0.6 kWh energije
robot R2 montira poklopac motora na modelu automobila Volvo
S40 za 18 sekundi i pri tome utroši 0.7 kWh energije
FER - Zagreb Baze podataka 2011/2012 747
Ternarne veze
Ternarnom vezom prikazuje se istovremeni odnos triju entiteta.
N N
ROBOT RobModOp MODEL
? ?
? ?
RobOp OPERACIJA ModOp
N N
ROBOT RobModOp MODEL
OPERACIJA
N N
STUDENT Polozio PREDMET
NASTAVNIK
DatPol
N
N N
STUDENT Polagao PREDMET
NASTAVNIK
N N
STUDENT Polagao ROK
1 N
PredRok
NASTAVNIK 1
STUDENT = matBrSt, prezSt, imeSt PREDMET
PREDMET = sifPred, nazPred
ROK = sifPred, datRok, vrstaRok
NASTAVNIK = sifNast, prezNast, imeNast
PredRok = sifPred, datRok
Polagao = matBrSt, sifPred, datRok, sifNast, ocjena
N 1
STUDENT StMSm MENTOR
SMJER
Student može studirati na više smjerova, ali na svakom smjeru mora imati
različitog mentora. Student na svakom smjeru ima samo jednog mentora.
STUDENT = matBrSt, prezSt, imeSt
SMJER = sifSmjer, nazSmjer
MENTOR = sifMentor, prezMentor, imeMentor
StMSm = sifSmjer, matBrSt, sifMentor
StanujeUMjestu NalaziSeUZupaniji
N 1 N 1
OSOBA MJESTO ZUPANIJA
N 1
StanujeUMjestu NalaziSeUZupaniji
N 1 N 1
OSOBA MJESTO ZUPANIJA
N 1
OSOBA PUTOVNICA
jmbgOso datIzd brPut
ime + atributi vrijediDo
CREATE TABLE putovnica (
prez ključeva brPut ...
entiteta , vrijediDo ...
, datIzd ...
, jmbgOso ... NOT NULL
ImaPutovnicu , PRIMARY KEY (brPut)
, UNIQUE (jmbgOso)
brPut
, FOREIGN KEY (jmbgOso)
jmbgOso – alternativni ključ REFERENCES osoba (jmbgOso));
datIzd
ZavršilaOsnŠkolu
N 0..1
OSOBA OSNSKOLA
Stanuje
N 1
OSOBA MJESTO
CREATE TABLE mjesto (
OSOBA MJESTO pbr ...
jmbgOso datPrijave pbr , nazMjesto ...
ime nazMjesto , PRIMARY KEY (pbr));
+ atributi
prez ključeva
entiteta CREATE TABLE osoba (
jmbgOso ...
, ime ...
Stanuje , prez ...
, pbrStan ... NOT NULL
jmbgOso
, datPrijave ...
pbrStan , PRIMARY KEY (jmbgOso)
datPrijave , FOREIGN KEY (pbrStan)
REFERENCES mjesto(pbr));
Za svaki uređaj mora biti evidentiran točno jedan rezervni uređaj. Jedan uređaj može biti
rezerva za nekoliko uređaja. Evidentira se datum kad je uređaj postao rezerva nekog drugog
uređaja
CREATE TABLE uredjaj (
REZERVA 1 sifUred ...
UREDJAJ , nazUred ...
ImaRezervu , sifRezUred ... NOT NULL
N , jeRezervaOdDat ...
, PRIMARY KEY (sifUred)
UREDJAJ jeRezervaOdDat
imaRezervu , FOREIGN KEY (sifRezUred)
sifUred + atributi REFERENCES uredjaj (sifUred));
nazUred ključeva sifUred
entiteta sifRezUred
jeRezervaOdDat Zadatak: kako osigurati da uređaj
ne bude sam sebi rezerva?
FER - Zagreb Baze podataka 2011/2012 763
Primjeri preslikavanja u relacijski model
KOMPONENTA N
SKLOP
SklopKomp
N
SKLOP nacinUgradnje
sifSklop SklopKomp
+ atributi sifSklop
nazSklop ključeva sifKomp
entiteta
nacinUgradnje
utrVrijeme + atributi
ključeva
RobModOp utrEnergija entiteta
N
ROBOT MODEL
N CREATE TABLE robModOp (
sifRobot ...
N
, sifModel ...
, sifOper ...
OPERACIJA , utrVrijeme ...
, utrEnergija ...
, PRIMARY KEY (sifRobot, sifModel, sifOper)
ROBOT MODEL OPERACIJA , FOREIGN KEY (sifRobot)
sifRobot sifModel sifOper REFERENCES robot (sifRobot)
nazRobot nazModel nazOper , FOREIGN KEY (sifModel)
REFERENCES model(sifModel)
, FOREIGN KEY (sifOper)
REFERENCES operacija (sifOper));
ocjena + atributi
ključeva
Položio entiteta
N
STUDENT PREDMET
N CREATE TABLE polozio (
mbrSt ...
1 , sifPred ...
, sifNast ... NOT NULL
NASTAVNIK , ocjena ...
, PRIMARY KEY (mbrSt, sifPred)
, FOREIGN KEY (mbrSt)
STUDENT PREDMET NASTAVNIK REFERENCES student (mbrSt)
mbrSt sifPred sifNast , FOREIGN KEY (sifPred)
prezSt nazPred prezNast REFERENCES predmet (sifPred)
imeSt imeNast , FOREIGN KEY (sifNast)
REFERENCES nastavnik (sifNast));
tema + atributi
ključeva
StSmjMentor entiteta
N
STUDENT SMJER CREATE TABLE stSmjMentor (
1 mbrSt ...
1 , sifSmjer ...
MENTOR , sifNast ... NOT NULL
, tema ...
NASTAVNIK , PRIMARY KEY (mbrSt, sifSmjer)
, UNIQUE (mbrSt, sifNast)
STUDENT SMJER NASTAVNIK , FOREIGN KEY (mbrSt)
REFERENCES student(mbrSt)
mbrSt sifSmjer sifNast
, FOREIGN KEY (sifSmjer)
prezSt nazSmjer prezNast REFERENCES smjer(sifSmjer)
imeSt imeNast , FOREIGN KEY (sifNast)
REFERENCES nastavnik(sifNast));
OSOBA
specijalizacija
STUDENT DJELATNIK
specijalizacija
NASTAVNIK ASISTENT ADMINISTRATOR
OSOBA
generalizacija
STUDENT DJELATNIK
generalizacija
NASTAVNIK ASISTENT ADMINISTRATOR
UREDJAJ
PUMPA SKLOPKA
pomoću vrijednosti atributa vrstaUred (npr. 'p' ili 's') može se odrediti
podklasa (specijalizacija) kojoj entitet pripada
PUMPA d
mbrUred SKLOPKA
protok mbrUred
snaga maxStruja
PUMPA SKLOPKA maxNapon
nazNapon
PUMPA d
tvBrojPumpe
SKLOPKA
protok tvBrojSklopke
snaga PUMPA SKLOPKA maxStruja
nazNapon maxNapon
UREDJAJ
ekskluzivna SKLOPKA
PUMPA
generalizacija/specijalizacija
u3 u5
u1 u4 u7
Uređaj može biti ili pumpa ili sklopka
u2 u6
OSOBA
neekskluzivna ASISTENT STUDENT
generalizacija/specijalizacija o4
o5 o8
Osoba može biti asistent i/ili student na o1 o7
poslijediplomskom studiju i/ili administrator o3
o2 o6
web stranica fakulteta
o9
WEB_ADMIN
∪
ASISTENT STUDENT WEB_ADMIN
ASISTENT STUDENT WEB_ADMIN
jmbg jmbg jmbg
zavod smjer specijalnost
godZaposl godUpisa
775
1. Model baze podataka za razredbeni ispit
Potrebno je evidentirati podatke o kandidatima: JMBG, prezime, ime,
završenu srednju školu, mjesto rođenja i mjesto stanovanja. Pretpostavlja
se da je kandidat završio samo jednu srednju školu. Za svaku srednju školu
treba evidentirati šifru koja ju jedinstveno identificira, naziv, adresu i mjesto
u kojem se škola nalazi. Za mjesto treba evidentirati poštanski broj, naziv
mjesta i županiju u kojoj se mjesto nalazi. Županija ima svoju šifru i naziv.
Treba evidentirati podatke o zadacima na testu: redni broj zadatka, tekst
zadatka, oznaku točnog odgovora (može biti A, B, C, D ili E).
Za svakog kandidata evidentirati odgovore koje je dao na zadatke (mogući
odgovori kandidata su A, B, C, D, E ili ništa).
776
Rješenje: SkolaKand OdgKandZad
1 N N N
SKOLA KANDIDAT ZADATAK
N N N
MjestoSkola MjStanKand MjRodKand
1 1 1
MjestoStan
MJESTO
MjestoRod
N
1
ZupMjesto ZUPANIJA
ZADATAK
KANDIDAT SKOLA MJESTO ZUPANIJA rbrZadatak
jmbg sifSkola pbr sifZupanija tekstZadatak
imeKand nazSkola nazMjesto nazZupanija oznTocnogOdg
prezKand K = { sifSkola } K = { pbr } K = { sifZupanija } K = { rbrZadatak }
K = { jmbg }
OdgKandZad
SkolaKand MjestoSkola ZupMjesto MjStanKand MjRodKand jmbg
jmbg sifSkola pbr jmbg jmbg rbrZadatak
sifSkola pbr sifZupanija pbr pbr odgKand
K = { jmbg } adresa K = { pbr } K = { jmbg } K = { jmbg } K = { jmbg, rbrZadatak }
K = { sifSkola } 777
KANDIDAT
jmbg
imeKand
prezKand
K = { jmbg }
Ako bi neki entitet imao više mogućih ključeva, shema entiteta bi se mogla
opisati npr. ovako:
KANDIDAT
jmbg
sifKand
imeKand
prezKand
PK = K1 = { jmbg }
K2 = { sifKand }
778
Relacijski model u obliku SQL naredbi za kreiranje relacija:
780
2. Model baze podataka za videoteku
Za film se evidentira šifra (identificira film), naslov filma, te osobe i njihove
funkcije u filmu.
Funkcije koje osoba može imati u filmu predstavljene su kraticom i nazivom
(npr. GL, glumac; RED, redatelj; SC, scenarist, itd.). Za svaku se osobu
evidentira šifra osobe (identificira osobu), prezime i ime.
Treba uočiti da ista osoba može u istom filmu imati različite funkcije, npr:
relacija VIDEOTEKA
sif naslovFilm ozn nazFun sif ime prezime
Film Fun Osoba
1 Nepomirljivi RED redatelj 10 Clint Eastwood
1 Nepomirljivi GL glumac 10 Clint Eastwood
1 Nepomirljivi GL glumac 20 Morgan Freeman
2 Mostovi okruga Madison RED redatelj 10 Clint Eastwood
2 Mostovi okruga Madison GL glumac 40 Meryl Streep
2 Mostovi okruga Madison GL glumac 10 Clint Eastwood
3 Prljavi Harry RED redatelj 30 Don Siegel
3 Prljavi Harry GL glumac 10 Clint Eastwood
781
Nacrtati ER model i opisati entitete i veze. Sve sheme moraju zadovoljavati 3NF.
Rješenje:
FILM
sifFilm
naslovFilm
FILM K = { sifFilm }
FUN OSOBA
N N
FilmFunOsoba OSOBA
sifOsoba
imeOsoba
FUN prezOsoba
oznFun K = { sifOsoba }
nazFun
K = { oznFun }
FilmFunOsoba
sifFilm
sifFun
sifOsoba
K = { sifFilm, sifFun, sifOsoba }
782
Diskusija: FILM
N
FUN OSOBA
N N
FilmFunOsoba
FUN
oznFun nazFun
RED redatelj
GL glumac
783
SQL upit kojim se dohvaćaju osobe i njihove funkcije u filmu "Prljavi Harry"
relacija VIDEOTEKA
FILM
sifFilm, oznFun → sifOsoba
sifFilm, sifOsoba → oznFun
N
dodatno: u jednom filmu
FUN OSOBA osoba može imati samo
1 1 jednu funkciju
FUN OSOBA
N N
LOK PROIZV
sifLok d sifProizv
nazLok nazProizv
K = { sifLok } K = { sifProizv }
∪
BROJILO VENTIL REDUKTOR
URED
tvBroj ProizvUred LokUred
sifProizv tvBroj tvBroj
godProizv sifProizv sifProizv
vrUred K = { tvBroj, sifProizv } sifLok
K = { tvBroj, sifProizv } K = { tvBroj, sifProizv }
REDUKTOR
BROJILO tvBroj VENTIL
tvBroj sifProizv tvBroj
sifProizv ulTlak sifProizv
razrTocn izlTlak promjNavoja
maxProtok promjNavoja nacZatvar
K = { tvBroj, sifProizv } K = { tvBroj, sifProizv } K = { tvBroj, sifProizv }
789
Rješenje: Relacijski model
CREATE TABLE proizv ( CREATE TABLE lok (
sifProizv INTEGER sifLok INTEGER
, nazProizv CHAR(20) , nazLok CHAR(40)
, PRIMARY KEY (sifProizv)); , PRIMARY KEY (sifLok));
791
Rješenje:
b) Pretpostavi li se da jedan uređaj ne može biti premješten više nego jedan
puta na dan, segment ER modela će se promijeniti na sljedeći način:
DAT_SMJ
N U odnosu na rješenje pod a), u
novom relacijskom modelu
LOK URED potrebno je izbaciti atribut sifLok
1 N iz relacije ured, te dodati novu
LokUredDatSmj relaciju lokUredDatSmj
793
Za mehaničare zaposlene u radionici evidentira se jmbg, prezime i ime.
Za svaki dolazak automobila u radionicu otvara se jedan Radni nalog na
kojem se evidentira automobil i datum dolaska automobila u radionicu. Isti
automobil može biti primljen u radionicu više puta (čak i istog dana), ali se
svaki put otvara novi Radni nalog. Radni nalog nema šifru. Radni nalog pri
otvaranju dobiva svoj redni broj, pri čemu svakog dana redni brojevi naloga
započinju ponovo s brojem jedan. Za isti datum ne postoje dva Radna
naloga s istim brojem.
Uz Radni nalog se evidentira koji mehaničari će obaviti koje vrste poslova
na automobilu. Poslove koji su zadani na Radnom nalogu može obaviti
jedan ili nekoliko mehaničara, ali jedan zadani posao će jedan mehaničar
obaviti sam od početka do kraja. Mehaničari na raznim Radnim nalozima
mogu obavljati različite vrste poslova. Mehaničar odmah po obavljenom
poslu na nekom automobilu evidentira koliko je vremena u minutama zaista
utrošio na obavljanje tog posla (to se vrijeme može razlikovati od
normativom zadanog vremena).
Nacrtati ER model i opisati entitete i veze. Sve sheme moraju zadovoljavati
3NF.
794
Rješenje: ModelAuto
N 1
AUTO MODEL
N
1
AutoRNalog ProizvModel
N 1
RNALOG PROIZV
MODEL
N sifProizv
1
RNalogMehVrpos MEHANICAR nazModel
godPrveProizv
N K = { sifProizv, nazModel }
RNALOG
VRPOSAO datumRNalog
rbrRNalog
Za vježbu opisati atribute i K = { datumRNalog, rbrRNalog }
ključeve preostalih entiteta i veza.
795
5. Model baze podataka za izložbe pasa
Za svaku se osobu evidentira jmbg, prezime i ime. Za psa se evidentira broj
markice koja identificira psa, ime psa, datum okota i osoba koja je vlasnik
tog psa. Pretpostavlja se da jedna osoba može imati više pasa, a pas
pripada samo jednoj osobi.
Neki vlasnici vode svoje pse na izložbe pasa. Za izložbu se evidentira šifra
izložbe koja ju jedinstveno identificira i datum izložbe. Za jednog psa na
jednoj izložbi treba evidentirati samo jednu ocjenu i osobu koja ga je
ocjenjivala. Ista osoba na jednoj izložbi može ocijeniti više pasa. Ista osoba
može ocjenjivati istog psa na više različitih izložbi. Za osobe koje ocjenjuju
pse također se evidentiraju jmbg, prezime i ime. Te osobe mogu
istovremeno biti i vlasnici pasa.
Nacrtati ER model i opisati entitete i veze. Sve sheme moraju zadovoljavati
3NF.
796
Rješenje: Ima
1
OSOBA
N
1
N
Ocijenio PAS
N
IZLOZBA
Ima Ocijenio
brMarkice brMarkice
jmbg sifIzlozba
K = { brMarkice } jmbg
ocjena
K = { sifIzlozba, brMarkice }
797
6. Zadan je ER model i pripadne sheme entiteta. Na slici su prikazani samo
vlastiti atributi veza.
Definirati sheme veza. Napisati SQL naredbe za kreiranje relacija
relacijskog modela. Tipove podataka ne treba navoditi. Naredbe moraju
sadržavati definicije integritetskih ograničenja.
0..1 N
P U T
y
1 P
x a
1
V R b
c
N d
PK = K1 = { a, b }
S K2 = { c }
R S T
e g i
f h j
PK = { e } PK = { g } k
PK = { i, j }
798
Rješenje: Sheme veza V U
a i
b j
e a
g b
x y
PK = K1 = { a, b, g } PK = { i, j }
K2 = { e, g }
Relacijski model
CREATE TABLE p ( CREATE TABLE t ( CREATE TABLE v (
a ... i ... a ...
, b ... , j ... , b ...
, c ... , k ... , e ...
, d ... , y ... , g ...
, PRIMARY KEY (a, b) , a ... , x ...
, UNIQUE (c)); , b ... , PRIMARY KEY (a, b, g)
, PRIMARY KEY (i, j) , UNIQUE (e, g)
CREATE TABLE r ( , FOREIGN KEY (a, b) , FOREIGN KEY (a, b)
e ... REFERENCES p (a, b)); REFERENCES p (a, b)
, f ... , FOREIGN KEY (e)
, PRIMARY KEY (e)); REFERENCES r (e)
, FOREIGN KEY (g)
CREATE TABLE s (
REFERENCES s (g));
g ...
, h ...
, PRIMARY KEY (g));
799
7. Zadan je ER model i pripadne sheme entiteta. Na slici su prikazani samo
vlastiti atributi veza.
Definirati sheme veza. Napisati SQL naredbe za kreiranje relacija
relacijskog modela. Tipove podataka ne treba navoditi. Naredbe moraju
sadržavati definicije integritetskih ograničenja.
0..1
N N
R U S V
x N z
y
R S
a d
b e
c PK = { d }
PK = { a, b }
800
Rješenje:
Sheme veza U V
a d
b d d1 Preimenovati jedan
d z
x PK = { d }
od atributa
y
PK = { a, b, d }
Relacijski model
CREATE TABLE r ( CREATE TABLE s (
a ... d ...
, b ... , d1 ...
, c ... , e ...
, PRIMARY KEY (a, b)); , z ...
, PRIMARY KEY (d)
CREATE TABLE u ( , FOREIGN KEY (d1) REFERENCES s (d));
a ...
, b ...
, d ...
, x ...
, y ...
, PRIMARY KEY (a, b, d)
, FOREIGN KEY (a, b) REFERENCES r (a, b)
, FOREIGN KEY (d) REFERENCES s (d));
801
16. Transakcije i obnova baze podataka u
slučaju razrušenja
Sustav za upravljanje bazama podataka
Transaction Management
Upravljač transakcijama (transaction manager, transaction
processing monitor – TP monitor ) - dio sustava koji brine o
obavljanju transakcija i osigurava zadovoljavanje svih
poznatih pravila integriteta.
Query Transaction Log
Processor Manager Manager
Buffer Recovery
Manager Manager
Data
Log
Djelomično Potvrđena
završena
Neispravna Neuspješno
završena
ACID
• Atomicity - nedjeljivost transakcije (atomarnost) - transakcija
se mora obaviti u cijelosti ili se uopće ne smije obaviti
• Consistency - konzistentnost - transakcijom baza podataka
prelazi iz jednog konzistentnog stanja u drugo konzistentno
stanje
• Isolation - izolacija - kada se paralelno obavljaju dvije ili
više transakcija, njihov učinak mora biti jednak kao da su se
obavljale jedna iza druge
• Durability - izdržljivost - ako je transakcija obavila svoj
posao, njezini efekti ne smiju biti izgubljeni ako se dogodi
kvar sustava, čak i u situaciji kada se kvar desi neposredno
nakon završetka transakcije
pogreške opreme
pogreške operacijskog sustava
pogreške sustava za upravljanje bazama podataka
Pogreške aplikacijskog programa
pogreške operatera
kolebanje izvora energije
požar, sabotaža, ...
Zašto?
• izmjena se prvo zapisuje u dnevnik, a tek se onda provodi!
• dnevnici izmjena omogućuju
poništavanje transakcija (važno radi svojstva nedjeljivosti)
ponovno obavljanje transakcija (važno radi svojstva
izdržljivosti)
...
IF pom_saldo < 0 THEN
ROLLBACK WORK;
ELSE
COMMIT WORK;
END IF
...
T1
T2
T3
T4
T5
vrijeme
kontrolna kvar
točka sustava
Transakcije T3 i T5 treba poništiti
Transakcije T2 i T4 treba ponovo obaviti Zašto?
Logika poništavanja
Učinak poništavanja, bez obzira koliko se puta obavljalo
mora biti isti kao da je operacija obavljena točno jednom!
undo (undo (undo ( …..undo(x)))) = undo (x)
Poništavanje = Obnova unatrag (backward recovery)
PREPORUKE:
čuvati najmanje tri posljednje arhive i pripadne dnevnike
dnevnik se ne nalazi na istom disku na kojem je baza podataka
što ako je dnevnik “pokvaren”?
FER - Zagreb Baze podataka 2011/2012 832
Ciklička izmjena logičkih dnevnika
Dnevnik može biti vrlo velik – započinje u času pokretanja arhiviranja i aktivan je
do sljedećeg arhiviranja
Dnevnici su ključni za obnovu - kako ih očuvati?
Čim prije treba njihov sadržaj pohraniti na „sigurno mjesto”
Dnevnik se dijeli na manje odsječke koji se ciklički izmjenjuju
On-line backup
U klasičnim sustavima arhiviranje se obavljalo na sustavu
na kojem nije bilo korisnika (npr. u petak na kraju radnog
vremena)
Današnji sustavi omogućuju da se arhiviranje obavlja
tijekom rada korisnika, odnosno izvođenja transakcija
Stanje baze podataka pohranjeno u arhivskoj kopiji je
konzistentno i odgovara stanju kakvo je bilo u bazi podataka
u času pokretanja arhiviranja.
Mjesec svibanj:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 01
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18
transakcije su korektne
T1 T2
• korektna transakcija prevodi bazu
pročitaj (x,p) pročitaj(x, p) podataka iz jednog konzistentnog u
p ← p + 100 p←p*2 drugo konzistentno stanje
zapiši (x, p) zapiši(x, p)
• ako se korektne transakcije
pročitaj (y, p) pročitaj(y, p) izvršavaju međusobno izolirano (to
p ← p + 100 p←p*2 znači jedna iza druge, serijski),
zapiši (y, p) zapiši(y, p) neće narušiti konzistentnost baze
podataka
T2 ili T2
t t
t1 t2 t1 t2
istodobno izvršavanje transakcija – jedan od mogućih redoslijeda
T1
T2
t
t1 t2
FER - Zagreb Baze podataka 2011/2012 846
Serijsko izvršavanje transakcija
Primjer:
a) redoslijed T1, T2 b) redoslijed T2, T1
T1 T2 x y T1 T2 x y
100 100 100 100
pročitaj(x, p) pročitaj(x, p)
p ← p + 100 p←p*2
zapiši (x, p) 200 zapiši (x, p) 200
pročitaj(y, p) pročitaj(y, p)
p ← p + 100 p←p*2
zapiši (y, p) 200 zapiši (y, p) 200
pročitaj(x, p) pročitaj(x, p)
p←p*2 p ← p + 100
zapiši (x, p) 400 zapiši (x, p) 300
pročitaj(y, p) pročitaj(y, p)
x=y? x=y?
p←p*2 p ← p + 100
zapiši (y, p) 400 zapiši (y, p) 300
primjer iz [Garcia-Molina]
FER - Zagreb Baze podataka 2011/2012 847
Istodobno izvršavanje transakcija
T1 T2 x y
100 100
pročitaj(x, p)
p ← p + 100
zapiši (x, p) 200
pročitaj(x, p)
p←p*2
zapiši (x, p) 400
pročitaj(y, p)
p←p*2
zapiši (y, p) 200
pročitaj(y, p)
x=y?
p ← p + 100
x≠y
pročitaj(y, p) 300
T1 T2 x y
100 100
pročitaj(x, p) Redoslijed izvršavanja nije serijski ali je
učinak izvršavanja jednak učinku serijskog
p ← p + 100
izvršavanja.
zapiši (x, p) 200
pročitaj(x, p) Svaki takav redoslijed ne narušava
p←p*2 konzistentnost baze podataka – za njega
zapiši (x, p) 400 se kaže da je serijalizabilan.
pročitaj(y, p)
p ← p + 100
zapiši (y, p) 200
pročitaj(y, p)
p←p*2 x=y?
zapiši (y, p) 400
Pročitaj broj
slobodnih mjesta Pročitaj broj
BR = 20 Let OU 660 slobodnih mjesta
10.05.2012. BR = 20
Rezerviraj 3 mjesta Slob. mjesta
BR = BR - 3 x= 17
Rezerviraj 1 mjesto
Let OU 660
10.05.2012. BR = BR - 1
Slob. mjesta
x=19
FER - Zagreb Baze podataka 2011/2012 851
Prljavo čitanje (Dirty read)
Transakcija 1
SELECT saldo FROM racun
WHERE brRacun = 2; Rezultat: 400.00
…
-- A ne mijenja saldo za Transakcija 2
-- racun s brojem 2 UPDATE racun
… SET saldo = saldo * 1.1
WHERE brRacun = 2
Transakcija 1
SELECT COUNT(*)
FROM racun Rezultat: 2
WHERE saldo > 100
. Transakcija 2
-- A ne mijenja racun INSERT INTO racun
. VALUES (3, 400.00)
SELECT COUNT(*)
FROM racun
WHERE saldo > 100 Rezultat: 3 !!!
Proces 2
pokušava
postaviti na Proces 1 postavio je na objekt ključ:
isti objekt
ključ: READ WRITE NO LOCK
READ
WRITE
UPDATE osoba
SET ime = “Anita” Za n-torku se postavlja ključ za pisanje
WHERE mbr= 1111;
…
Primjer:
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
stupanj garancija
Istodobnosti konzistentnosti
868
REPEATABLE READ
rezultat:
1111 Novak Ivan
SELECT * FROM osoba;
2345 Kolar Iva
3456 Horvat Krešo
FER - Zagreb Baze podataka 2011/2012 872
Primjer: READ COMITTED – sprječavanje prljavog čitanja
korisnik
novak
Objekti
• relacija (tablica, table)
• atribut (stupac tablice, column)
• virtualna relacija (pogled, view)
• baza podataka
horvat
CREATE TABLE zupanija ( može jer ima RESOURCE dozvolu
sifZup INTEGER
, nazZup CHAR(30)
, PRIMARY KEY(sifZup));
GRANT SELECT, INSERT, UPDATE može jer je vlasnik relacije zupanija
ON zupanija TO novak;
novak
SELECT * FROM zupanija; može jer ima barem CONNECT dozvolu (bez
INSERT INTO zupanija ...; CONNECT dozvole ne bi mogao uspostaviti
UPDATE zupanija ...; SQL-sjednicu), te dozvole koje je dobio od
vlasnika relacije zupanija
bpadmin
GRANT CONNECT TO kolar; može jer ima DBA dozvolu
horvat
GRANT SELECT može jer je vlasnik relacije zupanija
ON zupanija TO kolar;
kolar
može jer ima barem CONNECT dozvolu, te dozvolu
SELECT * FROM zupanija; za obavljanje operacije SELECT nad relacijom
zupanija
FER - Zagreb Baze podataka 2011/2012 893
Primjer 2 (nastavak):
novak
CREATE TABLE mjesto ...; ne može jer nema RESOURCE dozvolu
horvat
GRANT RESOURCE TO novak; ne može jer nema DBA dozvolu
bpadmin
GRANT DBA TO horvat; može jer ima DBA dozvolu
horvat
GRANT RESOURCE TO novak; može jer ima DBA dozvolu
novak
ne može jer nema dozvolu za kreiranje stranog
CREATE TABLE mjesto (... ključa koji se poziva na primarni ključ relacije
REFERENCES zupanija ...);
zupanija (mogao bi kreirati relaciju bez stranog
ključa jer ima RESOURCE dozvolu)
horvat
GRANT CONNECT TO PUBLIC; može jer ima DBA dozvolu
sada svaki korisnik (sadašnji ili budući) koji uspije ovjeriti svoju autentičnost
može uspostaviti SQL-sjednicu s bazom podataka studBaza
novak
GRANT SELECT može jer je vlasnik relacije mjesto
ON mjesto TO PUBLIC;
sada svaki korisnik (sadašnji ili budući) koji uspostavi SQL-sjednicu s bazom
podataka (uz prethodnu ovjeru autentičnosti) može obavljati operaciju
SELECT nad relacijom mjesto
FER - Zagreb Baze podataka 2011/2012 895
Dodjeljivanje prenosivih dozvola
ukoliko se korisniku dozvola dodijeli uz navođenje opcije WITH GRANT
OPTION, korisnik će moći dodjeljivati tu istu dozvolu ostalim korisnicima
(unatoč tome što nije vlasnik objekta)
Primjer:
CREATE TABLE ispit (...);
korisnik1 GRANT SELECT ON ispit TO korisnik2 WITH GRANT OPTION;
GRANT SELECT ON ispit TO korisnik3 WITH GRANT OPTION;
WGO WGO
korisnik2 korisnik4 korisnik6
vlasnik
korisnik1 korisnik5
WGO
korisnik3 WGO: WITH GRANT OPTION
FER - Zagreb Baze podataka 2011/2012 896
Ukidanje dozvola
novak
GRANT SELECT, UPDATE ON mjesto TO kolar;
može obaviti korisnik novak jer je novak korisnik koji je dozvolu dodijelio
WGO WGO
korisnik2 korisnik4 korisnik6
korisnik1 korisnik5
WGO
korisnik3
obavljanjem naredbe dozvolu gube korisnik2, korisnik4 i korisnik6
korisnik5 će izgubiti dozvolu koju je dobio od korisnika2, ali će zadržati
dozvolu koju je dobio od korisnika1
ukoliko se opcija CASCADE ne navede, naredba REVOKE djeluje na
jednak način kao kada je opcija CASCADE navedena
FER - Zagreb Baze podataka 2011/2012 898
Ukidanje dozvola dodijeljenih temeljem WITH GRANT OPTION
korisnik1 korisnik5
WGO
korisnik3
korisnik1 REVOKE SELECT ON ispit FROM korisnik2 RESTRICT;
SUBP odbija obaviti naredbu (dojavljuje pogrešku)
korisnik2 REVOKE SELECT ON ispit FROM korisnik4 RESTRICT;
SUBP odbija obaviti naredbu (dojavljuje pogrešku)
sada i dekan i nastavnici mogu koristiti isto ime objekta kada postavljaju
upite o ispitima
SELECT * FROM ispitiZaSve WHERE ocj = 1;
lokalna za ISVU
T1: - evidentiraj ISVU globalna
ocjenu na ispitu
T3: - provjeri jesu li položeni svi ispiti
- provjeri jesu li vraćene sve knjige
lokalna za Ferlib
- ispiši diplomu
T2: - evidentiraj
posudbu knjige Ferlib
Shema fragmentacije
• podjela baze podataka u disjunktni skup fragmenata koji obuhvaćaju sve
podatke u bazi podataka uz zadovoljenje pravila da se baza podataka
može rekonstruirati iz tih fragmenata bez gubitka informacije
• relacije mogu biti razdijeljene u fragmente horizontalno ili vertikalno (ili
horizontalno i vertikalno)
Shema alokacije
• shema kojom se opisuje koji je fragment pridružen kojem čvoru
distribuiranog sustava
∪ K A B
K A B K A K B
Hibridna
r = r1 ∪ r2
hor. hor.
r1 = r11 >< r12 r2 = r21 >< r22
S2 S1
• student1
• student2
• fakultet1
• fakultet1
S3
• student3
• fakultet1
Transparentnost fragmentacije:
korisnici (ili aplikacije) ne trebaju voditi računa o načinu na koji je relacija
fragmentirana
Transparentnost lokacije:
korisnici (ili aplikacije) ne trebaju znati u kojem je čvoru alociran koji
fragment. Svakom podatku moraju moći pristupiti ukoliko im je poznat
identifikator podatka
Transparentnost replikacije:
korisnici (ili aplikacije) ne trebaju voditi računa o postojanju kopija
fragmenata (replikama)
919
Globalne transakcije, subtransakcije i lokalne transakcije
1 2 3
Transakcija T1 se preslikava u skup subtransakcija: T1 , T1 , T1
Svaka od subtransakcija sadrži operacije koje se obavljaju u pripadnom čvoru
1
T1
2
j T1
Ti subtransakcija globalne T1 S1
oznake: transakcije Ti koja se
izvršava u čvoru Sj 3
T1
S2
S3
up
out
FER - Zagreb Baze podataka 2011/2012 926
NoSQL baze podataka
ACID BASE
Jaka dosljednost Slaba dosljednost (zastarjeli podaci)
Izolacija Prvo dostupnost
Dostupnost? Prihvatljivi približni odgovori
Pesimistično (konzervativno) Agresivno (optimistično)
… …
nije ili-ili
{
"_id": ObjectID("4efa8d2b7d284dad101e4bc9"),
"Ime" : "Ivan",
"Prezime“ : "Car",
MongoDB: "DatRodj" : "11.11.1971."
kolekcija },
{
"_id" : ObjectID("4efa8d2b7d284dad101e4bc7"),
"Ime" : "Iva",
"Prezime" : "Kralj",
"MjestoRodj" : "Šibenik"
}
01 poznanik 15
Ana
Ivo
prijatelj
Skladišta
podataka
Skladišta Skladišta, 1
SUSTAVI, 1
podataka
podataka, 1 PODATAKA, 4
http://blog.nahurst.com/visual-guide-to-nosql-systems
Model podataka:
• Relacijski
C • Ključ-vrijednost
• Stupčasti
• Dokumenti
A Dynamo Cassandra
P
Voldemort SimpleDB
Kyoto Cabinet CouchDB
KAI Riak
FER - Zagreb Baze podataka 2011/2012 939
NoSQL, zaključno: