Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
Ekonomski fakultet u Osijeku
Osijek, Gajev trg 7
Baze podataka i poslovni procesi
PRAKTIKUM ZA ŠKOLSKU GODINU 2014/2015
Student:_____________________________
Indeks br.: ____________________________
Smjer: ____________________________
Predano: ____________________________
1
UPUTE ZA UPOTREBU PRAKTIKUMA
Ovaj je praktikum namijenjen studentima koji preferiraju postići:
osrednju razinu znanja iz područja modeliranja relacijskih baza podataka,
upoznati osnove logike i osnove relacijske algebre,
uvodno se upoznati sa sustavom za upravljanje bazama podataka SQLite, te
usvojiti osnove SQL-a.
Tko treba napraviti zadaće iz praktikuma? Primarno praktikum je namijenjen svim
studentima koji slušaju predmet „Baze podataka i poslovni procesi“. Rješenja zadataka iz
ovog praktikuma su dužni predati svi studenti. Na svaki list praktikuma, koji sadrži
rješenja zadataka, student se je dužan potpisati.
Kome i do kada treba predati praktikum? Praktikum treba predati u dogovorenom terminu
s predmetnim nastavnikom i asistenticom. Asistentica i demonstratorica će biti organizirane
da u dogovorenom terminu preuzmu sve praktikume.
Vrednovanje praktikuma: Bez predaje riješenog praktikuma nije moguće pristupiti ispitu.
Studentima koji na vrijeme predaju praktikum, imaju sve zadatke riješene, te nakon što se
pregledom utvrdi da imaju većinu (preko 50%) samostalno i točno riješenih zadataka,
praktikum se priznaje. Položene vježbe, te riješen i priznat praktikum su uz odgovarajući broj
dolazaka na nastavu (s obzirom na status studenta „redovni“ ili „izvanredni“), uvjet za upis
ocjene iz kolegija. Studenti koji su ispod-polovično uspješno riješili praktikum upućuju se na
ponovno rješavanje praktikuma.
2
1. Uvod u modeliranje relacijskih baza podataka
Problemu modeliranja relacijske baze podataka moguće je pristupiti na više načina. Jedan od
načina je posredno, kreiranjem ER modela, te konverzijom ER modela u relacijski model
sukladno načelima pretvaranja ER modela u relacijski, odnosno R model. Ovaj postupak je
vrlo efikasan jer omogućava dobivanje relacijskog modela s niskom razinom nekontrolirane
redundancije, odnosno izgradnju relacijskog modela s visokom normalnom formom (NF).
Loša strana ovog postupka je to što zahtijeva dobro poznavanje ER modeliranja, te dobro
poznavanje pravila transformacije ER u R model. Nadalje, ovaj pristup zahtijeva više
vremena, a s obzirom da se ER model obično crta manualno, nedostatak je i potreba kreiranja
modela na papiru. U praksi se danas rijetko koristi ovaj pristup modeliranju relacijskih baza
podataka.
Drugi način kreiranja modela relacijske baze podataka kreće od komponiranih atributa u
početnu integralnu tablicu iz koje se postupkom vertikalne dekompozicije u okviru postupka
normalizacije kreira konačan normaliziran relacijski model baze podataka. U ovom se
postupku iz početne tablice dekompozicijom formiraju njoj slijedne tablice bez gubitka
zavisnosti i bez gubitka informacija. Postupak se dekompozicije ponavlja sve dok se ne dobiju
relacije u željenoj normalnoj formi. Obično se kod relacija s jednostavnim ključem
normalizacija dekompozicijom obavlja do treće normalne forme, jer dekompozicija u treću
normalnu formu podrazumijeva automatski i dekompoziciju u najvišu petu normalnu formu.
Kod složenih ključeva dekompozicija bi se trebala nastaviti kroz BCNF, te 4NF i 5NF, no u
praksi uobičajeno to se ne čini. Nakon postizavanja odgovarajuće normalne forme,
reverzibilnim postupkom, odnosno postupkom prirodnog pridruživanja potrebno je provjeriti
mogući gubitak informacije, odnosno pouzdanost provedene dekompozicije. Radi se o
zahtjevnom postupku koji objedinjava veći broj koraka, stoga se i ovaj postupak obično ne
koristi u pragmatičnim uvjetima.
Treći način je postupak vertikalne normalizacije sintezom. Ova metoda polazi od temeljnog
svojstva relacijskog modela, a to je da je relacijski model atributski model i da se među
atributima, odnosno entitetima koji nastaju kompozicijom i agregacijom uspostavljaju
funkcijske veze. Temeljem poznavanja algoritama za provođenje kreiranja relacijskog modela
baze podataka u odgovarajućoj normalnoj formi, moguće je pristupiti kreiranju
normaliziranog modela relacijske baze podataka u odgovarajućoj normalnoj formi. Iako je
ova metoda modeliranja vrlo popularna kod onih koji se bave modeliranjem relacijskih baza
podataka, ona zahtijeva dobro poznavanje relacijskog modela, te veliko iskustvo u
modeliranju baza podataka, stoga nije primjenjiva na početničkoj razini.
U praksi se najčešće pristupa intuitivno modeliranju jednostavnijih modela baza podataka,
posebno kada to rade programeri za potrebe razvoja manje složenih programskih rješenja.
Ovaj oblik modeliranja sadrži neke elemente relacijskog modeliranja baze podataka sintezom,
te neke elemente vertikalne normalizacije dekompozicijom. Praksa je mnoge sustave
3
evidencije podataka iskustveno organizirala po načelima relacijskog modeliranja, stoga se
modeliranje takvih sustava svodi na korektnu transformaciju manualno ustrojene evidencije u
odgovarajući relacijski model baze podataka. Većina evidencija koje se vode u tabličnom
obliku, može se jednostavno transformirati u odgovarajući relacijski model. Eventualne
uočene anomalije u tako dobivenom modelu potrebno je postupkom dekompozicije
eliminirati, te se na taj način dobiva model relacijske baze podataka u željenoj normalnoj
formi. S obzirom da je ovaj oblik modeliranja najrasprostranjeniji, posebice među
početnicima, te s obzirom da ga je najlakše svladati, on će biti u ovom praktikumu ukratko
objašnjen. Treba imati na umu da je ovo uvod u modeliranje relacijskih baza podataka, stoga
za ozbiljan pristup modeliranju složenih baza podataka, u perspektivi treba savladati jedan od
prethodno navedenih postupaka modeliranja relacijskih baza podataka.
1.1. Intuitivan pristup modeliranju relacijskih baza podataka
Prije početka modeliranja potrebno je minimalno poznavati sljedeće pojmove:
Tablica-relacija-entitet
Atributi, vrste atributa, vrste podataka u SQL-u
Primarni i vanjski ključ
Osnove SQL-a.
Često u praksi ne postoje gotova normalizirana tablična rješenja u evidentiranju objekata
realnog svijeta, stoga je prije početka implementacije modela relacijske baze podataka kroz
sustav za upravljanje relacijskim bazama podataka (npr. MySQL, SQLite) potrebno načiniti
pripremne radnje. Te pripremne radnje obuhvaćaju sljedeće korake:
1. Dobro se upoznati s objektom realnog svijeta za koji se kreira model. Da bi se to
postiglo dobro je pokušati načiniti tablice na papiru s kojima bi se ručno vodila
evidencija o objektu realnog svijeta i događajima koji su vezani za taj objekt. Također
korisno je i pokušati unijeti nekoliko elemenata strukture objekta, te nekoliko
događaja vezanih za objekt u tablice na papiru kako bi se utvrdilo jesu li potrebni
podaci obuhvaćeni uspostavljenom ručnom evidencijom. Model u vidu tablica treba
iterativno popravljati dok se ne dobije zadovoljavajuće rješenje.
2. Tako dobivene tablice predstavljaju entitete, a njihova zaglavlja atribute. No, sljedeći
korak je analizirati atribute, te utvrditi jesu li takvi atributi prihvatljivi za direktnu
transformaciju u virtualni model baze podataka objekta realnog svijeta. Ako nisu,
potrebno je načiniti odgovarajuću transformaciju atributa njihovim razdjeljivanjem ili
objedinjavanjem. Npr. ako u jednoj koloni stoji naziv kolone: JMBG ili OIB, tu
kolonu treba razdijeliti u dvije kolone, ako pak postoje posebne kolone za mjesec, dan
i godinu, onda te tri kolone treba objediniti u jednu kolonu i slično. Također sve
istovjetne atribute u različitim tablicama ako su suvišni treba izbaciti iz modela, a ako
čine osnovu za kasnija međusobna povezivanja tablica, dobro je preimenovati, tako da
imaju u svim tablicama iste nazive (npr. RADNIK vs. DJELATNIK). Kolone
(atribute) u načelu treba prilagoditi tipovima podataka koji se koriste u SQL-u.
4
3. Pokušati, ako postoji potreba, razdijeliti tablice na one koje opisuju strukturu od onih
koji opisuju događaje, odnosno po potrebi izdvojiti u nove tablice atribute koji tijekom
vremena rijetko mijenjaju svoju vrijednost (a ako ih i mijenjaju prethodno stanje ne
treba ostati zabilježeno), od tablica s atributima koji poprimaju više vrijednosti jedne
pojave tijekom vremena. Ova druga skupina atributa, odnosno njihove tablice, obično
se veže uz protok vremena stoga se u njima bilježi protok vremena (datum, eventualno
točno vrijeme). Zato u takvim tablicama obično egzistira vremenski atribut, a takve
tablice se nazivaju dnevnicima. Radi očuvanja veza tablica strukture s tablicama
dnevnika, tablice opisa strukture dobivaju šifre za elemente strukture, a u tablicama
dnevnika se stupci koji su opisivali strukturu zamjenjuju odgovarajućim šiframa
elemenata strukture.
4. Sagledati sve na papiru kreirane tablice i vidjeti u tablicama postoji li mogućnost
šifriranja pojedinih atributa. Svaki podatak koji se često pri unosu ponavlja ili ga je
moguće pojednostavljeno unijeti putem šifre, potrebno je zamijeniti šifrom. To se čini
na način da se u izvornoj tablici izvorni opisni atribut zamjeni atributom koji će
predstavljati šifru, te se kreira pomoćna tablica koja će sadržavati popis šifri i popisu
dodijeljen opis šifri. Unos putem šifri je pouzdaniji, brži i jednostavniji. Primjer
potrebe šifriranja je atribut „MJESTO“. U ovom slučaju izvorni atribut MJESTO u
izvornoj tablici biti će zamijenjen atributom „POŠTANSKI BROJ“, a u nova tablica -
pomoćna tablica – šifarnik – pod nazivom MJESTO sadržavati će atribute
POŠTANSKI BROJ i NAZIV MJESTA. Mjesto će se temeljem ovako formiranog
šifarnika unositi brže, manja će biti mogućnost pogreške, kao i mogućnost
nedosljednosti u unosu podataka. Prilikom ručnog unosa u jednoj situaciji se može
unijeti podatak za prvotni atribut MJESTO: „Slavonski brod“, a drugi put „S. Brod“.
Ovakav nekonzistentan unos onemogućit će npr. da se jednostavno, pomoću upita
dozna koje su osobe iz Slavonskog Broda. Često tablice šifarnika odgovaraju
tablicama strukture objekta. Tada treba objediniti u zajedničku tablicu šifarnik i opis
strukture objekta realnog svijeta. Primjer za takav slučaj je tablica OSNOVNO
SREDSTVO.
5. Kada su kreirane sve tablice - entiteti, te odgovarajući stupci – atributi, potrebno je u
tablicama definirati primarne ključeve. Treba analizirati koji bi atributi mogli poslužiti
kao primarni ključevi u pojedinim tablicama - relacijama. Idealno je sa stajališta
relacijskog modeliranja baze podataka koristiti, gdje god je to moguće, jedan atribut za
primarni ključ. Takav pristup pojednostavljuje obradu podataka sustavu za upravljanje
bazama podataka, ali i pojednostavljuje problem vertikalne normalizacije u relacijskoj
bazi podataka. Ako se radi o tablicama koje opisuju strukturu, kao primarni ključ
koristi se atribut koji posjeduje nepromjenjivo jedinstveno svojstvo. Ako se radi npr. o
polaznicima vozačkog tečaja, tada ime i prezime osobe nije dovoljno unikatno
svojstvo, pa se za identifikaciju, odnosno kao primarni ključ koriste šifre kao što su
JMBG ili OIB. Šifra kao primarni ključ koristi se i kod tablica šifarnika. Nešto
drugačija je situacija kod tablica dnevnika. S obzirom da se u takvim tablicama često
pojavljuje problem izbora odgovarajućeg primarnog ključa, ovaj problem se u praksi
često rješava uvođenjem dodatnog atributa AUTOBROJ koji broji događaje i kao
takav je unikatan za svaku promjenu stanja, te predstavlja idealni primarni ključ u
5
tablicama dnevnika. Dodavanjem primarnih ključeva tablice se u potpunosti
transformiraju u relacije buduće relacijske baze podataka.
6. Nakon što su definirane sve tablice – entiteti, te njima pripadajući atributi (stupci), kao
i nakon definiranja svih primarnih ključeva, potrebno je uspostaviti veze između
tablica. Idealan je za razumijevanje mogućeg načina povezivanja tablica (relacija)
model zvijezde, koji kod relacijskog modela baze podataka podrazumijeva da se u
središte postavi tablica (tablice) dnevnika. Oko njih se poslažu tablice šifarnika, te
tablice strukture. Tablice se postavljaju u međusobno hijerarhijski odnos, odnosno u
odnos nadređeni i podređeni. U načelu jedna je ishodišna (početna – root) tablica, a
sve druge se prema njoj postavljaju kao podređene na jednoj ili više razina
podređenosti. Nakon toga se traže moguće veze između tablica, odnosno relacija.
Relacije šifarnika, odnosno atributi šifri se povezuju s odgovarajućim šiframa u
središnjoj tablici. Tada se između šifre u tablici šifri i šifre u središnjoj tablici
uspostavlja odnos 1:više, odnosno šifra se u tablici šifri zbog primarnog ključa
pojavljuje samo jedanput, dok se ta ista šifra u središnjoj tablici može pojaviti niti
jedanput, jedanput ili više puta. Ovakva veza je hijerarhijska i ako je model dobro
osmišljen u pravilu će uglavnom sve veze biti hijerarhijske. Treba uočiti kako
povezivanje koje se ostvaruje na ovaj način podržava kontroliranu redundanciju jer se
ista šifra može kontrolirano naći na više mjesta. Ostale, odnosno nekontrolirane
redundancije nisu poželjne u modelu relacijske baze podataka. Kako bi veza bila jasna
potrebno je linijom povezati atribute koji se vezom povezuju u centralnoj i vanjskim
tablicama. Ispravan model će imati uspostavljene veze među svim tablicama, s tim da
se između dvije tablice uspostavlja samo jedna veza. To ne znači i da će svaka tablica
biti povezana sa svakom, već će se vezama, kako je već navedeno, u pravilu
uspostaviti hijerarhija tablica. Već je od prije šifra u tablici šifri označena kao primarni
ključ i uz takav ključ, s obzirom na sudjelovanje u vezi, treba staviti oznaku 1. Šifra u
središnjoj (izvorišnoj) tablici postaje vanjski ključ i uz nju treba staviti oznaku za više
(M - eng. Many). Na istim načelima treba uspostaviti veze između središnje tablice
(relacije) i tablica (relacija) strukture, kao i između tablica (relacija) strukture i tablica
(relacija) šifri. Kada se uspostave i definiraju sve veze zaokružene su radnje na
kreiranju modela relacijske baze podataka za određeni segment realnog svijeta,
odnosno za određeni objekt realnog svijeta.
7. Nakon definiranja relacija i atributa, potrebno je definirati tipove atributa. U
primjerima koristit će se sljedeći tipovi podataka:
VARCHAR(n) – znakovna varijabla (n – broj znakova),
TEXT – znakovna varijabla,
INTEGER – cjelobrojne vrijednosti – koristi se i za auto-broj,
TIMESTAMP – datumska/vremenska varijabla i
NUMERIC(n,m) – numerička varijabla (n – broj znamenki, m – od toga
decimalnih mjesta).
Pored navedenih u SQL-u se koriste i drugi tipovi podataka, no zbog pojednostavljenja
oni u primjerima neće biti korišteni. Navedeni se tipovi podataka najčešće koriste u
praksi.
6
8. Sljedeći korak u kreiranju modela baze podataka je zapisivanje samog modela baze
podataka prema sintaksi za zapisivanje relacijske sheme. U relacijskoj shemi baze
podataka entiteti se zapisuju velikim slovima. Prema tome, potrebno je imenovati
definirane relacije modela, a ta imena u biti su nazivi entiteta modela. Entiteti se
zapisuju u obliku imenice u jednini. Toj imenici se eventualno pridodaje pridjev koji
pomaže objasniti imenicu (npr. entitet BROD dobiva pridjev i nastaje entitet
PUTNIČKI BROD). Nakon entiteta u zagradi se navode velikim slovima zapisani
atributi koji su međusobno odvojeni velikim slovima. Ako se atribut sastoji od više
riječi, tada je korisno umjesto razmaknice između riječi koristiti donju crticu (npr.
PREZIME I IME zapisati PREZIME_I_IME). Na isti, prethodno opisan način može se
formirati i složeni naziv entiteta. Atribut odabran za primarni ključ se podvlači.
Entiteti koji su vanjski ključevi zapisuju se u obliku:
POVEZANI_ENTITET.ATRIBUT
Moguće je kroz relacijsku shemu zapisati i tipove atributa. Tipovi se od naziva atributa
odvajaju dvotočkom (npr. ŠIFRA_ZANIMANJA:Integer).
.
Primjer kreiranja relacijskog modela baze podataka za evidenciju radnog vremena radnika
Pretpostavka da je potrebno načiniti jednostavnu bazu podataka kao temelj za izgradnju
jednostavne poslovne programske aplikacije koja će bilježiti dolazak radnika na posao i
odlazak radnika s posla. Prema uputama prvotno je skicirana na papiru evidencija koja bi se u
ovom slučaju vodila manualno, na papiru.
1. Korak. Prikaz evidencije na papiru.
Prezime i ime Datum Vrijeme dolaska
Vrijeme odlaska
Razlog izlaska
Kovač Petar 1.7.2011 7:00 15:00
Žderić Mirko 1.7.2011 7:00 11:00 Sastanak
Vekić Anka 1.7.2011 7:00 15:00
Butko Želimir 1.7.2011 7:00 15:00
Žderić Mirko 1.7.2011 12:20 15:00
Kovač Petar 2.7.2011 7:00 15:00
Žderić Mirko 2.7.2011 7:00 11:00
Vekić Anka 2.7.2011 7:00 15:00
Za evidenciju dolaska na posao i odlaska s posla načinjena je tablica koja ima pet stupaca,
odnosno pet atributa. Kako bi se testirala ispravnost modela upisano je osam redova, odnosno
n-torki u početnu tablicu.
7
2. Korak. Priprema i prilagodba atributa relacijskom modelu podataka
PREZIME I IME DOLAZAK ODLAZAK RAZLOG ODLASKA
Kovač Petar 2011.7.1 7:00:00 2011.7.1 15:00:00
Žderić Mirko 2011.7.1 7:00:00 2011.7.1 11:00:00 Sastanak
Vekić Anka 2011.7.1 7:00:00 2011.7.1 15:00:00
Butko Želimir 2011.7.1 7:00:00 2011.7.1 15:00:00
Žderić Mirko 2011.7.1 12:20:00 2011.7.1 15:00:00
Kovač Petar 2011.7.1 7:00:00 2011.7.1 15:00:00
Žderić Mirko 2011.7.1 7:00:00 2011.7.1 11:00:00
Vekić Anka 2011.7.1 7:00:00 2011.7.1 15:00:00
S obzirom da se u relacijskom modelu koristi zajednička varijabla za datum i vrijeme,
rekonstruirana je početna tablica na način da su stupci Datum i Vrijeme dolaska spojeni u
atribut DOLAZAK, te stupci Datum i Vrijeme odlaska u atribut ODLAZAK.
3. Korak. Razdjeljivanje početne tablice i izdvajanje tablica strukture u posebne tablice
DJELATNIK DOLAZAK ODLAZAK RAZLOG ODLASKA
100 2011.7.1 7:00:00 2011.7.1 15:00:00
120 2011.7.1 7:00:00 2011.7.1 11:00:00 Sastanak
130 2011.7.1 7:00:00 2011.7.1 15:00:00
144 2011.7.1 7:00:00 2011.7.1 15:00:00
120 2011.7.1 12:20:00 2011.7.1 15:00:00
100 2011.7.1 7:00:00 2011.7.1 15:00:00
120 2011.7.1 7:00:00 2011.7.1 11:00:00
130 2011.7.1 7:00:00 2011.7.1 15:00:00
DJELATNIK PREZIME I IME
100 Kovač Petar
120 Žderić Mirko
130 Vekić Anka
144 Butko Želimir
Djelatnici predstavljaju elemente strukture, stoga ih je zgodno izdvojiti u posebnu tablicu.
Kako je iz prethodnog prikaza vidljivo, uvedene su šifre za elemente strukture koje čine
poveznicu između dvije tablice. Ovo izdvajanje se inače čini i kod postupka normalizacije
dekompozicijom.
8
4. Korak. Izdvajanje stupaca koji se mogu šifrirati (šifarnika) iz tablice dnevnika
DJELATNIK DOLAZAK ODLAZAK ŠIFRA RAZLOGA
100 2011.7.1 7:00:00 2011.7.1 15:00:00
120 2011.7.1 7:00:00 2011.7.1 11:00:00 1
130 2011.7.1 7:00:00 2011.7.1 15:00:00
144 2011.7.1 7:00:00 2011.7.1 15:00:00
120 2011.7.1 12:20:00 2011.7.1 15:00:00
100 2011.7.1 7:00:00 2011.7.1 15:00:00
120 2011.7.1 7:00:00 2011.7.1 11:00:00
130 2011.7.1 7:00:00 2011.7.1 15:00:00
ŠIFRA RAZLOGA RAZLOG ODLASKA
1 Sastanak
2 Pauza
3 Bolest
4 Osobni razlozi
Stupac pogodan za šifriranje u ovom primjeru je Razlog odlaska s posla. Naime, u
eksploataciji dnevnika (tablica evidencije dolazaka na posao) ove buduće relacijske baze
podataka moguće su nekonzistentnosti u unosu podataka o razlozima odlaska s posla. Npr.
moguće je jednom upisati za razlog Pauza, a drugi puta Stanka. Takvi slučajevi potencijalno
umanjuju analitičku vrijednost baze podataka. Uvođenjem se šifre u tablici dnevnika za
Razlog odlaska s posla i tablice šifarnika razloga odlaska s posla uvodi konzistentnost
informacije o razlozima odlaska s posla. Kroz tablicu se šifarnika razloga odlaska s posla
definira domena, odnosno skup svih vrijednosti koje u ovom slučaju razlog odlaska može
poprimiti. Time podaci u tablici dnevnika postaju konzistentni.
DJELATNIK PREZIME I IME
100 Kovač Petar
120 Žderić Mirko
130 Vekić Anka
144 Butko Želimir
9
5. Korak. Definiranje primarnih ključeva
AUTOBROJ DJELATNIK DOLAZAK ODLAZAK ŠIFRA RAZLOGA
1 100 2011.7.1 7:00:00 2011.7.1 15:00:00
2 120 2011.7.1 7:00:00 2011.7.1 11:00:00 1
3 130 2011.7.1 7:00:00 2011.7.1 15:00:00
4 144 2011.7.1 7:00:00 2011.7.1 15:00:00
5 120 2011.7.1 12:20:00 2011.7.1 15:00:00
6 100 2011.7.1 7:00:00 2011.7.1 15:00:00
7 120 2011.7.1 7:00:00 2011.7.1 11:00:00
8 130 2011.7.1 7:00:00 2011.7.1 15:00:00
ŠIFRA RAZLOGA RAZLOG ODLASKA
1 Sastanak
2 Pauza
3 Bolest
4 Osobni razlozi
U tablicama za primarne ključeve izabrani su i podvučeni atributi koji su unikatni i
jednoznačni a u tablicama s njima povezane atribute. Izbornom primarnog ključa, praktično
su tablice transformirane u relacije. Kod tablice dnevnika nije postojao izdvojen atribut koji je
mogao unikatno i jednoznačno odrediti svaki događaj, stoga je uveden novi atribut koji je
nazvan AUTOBROJ. Ovaj atribut osigurava konzistentnost zapisa u tablici i osigurava
transformaciju tablice dnevnika u relaciju.
DJELATNIK PREZIME I IME
100 Kovač Petar
120 Žderić Mirko
130 Vekić Anka
144 Butko Želimir
10
6. Korak. Uspostavljanje veza između relacija
1
M M
1
Kao što je slikom prikazano, u središta je postavljena, sukladno modelu zvijezde, relacija
dnevnika, a oko nje ostale relacije. Među vanjskim i primarnim ključevima (šiframa)
uspostavljena je hijerarhijska veza. S obzirom da se radi o jednostavnom modelu ovdje je
prikazana hijerarhija na dvije razine (1:M).
7. Korak. Definiranje tipova atributa.
AUTOBROJ – Integer (cjelobrojna vrijednost)
DJELATNIK – Integer (cjelobrojna vrijednost)
DOLAZAK – TimeStamp (datumska-vremenska vrijednost)
ODLAZAK – TimeStamp (datumska-vremenska vrijednost)
ŠIFRA RAZLOGA – Integer (cjelobrojna vrijednost)
PREZIME I IME – VarChar(35) (tekstualni sadržaj)
RAZLOG ODLASKA – VarChar(15) (tekstualni sadržaj)
Prethodnim popisom definirani su tipovi atributa. Cjelobrojna vrijednost se obvezno koristi za
primarne ključeve koji imaju svojstvo samo-uvećavanja – eng. AutoNumber. Takav primarni
ključ je i atribut AUTOBROJ u tablici dnevnika. U ovom primjeru je odabrana cjelobrojna
DJELATNIK PREZIME I IME
100 Kovač Petar
120 Žderić Mirko
130 Vekić Anka
144 Butko Želimir
AUTOBROJ DJELATNIK DOLAZAK ODLAZAK ŠIFRA RAZLOGA
1 100 2011.7.1 7:00:00 2011.7.1 15:00:00
2 120 2011.7.1 7:00:00 2011.7.1 11:00:00 1
3 130 2011.7.1 7:00:00 2011.7.1 15:00:00
4 144 2011.7.1 7:00:00 2011.7.1 15:00:00
5 120 2011.7.1 12:20:00 2011.7.1 15:00:00
6 100 2011.7.1 7:00:00 2011.7.1 15:00:00
7 120 2011.7.1 7:00:00 2011.7.1 11:00:00
8 130 2011.7.1 7:00:00 2011.7.1 15:00:00
ŠIFRA RAZLOGA
RAZLOG ODLASKA
1 Sastanak
2 Pauza
3 Bolest
4 Osobni razlozi
11
vrijednost i za atribute obiju šifara. U praksi se zbog mogućih vodećih nula (npr. 001205) za
šifre koristi i VarChar tip podataka atributa. Pretpostavka je da u ovim šiframa neće biti
vodećih nula, stoga je Integer, odnosno cjelobrojna vrijednost, optimalan izbor. Kod VarChar
tipova vrijednosti atributa, odnosno tekstualnih sadržaja, potrebno je definirati maksimalan
broj mjesta koji sadržaj jednog polja relacije može poprimiti. Iskustveno se pokazalo da je za
prezimena i imena domicilnog stanovništva u Republici Hrvatskoj dovoljno 35 mjesta. Kod
razloga odlaska procijenjena je potreba za 15 mjesta (znakova).
8. Korak. Zapisivanje modela u vidu relacijskih shema
RADNO_VRIJEME ( AUTOBROJ, DJELATNIK.DJELATNIK, DOLAZAK,
ODLAZAK, ODLAZAK.ŠIFRA_RAZLOGA)
DJELATNIK ( DJELATNIK, PREZIME_I_IME)
ODLAZAK (ŠIFRA_RAZLOGA, RAZLOG_ODLASKA)
ili
RADNO_VRIJEME ( AUTOBROJ: Integer, DJELATNIK.DJELATNIK: Integer,
DOLAZAK: TimeStamp, ODLAZAK: TimeStamp,
ODLAZAK.ŠIFRA_RAZLOGA: Integer)
DJELATNIK ( DJELATNIK:Integer, PREZIME_I_IME:VarChar(35))
ODLAZAK (ŠIFRA_RAZLOGA:Integer, RAZLOG_ODLASKA:VarChar(15))
Rezultat modeliranja je relacijski model baze podataka zapisan uz pomoć relacijske sheme.
Kako je razvidno iz modela, njega čine tri međusobno povezane relacije kojima su pridruženi
odgovarajući entiteti.
Zadaci za vježbu:
1. U članku 8 Pravilnika o obliku i načinu vođenja popisa robe u trgovini na malo stoji:
„Podaci u knjigu popisa upisuju se na sljedeći način:
– u stupac 1.: redni broj
– u stupac 2.: datum upisa dokumenta o zaduženju robe, odnosno
razduženiju robe,
– u stupac 3.: naziv i broj dokumenta o zaduženju, odnosno razduženiju robe i
o drugim promjenama koje se odnose na ukupno zaduženje
odnosno razduženije robe (vraćanje robe, otpis robe ili dr.) ili na
promjenu cijene robe (neovisno o razlogu: promjene stope
poreza, marže ili dr.).
– u stupac 4.: ukupna vrijednost zaduženja robe.“
Temeljem ovih informacija načinite model relacijske baze za vođenje Knjige popisa.
2. Potrebno je napraviti model baze podataka koja će biti u funkciji evidentiranja
poslovnih promjena putem financijskog računovodstva. Za unos podataka koristi se
temeljnicom.
12
Pomoć u rješavanju zadatka 2.:
Temeljnica za knjiženje u financijskom računovodstvu
TEMELJNICA ZA KNJIŽENJE br.
KONTO OPIS DUGUJE POTRAŽUJESTRANA
DNEVNIKA
Datum
NALOG ZAKNJIŽENJE
DIREKTOR VODITELJ RAČUNOVODSTVA
U ovom primjeru se obrađuje čest slučaj u modeliranju poslovne evidencije, a to je slučaj u
kojem se fizički dokument treba razdijeliti na dvije dnevničke tablice – relacije. Na
prethodnoj su slici zaokruženi dijelovi temeljnice koju treba predstaviti relacijskim modelom
13
baze podataka. Zbog specifičnog značenja pojma „temeljnica“ u financijskom računovodstvu,
digitalni dnevnički dokument – tablica - nazvat ćemo Upisnik. S obzirom da se u opisu
knjiženja obično evidentira dokument temeljem kojega se obavlja knjiženje, opis u temeljnici
biti će rastavljen na stavke (atribute):
Opis knjiženja
Dokument tip
Dokument broj i
Dokument datum
Također da bi se onemogućio istodobni unos na dugovnu i potražnu stranu neke vrijednosti, u
modelu se stavke zaglavlja temeljnice Duguje i Potražuje zamjenjuju stavkama (atributima):
Identifikator knjiženja
Iznos
Osim navedenih stavki tablice, potrebno je rasporediti i sljedeće stavke (atribute):
Temeljnica broj
Datum temeljnice i
Konto
Temeljem navedenih stavki (atributa) iz fizičkog dokumenta Temeljnica formiraju se dvije
dnevničke tablice (entiteti):
Upisnik zaglavlje i
Upisnik stavke
Potrebno je formirati i tablice strukture/šifara koje se vežu uz tablicu Upisnik stavke, a u
funkciji su pojašnjenja značenja atributa Konto i Dokument tip. To su tablice (entiteti):
Konto i
Dokument.
Iz prethodno prikupljenih informacija načinite relacijski model baze podataka i prikažite ga
relacijskom shemom (tijek izrade prikažite na papiru i priložite zadatku).
14
3. Temeljem prikazanog računa-otpremnice, načinite normalizirani relacijski model baze
podataka i iskažite ga uz pomoć relacijske sheme (tijek izrade prikažite na papiru i
priložite zadatku).
RAČUN-OTPREMNICA br.
NAZIV
od
Preuzeo:
Kupac:
ŠIFRAJEDINICAMJERE
Konto - skladište
Narudžbenica br.: od
Količina Cijena Vrijednost
Kontrolirao: Primio: Likvidirao:
PDV
15
2. Osnove relacijske algebre
Relacijska algebra sastavni je dio relacijskog upitnog jezika. Operacije relacijske algebre
izvode se nad relacijama, a rezultat djelovanja operacija relacijske algebre je relacija ili
tablica. Relacijsku algebru čini niz operacija koje imaju relacije za parametre. Te operacije se
dijele u dvije skupine:
1. Operacije preuzete iz teorije skupova (unija, razlika, presjek i Kartezijev produkt) i
2. Operacije svojstvene teoriji oblikovanja i upravljanja relacijskim bazama podataka
(selekcija, projekcija, pridruživanje i dijeljenje).
Pridruživanje i dijeljenje u ovom praktikumu neće biti obrađeni. Prije upoznavanja s
relacijskom algebrom potrebno je poznavati osnove matematičke logike, kao i pojam unijske
kompatibilnosti. Uz narednom dijelu uz praktične primjere dani su zadaci za samostalno
rješavanje.
2.1. Osnovne operacije matematičke logike
Kod algebarske operacije selekcije kriterij (uvjet) selekcije može biti jednostavan ili složen.
Složen je uvjet sastavljen od više jednostavnih uvjeta koji nastaju povezivanjem jednostavnih
uvjeta logičkim operatorima i, ili i ne ( ˄, ˅, i ˥ ). O svakom logičkom uvjetu može se donijeti
sud, odnosno svaki logički uvjet može biti zadovoljen – istinit (npr. ako je rješenje jednadžbe
x=5 točno onda je ovaj iskaz istinit) ili nezadovoljen – neistinit (npr. ako rješenje jednadžbe
x=5 nije točno onda je ovaj iskaz lažan). Istinite tvrdnje biti će označene s T (eng. True), a
neistinite s F (eng. False)
Konjunkcija ( i , &, ˄ )
Sud F T
F F F
T F T
Disjunkcija (ili, |, ˅ )
Sud F T
F F T
T T T
Negacija (ne, ˥ )
Sud
F T
T F
Temeljem prethodnih tablica istinitosti binarnih sudova moguće je sagledati istinitost
višestruko složenih sudova. Taj postupak se naziva ispitivanje toka vrijednosti istinitosti
sudova.
16
Primjer ispitivanja toka vrijednosti istinitosti sudova:
x y z x ili y z ili x ( x ili y ) i ( z ili x )
T T T T T T
T T F T T T
T F T T T T
T F F T T T
F T T T T T
F T F T F F
F F T F T F
F F F F F F
Ispitajte tok vrijednost istinitosti sudova za sljedeće slučajeve:
1. x ˄ (y ˅ x)
2. (x ˄ y) ˅ z
3. (x ˄ y) ˅ (z ˅ x)
4. (x ˄ y) ˅ ˥ z
5. (x ˄ ˥ y) ˅ ( ˥ z ˅ x)
6. ˥ (x ˄ y) ˅ (z ˄ k)
7. ˥ ((x ˄ y) ˅ z ˅ x))
17
2.2. Problem unijske kompatibilnosti
Binarne operacije relacijske algebre unije, presjeka i razlike moguće je izvesti jedino na
unijski kompatibilnim relacijama. Relacije r(R) i s(S) su unijski kompatibilne:
1. ako te relacije imaju isti broj atributa (stupaca) i
2. ako odgovarajući stupci imaju iste domene.
Domene (DOM) predstavljaju skupove svih vrijednosti koje pojedini atributi relacija mogu
poprimiti. Ako atributi relacija imaju iste domene a različite nazive potrebno je načiniti
ujednačavanje naziva tako da bude R = S.
Primjer unijski kompatibilnih relacija:
a (ŠIFRA,BILJKA,KOLIČINA,PDV) - Početna relacija
ŠIFRA BILJKA KOLIČINA PDV
301 Trešnja 21 25
303 Jabuka 7 25
324 Kruška 43 25
421 Breskva 6 25
b (PDV, KOLIČINA, BILJKA, ŠIFRA) - Unijski kompatibilna relacija
PDV KOLIČINA BILJKA ŠIFRA
25 13 Višnja 301
25 21 Mandarina 303
25 7 Borovnica 324
c (OZNAKA, NAZIV, BROJ KOMADA, PDV) - Unijski kompatibilna relacija
OZNAKA NAZIV BROJ KOMADA
PDV
333 Orah 19 25
352 Šljiva 6 25
372 Kajsija 4 25
Relacija a i relacija b su unijski kompatibilne jer imaju isti broj atributa, te sadrže iste
atribute. Redoslijed atributa (stupaca) u relaciji, kao i redoslijed n-torki (redova) u relaciji nije
bitan. Relaciju b je moguće prilagoditi relaciji a zamjenom redoslijeda atributa u relaciji b.
Nakon prilagodbe redoslijeda atributa u relaciji b dobiva se relaciji a unijski kompatibilna
relacija d.
d (ŠIFRA,BILJKA,KOLIČINA,PDV) - Unijski kompatibilna relacija izvedena iz relacije b
ŠIFRA BILJKA KOLIČINA PDV
301 Višnja 13 25
303 Mandarina 21 25
18
324 Borovnica 7 25
Relacija a i relacija c su unijski kompatibilne jer imaju isti broj atributa, iako nemaju iste
nazive atributa, atributi imaju iste domene. Prije provođenja algebarskih operacija unije,
presjeka i razlike između relacije a i relacije c potrebno je načiniti izmjene naziva atributa u
relaciji c sukladno nazivima u relaciji a. Nakon prilagodbe relacije c dobiva se relaciji a
unijski kompatibilna relacija e.
e (ŠIFRA,BILJKA,KOLIČINA,PDV) - Unijski kompatibilna relacija izvedena iz relacije c
ŠIFRA BILJKA KOLIČINA PDV
333 Orah 19 25
352 Šljiva 6 25
372 Kajsija 4 25
Provjerite unijsku kompatibilnost sljedećih parova relacija:
Primjer 1.
A V Z A V Z X
1 s 4 2 w 3 a
4 f 2 3 g 5 a
5 a 4 7 f 1 d
Jesu li ove dvije relacije unijski kompatibilne? ____________
Zašto? _____________________________________________________________________
Primjer 2.
A V Z V A Z
1 s 4 w 2 3
4 f 2 g 3 5
5 a 4 f 7 1
Jesu li ove dvije relacije unijski kompatibilne? ____________
Zašto? _____________________________________________________________________
19
Primjer 3.
A V Z X S T Q R
2 w 3 a 1 s 4 d
3 g 5 a 4 f 2 a
5 a 4 a
7 f 1 d
Jesu li ove dvije relacije unijski kompatibilne? ____________
Zašto? _____________________________________________________________________
Načinite nekoliko primjera parova unijski kompatibilnih relacija:
20
2.3. Temeljne algebarske operacije
Unija
Unija se izvodi na unijski kompatibilnim relacijama. Unija relacija r (R) i s (S) označava se s
r U s. Rezultat operacije unije ove dvije relacije je skup n-torki koji sadrži sve n-torke iz
relacije r i sve n-torke iz relacije s. Izuzimaju se samo n-torke relacije s koje su sadržane u
relaciji r, odnosno one n-torke relacije s čiji je primarni ključ već sadržan u relaciji r.
Primjer unije unijski kompatibilnih relacija:
Relacija r
ŠIFRA IME I PREZIME SPOL
3210 Marina Jurić Ž
3240 Vedrana Cota Ž
3381 Dino Rožić M
3445 Antonio Grgić M
Relacija s
ŠIFRA IME I PREZIME SPOL
3822 Milan Malin M
3940 Ema Skot Ž
3981 Lana Prpić Ž
Relacija r U s
ŠIFRA IME I PREZIME SPOL
3210 Marina Jurić Ž
3240 Vedrana Cota Ž
3381 Dino Rožić M
3445 Antonio Grgić M
3822 Milan Malin M
3940 Ema Skot Ž
3981 Lana Prpić Ž
Uopćeni primjeri riješenih zadataka unije dvaju unijski kompatibilnih relacija:
Zadatak 1.: Načinite uniju sljedećih relacija:
A B C A B C
1 R 5 5 D 3
2 T 2 6 E 2
3 D 4
4 S 1
21
Rješenje: S obzirom da su početne relacije unijski kompatibilne relacije, rješenje zadatka je
relacija koja sadrži skup n-torki iz obje početne relacije. S obzirom da je atribut A relacija
primarni ključ, n-torke u novokreiranoj relaciji će biti složene prema primarnom ključu
relacije.
A B C
1 R 5
2 T 2
3 D 4
4 S 1
5 D 3
6 E 2
Zadatak 2.: Načinite uniju sljedećih relacija:
X F Q X F Q
3 t s 7 v X
2 a b 3 t s
9 g h
Rješenje: S obzirom da su početne relacije unijski kompatibilne relacije, rješenje zadatka je
relacija koja sadrži skup n-torki iz obje početne relacije. Kako se pojavljuju istovjetne n-torke
u obje relacije, n-torke iz druge relacije neće biti sadržane u konačnom rješenju. Stoga se
kreiranje rješenja obavlja u dva koraka:
1. korak – kreiranje skupa svih n-torki iz prve i druge početne relacije
X F Q
3 t s
2 a b
7 v X
3 t s
9 g h
2. korak – konačno rješenje se dobiva eliminiranjem ponavljajućih n-torki i sortiranjem n-
torki prema primarnom ključu relacije
X F Q
2 a b
3 t s
7 v X
9 g h
22
Načinite tri unijski kompatibilne relacije r, s, t s po četiri proizvoljna atributa i pet n-torki
proizvoljnog sadržaja, te dokažite da vrijedi:
1. r U s = s U r
2. r U s U t = ( r U s ) U t
3. ( r U s ) U t = r U ( s U t )
23
Razlika
Razlika se izvodi na unijski kompatibilnim relacijama. Razlika se relacija r (R) i s (S)
označava se s r - s. Rezultat operacije presjeka ove dvije relacije je skup n-torki koji sadrži
sve n-torke iz relacije r koje se ne nalaze u relaciji s.
Primjeri razlike unijski kompatibilnih relacija:
Relacija r.
ŠIFRA NAZIV ZEMLJA
4 Audi G
12 Ford USA
17 Mercedes G
19 Fiat I
Relacija s.
ŠIFRA NAZIV ZEMLJA
14 Peugeot F
17 Mercedes G
19 Fiat I
Relacija r – s.
ŠIFRA NAZIV ZEMLJA
4 Audi G
12 Ford USA
Relacija s – r.
ŠIFRA NAZIV ZEMLJA
14 Peugeot F
Uopćeni primjeri riješenih zadataka unije dvaju unijski kompatibilnih relacija:
Zadatak 1.: Načinite razliku sljedećih relacija:
A B C A B C
1 R 5 5 D 3
2 T 2 2 T 2
3 D 4 6 E 2
4 S 1
24
Rješenje:
A B C
1 R 5
3 D 4
4 S 1
Zadatak 2.: Načinite razliku sljedećih relacija:
A B C A B C
5 D 3 1 R 5
2 T 2 2 T 2
6 E 2 3 D 4
4 S 1
Rješenje:
A B C
5 D 3
6 E 2
Načinite tri unijski kompatibilne relacije r, s, t s po četiri proizvoljna atributa i pet n-torki
proizvoljnog sadržaja, te provjerite vrijedi li:
1. r - s = s - r
2. r – ( s – t ) = ( r U s ) U t
3. ( r - s ) - t = r - ( s U t )
25
Presjek
Presjek se izvodi na unijski kompatibilnim relacijama. Presjek relacija r (R) i s (S) označava
se s r ∩ s. Rezultat operacije presjeka ove dvije relacije je skup n-torki koji sadrži sve one n-
torke koje se nalaze i u relaciji r i u relaciji s.
Presjek je složena algebarska relacija koja se može dobiti djelovanjem algebarskih operacija
unije i presjeka:
r ∩ s = r – ( r – s )
Primjeri presjeka unijski kompatibilnih relacija:
Relacija r.
ŠIFRA NAZIV ZEMLJA
4 Audi G
12 Ford USA
17 Mercedes G
19 Fiat I
Relacija s.
ŠIFRA NAZIV ZEMLJA
14 Peugeot F
17 Mercedes G
19 Fiat I
Relacija r ∩ s.
ŠIFRA NAZIV ZEMLJA
12 Ford USA
17 Mercedes G
Uopćeni primjeri riješenih zadataka unije dvaju unijski kompatibilnih relacija:
Zadatak 1.: Načinite presjek sljedećih relacija:
A B C A B C
1 R 5 5 D 3
2 T 2 2 T 2
3 D 4 6 E 2
4 S 1
26
Rješenje:
A B C
2 T 2
Zadatak 2.: Načinite presjek sljedećih relacija:
X F Q X F Q
2 a b 3 t s
3 t s 7 v X
9 g h 9 g h
Rješenje:
X F Q
3 t s
9 g h
Načinite tri unijski kompatibilne relacije r, s, t s po četiri proizvoljna atributa i pet n-torki
proizvoljnog sadržaja, te dokažite da vrijedi:
1. r ∩ s = s ∩ r
2. r ∩ s ∩ t = ( r ∩ s ) ∩ t
3. ( r ∩ s ) ∩ t = r ∩ ( s ∩ t )
27
Kartezijev produkt
Kartezijev produkt je, poput unije, presjeka i razlike, minimalno binarna operacija jer se
izvodi na parovima relacija. Kartezijev se produkt relacija r (R) i s (S) označava s r X s.
Rezultat operacije Kartezijevog produkta ove dvije relacije je skup n-toriki kod kojega su
svakoj n-torki iz relacije r pridružene sve n-torke iz relacije s.
Primjer Kartezijevog produkta relacija:
Relacija r.
MATIČNI BROJ
PREZIME I IME
3521 Ribar Petar
3592 Grgić Franc
3604 Horvat Mirjana
Relacija s.
ŠIFRA PREDMET ECTS
11 Informatika 6
17 Statistika 6
Relacija r X s.
MATIČNI BROJ
PREZIME I IME ŠIFRA PREDMET ECTS
3521 Ribar Petar 11 Informatika 6
3521 Ribar Petar 17 Statistika 6
3592 Grgić Franc 11 Informatika 6
3592 Grgić Franc 17 Statistika 6
3604 Horvat Mirjana 11 Informatika 6
3604 Horvat Mirjana 17 Statistika 6
Ako je relacija definirana relacijskom shemom, a relacijsku shemu R čini konačan skup
različitih naziva atributa, odnosno atributa, tada je rezultat Kartezijevog produkta relacije r i
relacije s relacija, onda i samo onda ako relacija r i relacija s nemaju zajedničkih atributa (R ∩
S = 0). U protivnom, ako postoji barem jedan zajednički atribut (R ∩ S ≠ 0), tada je rezultat
Kartezijevog produkta relacije r i relacije s tablica. S obzirom na uvjet primarnog ključa
nužnog za egzistenciju relacije, da bi u slučaju kada R ∩ S = 0 rezultat Kartezijevog produkta
r X s bila relacija nužno je da nad takvom relacijom bude definiran složeni primarni ključ ili u
protivnom moguće je održanje relacije i uz jednostavan ključ uz uvjet da relacija s sadrži
samo jednu n-torku.
28
Uopćeni primjeri riješenih zadataka Kartezijevog produkta dvaju relacija:
Zadatak 1.: Načinite Kartezijev produkt sljedećih relacija:
A B C D E F
1 R 5 a S 2
2 T 2 h T 1
3 D 4 m X 5
4 S 1
Rješenje:
A B C D E F
1 R 5 a S 2
1 R 5 h T 1
1 R 5 m X 5
2 T 2 a S 2
2 T 2 h T 1
2 T 2 m X 5
3 D 4 a S 2
3 D 4 h T 1
3 D 4 m X 5
4 S 1 a S 2
4 S 1 h T 1
4 S 1 m X 5
Jeli u ovom slučaju tablica ujedno i relacija? _____________________
Zadatak 2.: Načinite Kartezijev produkt sljedećih relacija:
X F F G T
2 a a 5 s
3 t s 7 X
g 9 h
Rješenje:
X F F G T
2 a a 5 s
2 a s 7 X
2 a g 9 h
3 t a 5 s
3 t s 7 X
3 t g 9 h
Jeli u ovom slučaju tablica ujedno i relacija? _____________________
29
Zadatak 3.: Načinite Kartezijev produkt sljedećih relacija:
X F Q Z T
3 t s 1 s
9 g h
Rješenje:
X F Q Z T
3 t s 1 s
9 g h 1 s
Jeli u ovom slučaju tablica ujedno i relacija? _____________________
Načinite tri unijski kompatibilne relacije r, s, t s po četiri proizvoljna atributa i pet n-torki
proizvoljnog sadržaja, te dokažite da vrijedi:
1. r X s = s X r
2. r X ( s X t ) = ( r X s ) X t
30
Projekcija
Projekcija je unarna operacija, odnosno operacija koja se izvodi nad jednom relacijom.
Projekcija je relacije r (R), gdje R konačan i ne prazan skup atributa:
R = {R1, R2, R3, …Rn}
relacija ili tablica koja sadrži iz skupa atributa R izdvojen ne prazan i konačan podskup
atributa s pripadajućim vrijednostima n-torki. Jednostavno rečeno, projekcijom se iz relacije
izdvajaju željeni stupci. Projekcija relacije r (R) kojom će se izdvojit drugi i treći stupac
relacije napisat će se na sljedeći način: ЛR1R2 ( r )
Primjer projekcije relacija:
Relacija r.
ŠIFRA PREDMET ECTS PREDAVANJA SEMINARI VJEŽBE
11 Informatika 6 2 1 1
17 Statistika 6 2 1 1
20 Matematika 6 3 0 1
23 Engleski jezik 5 1 0 1
24 Njemački jezik 5 1 0 1
Relacija : ЛŠIFRA, PREDMET ( r )
ŠIFRA PREDMET
11 Informatika
17 Statistika
20 Matematika
23 Engleski jezik
24 Njemački jezik
Uopćeni primjeri riješenih zadataka projekcije relacije:
Zadatak 1.: Načinite projekciju sljedeće relacije, tako da iz relacije izdvojite atribut T:
A S T
1 R 5
2 T 2
3 D 4
4 S 1
31
Rješenje:
T
5
2
4
1
Jeli u ovom slučaju tablica ujedno i relacija? _____________________
Zadatak 2.: Načinite projekciju sljedeće relacije x uz uvjet ЛFFT ( x ):
F G T
a 5 s
s 7 X
g 9 h
Rješenje:
F F T
a a s
s s X
g g h
Zadatak 3.: Načinite projekciju sljedeće relacije x uz uvjet ЛAC ( x ):
A B C D E F
1 R 5 9 a m
2 T 2 7 f m
3 D 4 3 a m
4 S 1 5 a m
6 D 2 1 d g
8 W 6 1 t h
Rješenje:
A C
1 5
2 2
3 4
4 1
6 2
8 6
Jeli u ovom slučaju tablica ujedno i relacija? _____________________
32
Načinite tri relacije r, s, t sa po četiri proizvoljna atributa i pet n-torki proizvoljnog sadržaja,
te od svake načinite proizvoljnu projekciju:
33
Selekcija (restrikcija)
Selekcija je unarna operacija, odnosno operacija koja se izvodi nad jednom relacijom.
Selekcija iz relacije r izvodi se na način da se iz relacije r izdvajaju one n-torke koje
zadovoljavaju postavljeni uvjet. Ako se uvjet selekcije označi s K, onda se selekcija zapisuje
na sljedeći način: σ K ( r )
Kriterij (uvjet) selekcije može biti jednostavan ili složen, odnosno sastavljen od više
jednostavnih kriterija. Jednostavni kriterij nastaje usporedbom atributa relacije s drugim
atributima i/ili konstantama. Operatori usporedbe mogu biti: =, >, <, ≥, ≤, ≠. Složeni kriteriji
nastaju povezivanjem jednostavnih kriterija logičkim operatorima i, ili i ne ( ˅, ˄ i ˥ ).
Primjeri selekcije relacije:
Relacija r.
ŠIFRA PREDMET ECTS PREDAVANJA SEMINARI VJEŽBE
11 Informatika 6 2 1 1
17 Statistika 6 2 1 1
20 Matematika 6 3 0 1
23 Engleski jezik 5 1 0 1
24 Njemački jezik 5 1 0 1
Relacija σ ECTS=5 ( r )
ŠIFRA PREDMET ECTS PREDAVANJA SEMINARI VJEŽBE
23 Engleski jezik 5 1 0 1
24 Njemački jezik 5 1 0 1
Relacija σ SEMINATI>0 ( r )
ŠIFRA PREDMET ECTS PREDAVANJA SEMINARI VJEŽBE
11 Informatika 6 2 1 1
17 Statistika 6 2 1 1
Relacija σ PREDAVANJA≠VEŽBE ( r )
ŠIFRA PREDMET ECTS PREDAVANJA SEMINARI VJEŽBE
11 Informatika 6 2 1 1
17 Statistika 6 2 1 1
20 Matematika 6 3 0 1
Relacija σ ŠIFRA<17 ˅ ŠIFRA>23 ( r )
ŠIFRA PREDMET ECTS PREDAVANJA SEMINARI VJEŽBE
11 Informatika 6 2 1 1
24 Njemački jezik 5 1 0 1
34
Relacija σ ŠIFRA≥17 ˄ ŠIFRA≤23 ( r )
ŠIFRA PREDMET ECTS PREDAVANJA SEMINARI VJEŽBE
17 Statistika 6 2 1 1
20 Matematika 6 3 0 1
23 Engleski jezik 5 1 0 1
Uopćeni primjeri riješenih zadataka selekcije relacije:
Zadatak 1.: Načinite selekciju u sljedećoj relaciji, tako da iz relacije izdvojite n-torke kod
kojih je vrijednost atributa S = „T“:
A S T
1 R 5
2 T 2
3 D 4
4 S 1
Rješenje:
A S T
2 T 2
Zadatak 2.: Načinite selekciju u sljedećoj relaciji, tako da iz relacije izdvojite n-torke kod
kojih je vrijednost atributa: S = 1 ili C = 1 ili D = 1:
A B C D E F
1 R 5 9 a m
2 T 2 7 f m
3 D 4 3 a m
4 S 1 5 a m
6 D 2 1 d g
8 W 6 1 t h
Rješenje:
A B C D E F
1 R 5 9 a m
4 S 1 5 a m
6 D 2 1 d g
8 W 6 1 t h
35
Zadatak 3.: Načinite selekciju u sljedećoj relaciji, tako da iz relacije izdvojite n-torke kod
kojih je vrijednost atributa: A = 4 i C = 4:
A C
1 5
2 2
3 4
4 1
6 2
8 6
Rješenje:
A C
Zadatak 4.: Načinite selekciju u sljedećoj relaciji, tako da iz relacije izdvojite n-torke kod
kojih je vrijednost atributa G > X:
F G T X
a 5 s 4
s 7 X 7
g 9 h 5
Rješenje:
F G T X
a 5 s 4
g 9 h 5
Zadatak 5.: Načinite selekciju u sljedećoj relaciji, tako da iz relacije izdvojite n-torke kod
kojih je vrijednost atributa: F < „d“ i Q < „d“:
X F Q
2 a b
3 t s
9 g h
Rješenje:
X F Q
2 a b
36
Načinite pet relacija i, k, r, s, t sa po četiri proizvoljna atributa i pet n-torki proizvoljnog
sadržaja, te od svake načinite proizvoljnu selekciju, s tim da barem dva uvjeta selekcije budu
složeni uvjeti:
37
3. Uvod u SQLite
SQLite je iznimno mali sustav za upravljanje bazama podataka koji koristi za svoj rad veći
dio standardnih SQL instrukcija prema ANSI standardu SQL-92. Za razliku od većine drugih
popularnih složenijih sustava za upravljanje bazama ovaj sustav ne mora raditi u klijent-
serverskom obliku rada, te ga je moguće koristiti na vlastitom računalu bez posebne
instalacije i prilagođavanja pokretanjem izvršne datoteke koja se na vlastito lokalno računalo
može skinuti s Interneta. To podrazumijeva da nema potrebe za instalacijom Web servera na
vlastito računalo ili otvaranje korisničkog računa na nekom udaljenom računalu - Web
orijentiranom serveru.
Iako za SQLite postoje grafička sučelja koja olakšavaju rad i omogućavaju upotrebu SQL
instrukcija uz pomoć sustava izbornika bez poznavanja SQL jezika, upravo zbog intencije da
studenti nauče temelje SQL jezika, ovdje se inzistira na vježbanju u tzv. komandnom načinu
rada, gdje korisnik mora ručno upisivati instrukcije SQL-a kako bi ih savladao. Prema tome
za daljnje izvođenje vježbe nema potrebe tražiti i instalirati grafičko sučelje za rad u SQLite-
u.
SQLite je licenciran kao javno dobro, te ga se kao takvog bez ograničenja može skinuti s
interneta i koristiti na vlastitom računalu. Osim poznavanja SQL instrukcija potrebno je
vezano za SQLite poznavati par internih instrukcija koje će se koristiti za prilagodbu ispisa
podataka, te za pokretanje i napuštanje programa.
3.1. Preuzimanje programa s Interneta i pokretanje programa SQLite
Program na standardan način možete pronaći i skinuti na Web adresi:
http://www.sqlite.org/download.html
Otvaranjem navedene poveznice dobiva se sljedeća Web stranica:
38
Zaokruženi dio, odnosno poveznica: sqlite-shell-win32-x86-3071000.zip (251.64 KB) je
mjesto koje treba izabrati, te kopirati na vlastito računalo. Preporuča se preuzimanje aktualne
verzije programa SQLite, a ona je 3.7.10. Pošto je izvršna datoteka komprimirana u Zip
formatu, potrebno ju je dekomprimirati. Korisno bi bilo dekomprimiranu datoteku postaviti na
desktop u novokreiranu mapu. Sljedeća slika prikazuje otvorenu mapu na desktopu koja je
nazvana „BP vježbe“ i u kojoj se nalazi datoteka:
sqlite3
Izgled takve mape prikazuje sljedeća slika:
-
39
SQLite je izvorno napravljen za Linux-ove korisnike koji se najčešće koriste instrukcijskim
načinom rada (upisivanje instrukcija umjesto niza izbornika kao kod Windows-a), stoga se
prilikom starta SQLite-a potrebno služiti komandnom (DOS) linijom za upis instrukcija.
Naime, sam SQLite je moguće pokrenuti dvoklikom na njegovu ikonu, no takvo pokretanje ne
pruža mogućnost kreiranja baze podataka, jer se baza podataka kreira dodavanjem naziva
baze podatka kao parametra sqlite3 komandnoj instrukciji. S obzirom da je rad s komandnom
(DOS) linijom prilično složen za one koji ne poznaju rad u DOS-u, potrebno je ovo
ograničenje zaobići malim trikom. To će se učiniti kreiranjem tzv. batch datoteke koja će
sadržavati komandnu instrukciju za pokretanje sqlite3 izvršne datoteke te naziv baze podataka
koja se kreira. Pretpostavimo da će se baza podataka za vježbanje nazvati: BPvjezbe, tada
instrukcija za pokretanje SQLite-a i kreiranje/otvaranje baze podataka BPvjezbe treba
izgledati:
sqlite3 BPvjezbe
Ovu instrukciju potrebno je upisati u Notepadu i snimiti u istu mapu u kojoj se nalazi datoteka
sqlite3 (mapa: BP vježbe) pod nazivom: BPvjezbe.bat
Obratite pozornost da je prije snimanja datoteke u Notepadu potrebno promijeniti oblik
spremanja datoteke iz „Tekstualni dokumenti (*.txt)“ u „Sve datoteke“. Sljedeće tri slike
prikazuju postupak kreiranja batch datoteke:
40
Posljednja slika prikazuje kako se u mapi nakon snimanja pojavila još jedna ikona, a to je
ikona pod nazivom: BPvjezbe. Dvoklikom na ovu ikonu otvorit će se sqlite3 program koji će
otvoriti bazu podataka BPvjezbe.
Nakon dvoklika dobiva se sljedeći prozor s pokrenutim sqlite3 programom:
41
Na ekvivalentan način, kreiranjem batch datoteka moguće je formirati ikone za pokretanje
sqlite3 programskog sustava u kombinaciji s drugim nazivima baza podataka.
3.2. Radu u SQLite-u
Nakon pokretanja SQLite-a prema prethodno opisanom modelu dobiva se prozor u kojem se
SQLite javlja korisniku s odazivom (promptom):
sqlite>
Iza ovog odaziva moguće je upisivati:
Instrukcije SQLite-a - počinju s znakom točka („.“) ili
Instrukcije SQL-a – počinju s SQL ključnom riječi.
Osnovne instrukcije SQLite-a koje će trebati za izvođenje vježbi su:
.databases – prikazuje koja je baza podataka otvorena
.exit – završetak rada u SQLite-u
.headers ON - uključuje prikazivanje atributa u ispisu
.headers OFF – isključuje prikazivanje atributa u ispisu
.help – prikazuje sve instrukcije SQLite-a s kratkim objašnjenjima
.mode columns – prikazivanje relacija u obliku tablica
.output ime_datoteke.txt – rezultate izvođenja SQL instrukcija upisuje u datoteku
(potrebno je navesti ime datoteke, npr. rezultat.txt)
.output stdout – rezultate izvođenja SQL instrukcija prikazuje na ekranu
.read ime_datoteke.sql – učitavanje SQL skriptne datoteke (instrukcije SQL-a)
42
.shema ime_tablice – prikazuje relacijsku shemu za navedenu relaciju
.tables – prikazuje listu kreiranih tablica (relacija).
Primjeri upotrebe instrukcija SQLite-a:
1. Otvoren je SQLite, no pitanje je koja je baza podataka otvorena. Provjera koja je baza
podataka otvorena načinit će se upisom instrukcije .databases i pritiskom na tipku
Enter:
sqlite> .databases
Rezultat izvođenja ove instrukcije je tablica u kojoj se nalazi na prvom mjestu
datoteka otvorene baze podataka.
2. Provjera koje su sve tablice otvorene čini se na sljedeći način:
sqlite> .tables
Rezultat izvođenja ove instrukcije je popis kreiranih tablica.
3. Provjera relacijske sheme pojedine tablice obavlja se na sljedeći način (pretpostavka
da postoji kreirana tablica „student“):
sqlite> .shema student
Rezultat izvođenja ove instrukcije je relacijska shema za tablicu student.
4. Uz pomoć SQL instrukcije SELECT potrebno je ispisati sadržaj tablice „student“.
Ispis je potrebno načiniti u datoteku kako bi se rezultati ispisa mogli otiskati i priložiti
uz ovaj praktikum. Datoteka se treba zvati: student_vjezba.txt
sqlite> .headers ON
sqlite> .mode columns
sqlite> .output student_vjezba.txt
sqlite> select * from student;
sqlite> .output stdout
Prvom se instrukcijom uključuje prikazivanje zaglavlja, odnosno atributa relacije.
Druga definira prikazivanje relacije kao tablice. Treća definira ispis rezultata SQL
instrukcije SELECT u datoteku: student_vježba.txt. Četvrta instrukcija je instrukcija
SQL-a, dok peta instrukcija vraća iz moda ispisa rezultata rada SQL instrukcija u
datoteku na ispis rezultata rada SQL instrukcija na ekran.
Rezultat rada ovog niza instrukcija je nastanak datoteke: student_vjezba.txt u mapi
u kojoj se nalazi i ikona programa SQLite (u ovom slučaju: sqlite3). Da bi se
ispisani rezultati u datoteci vidjeli potrebno je otvoriti datoteku student_vjezba.txt
uz pomoć MS Worda. Naime, drugi programi neće korektno interpretirati prikaz
tablice jer SQLite formira ispis prilagođen Linux-u, tako da za skok u novi red
koristi samo FormFeed (FF) umjesto Carriage return (CR) + FormFeed (FF) kao što
je to slučaj kod Windows-a. MS Word će posao interpretacije korektno obaviti, no
može se desiti da zbog veličine fonta tablica bude razvučena u više redova. Tada se
43
treba kompletan sadržaj u MS Wordu označiti i smanjiti veličina fonta bez
promjene tipa fonta. Promjena tipa fonta ugrozila bi formatiranje tablice.
5. Napuštanje SQLite-a:
sqlite> .exit
Rezultat ove instrukcije je zatvaranje prozora SQLite-a i prelazak u Windows
okruženje.
Prethodni primjeri rada u SQLite-u će se isprobati prilikom izvršavanja zadataka vezanih za
SQL. Treba uočiti da svaka instrukcija SQL-a mora završiti sa znakom točka-zarez („;“).
Instrukcije SQL-a mogu se protegnuti i kroz više redova. U novi red se prelazi pritiskom na
tipku Enter. Da je otvoren novi red u kojem se nastavlja upis SQL instrukcije prikazuje
odaziv:
. . . >
Dovršetkom SQL instrukcije i stavljanjem znaka točka-zarez, te pritiskom na tipku Enter
predaje se sadržaj SQL instrukcije na interpretaciju. Prema tome za izvođenje SQL instrukcija
nije potrebna nikakva dodatna procedura, već će se izvođenje instrukcije obaviti nakon
upisivanja znaka točka-zarez i pritiska tipke Enter.
Eventualne greške u sintaksi SQLite će prijaviti. U slučaju pojave greške, bilo kod upisivanja
instrukcije SQLite-a ili SQL-a, tekst greške treba pažljivo pročitati, te ponovno načiniti upis
instrukcije sukladno pravilima sintakse.
44
4. Uvod u SQL
SQL je složen upitni jezik za rad s relacijskim bazama podataka s velikim brojem instrukcija,
bogatom sintaksom i velikim mogućnostima. Savladavanje SQL-a podrazumijeva dobro
poznavanje relacijskog modela podataka, relacijske algebre, te bogato iskustvo koje je
proporcionalno vremenu provedenom u radu s SQL-om. Intencija ovog praktikuma nije
osposobljavanje vrhunskih eksperata za SQL, već otvaranje vrata početnicima za
razumijevanje principa rada SQL-a prilikom baratanja relacijskim bazama podataka. U vezi s
tim u praktikumu će biti prikazani jednostavni zadaci koji se odnose na rad s SQL
instrukcijama. Nakon prikazanih zadataka primjera, biti će zadani zadaci za samostalni rad
studenata u SQL-u.
Početnička razina poznavanja SQL-a podrazumijeva poznavanje osnovnih instrukcija iz:
Jezika za oblikovanje baza podataka (Data Definition Language) i
Jezika za manipulaciju s podacima (Data Manipulation Language)
U okviru DDL-a biti će elementarno obrađene sljedeće instrukcije:
CREATE TABLE – kreira tablicu (relaciju)
ALTER TABLE – mijenja relacijsku shemu pojedine tablice (relacije)
DROP TABLE – briše tablicu (relaciju)
U okviru DML-a biti će obrađene sljedeće instrukcije:
INSERT - umeće n-torke u relaciju
UPDATE – mijenja sadržaj relacije
DELETE – briše n-torke relacije
SELECT – omogućava postavljanje upita nad tablicom.
SQL kao jezik nije osjetljiv na velika i mala slova, no treba obratiti pozornost na tip
operacijskog sustava, odnosno programskog jezika s kojim se baza podataka kombinira, jer
ako je operacijski sustav, odnosno programski jezik osjetljiv na velika i mala slova, to može
uzrokovati probleme u radu s nazivima baza podataka, tablica (relacija), atributa i slično. U
primjerima SQL instrukcije biti će pisane velikim slovima a parametri malim. Svaku SQL
instrukciju moguće je zapisati kroz više redova, kraj SQL instrukcije označava znak točka-
zarez (;).
4.1. SQL Instrukcije DDL-a
Rezultati djelovanja DDL instrukcija su kreiranje, izmjena i brisanje tablica, pogleda i
indeksa. Na polaznoj razini dovoljno je poznavati instrukcije za rad s tablicama (relacijama),
stoga će se u ovom praktikumu tim instrukcijama posvetiti pozornost:
Kreiranje tablica (relacija)
Temeljem definirane relacijske sheme relacijske baze podataka pristupa se kreiranju tablice
(relacije). Ključni elementi za kreiranje tablice (relacije), osim naziva tablice (entitet) su
njezini atributi. Atributi čine kolone tablice i o njima je potrebno znati i definirati sljedeće:
45
Naziv atributa
Tip atributa (izdvojeni su za početničku razinu znanja sljedeći atributi:
VARCHAR(n), TEXT, INTEGER, TIMESTAMP NUMERIC(n,m)
sa širinom ili preciznosti ili razmjerom (za numeričke necjelobrojne vrijednosti)
Null vrijednost (može li se atributu dodjeliti ili ne NULL vrijednost)
Primarni ključ
Vanjski ključ/ključevi
Jedinstvenost (Unique) odnosno ne mogućnost pridruživanja više istovjetnih
vrijednosti atributu (koloni)
Predefinirana vrijednost (Default Value) – vrijednost koja će biti dodjeljena atributu
umjesto NULL vrijednosti
Opći oblik instrukcije za kreiranje tablice (relacije) ako je:
naziv prvog atributa primarni ključ,
nazivi trećeg i četvrtog atributa vanjski ključevi,
naziv drugog atributa mora biti unikatan,
naziv sedmog atributa mora biti unesen (ne smije biti NULL) i
vrijednost naziv n-tog atributa je predefinirana,
je sljedeći:
CREATE TABLE ime_tablice (
Naziv_atributa1 Tip_atributa PRIMARY KEY
Naziv_atributa2 Tip_atributa UNIQUE,
Naziv_atributa3 Tip_atributa,
Naziv_atributa4 Tip_atributa,
…..
Naziv_atributa7 Tip_atributa NOT NULL,
Naziv_atributa8 Tip_atributa,
….
Naziv_atributaN Tip_atributa DEFAULT početna_vrijednost,
FOREIGN KEY (Naziv_atributa3) REFERENCES
ime_1_povezne_tablice(naziv_atributa)
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (Naziv_atributa4) REFERENCES
ime_2_povezne_tablice(naziv_atributa)
ON DELETE CASCADE ON UPDATE CASCADE);
Isti rezultat može se dobiti i drugačijom organizacijom parametara CREATE instrukcije, no
druge izvedbe CREATE instrukcije prelaze okvire početničkih znanja.
Ako primarni ključ treba biti broj koji se samostalno – automatski povećava, tada se primarni
ključ za tzv. brojač (auto-broj) definira na sljedeći način:
CREATE TABLE ime_tablice (Naziv_atributa INTEGER
PRIMARY KEY AUTOINCREMENT);
Upotrebu vanjskog ključa potrebno je prije upotrebe instrukcije CREATE, odnosno nakon
starta SQLite-a, aktivirati. To se čini uz pomoć instrukcije:
PRAGMA foreign_keys = ON;
46
Kod definicije vanjskog ključa, prvo treba kreirati nadređene tablice (relacije), odnosno
relacije na koje se vanjski ključ referencira, odnosno tzv. roditeljske tablice, te potom tablice
koje sadrže reference na te vanjske tablice (to su podređene tablice ili tablice djece).
Prilikom kreiranja tablice (relacije) korisno je napraviti ispitivanje postoji li već relacija pod
navedenim imenom. To se čini upotrebom ključnih riječi IF NOT EXIST. Primjer može biti
sljedeći:
CRATE TABLE IF NOT EXIST ime_tablice (Naziv_atributa INTEGER PRIMARY KEY)
Uz SQL instrukcije, osim parametara mogu se naći i funkcije. Funkcije se razlikuju od
parametara po tome što uz ključnu riječ stoji zagrada. U zagradi obično stoji argument
funkcije ili više argumenata funkcije. Funkcija koja se često koristi uz instrukciju CREATE je
funkcija koja dodjeljuje kao default-nu vrijednost trenutnog datuma i vremena, odnosno
funkcija DATETIME. Vrijednost trenutnog datuma i vremena se kao predefinirana vrijednost
u model relacija dodjeljuje na sljedeći način:
CREATE TABLE vrijeme (a INTEGER PRIMARY KEY AUTOINCRIMENT,
b TIMESTAMP DEFAULT DATETIME('now'));
Kako je iz primjera vidljivo, vremenskoj varijabli prilikom umetanja novog reda, ako
drugačije nije definirano, dodjeljuje se vrijednost trenutnog datuma i vremena na računalu.
Primjer kreiranja baze podataka:
Zadatak je načiniti bazu podataka koja će sadržavati relaciju s popisom osnovnih sredstava i
datumom njihove nabavke:
1. Kreiranje relacijske sheme:
OSNOVNO_SREDSTVO (ŠIFRA:Integer, NAZIV:VarChar(50),
DATUM_NABAVE:TimeStamp)
2. Kreiranje baze podataka
U ovom je koraku potrebno načiniti batch proceduru za kreiranje datoteke OS.BAT u
mapi gdje se nalazi program SQLite uz pomoć NotePada koja će sadržavati instrukciju
za pokretanje SQLite-a i naziv baze podataka (vidjeti točku 3.1.) koja će se zvati
proba2:
sqlite3 proba2
Dvoklikom na novonastalu ikonu pokreće se SQLite i formira se nova baza podataka.
3. Kreiranje tablice (relacije)
Tablica (relacija) će se formirati upisivanjem sljedeće instrukcije:
CREATE TABLE osnovno_sredstvo (sifra INTEGER PRIMARY KEY,
naziv VARCHAR(50), datum_nabave TIMESTAMP);
47
Izgled ekrana nakon obavljenog zadatka je sljedeći:
Zadaci:
1. U SQLite-u kreirajte bazu podataka pod nazivom: proba, te načinite tablice za sljedeći
relacijski model baze podataka:
PRVA(A1:Integer, DRUGA.A2:Integer, A3:Numeric(9,2))
DRUGA(B1:Integer, B2:VarChar(30))
Za potrebe realizacije ovog zadatka potrebno je načiniti batch proceduru za pokretanje
SQLite-a i otvaranje/kreiranje baze podataka (vidjeti točku 3.1.). Postupak kreiranja
tablica moguće je učiniti kroz dvije instrukcije SQL-a u SQLite-u. Da bi načinili dokaz
o obavljenom zadatku, kopirajte ekranski sadržaj s prozorom SQLite-a u MS Word ili
sličan program za obradu teksta (Ctrl + PrtScreen – kopiranje ekranskog sadržaja u
privremenu memoriju, Ctrl + V – prenošenje sadržaja privremene memorije u MS
Word ili njemu sličan program), ispišite ekranski sadržaj i priložite ga u ovaj
praktikum. Nije potrebno iz slike ekranskog sadržaja izdvajati prozor SQLite-a nekim
programskim alatom za obradu slike jer diferencirani vidljivi sadržaj desktop-a
predstavlja dokaz o samostalnoj izradi zadatka.
2. Za relacijski model namijenjen evidenciji radnog vremena iz točke 1.1. kreirajte bazu
podataka pod proizvoljnim imenom u SQLite-u, te tablice prema definiranoj
relacijskoj shemi baze podataka. Priložite slikovne dokaze o obavljenom zadatku.
3. Kreirajte vlastitu relacijsku shemu kao model segmenta realnog svijeta, prema njoj
načinite bazu podataka, te priložite slikovni dokaz o izvršenom zadatku.
Izmjena strukture tablice (relacije)
Za izmjenu strukture tablice (relacije) koristi se instrukcija ALTER TABLE. Za razliku od
standardne inačice SQL-a gdje postoji mogućnost brisanja kolone u tablici, SQLite tu
mogućnost ne podržava. Prema tome uz pomoć instrukcije ALTER TABLE u SQLite-u
moguće je:
48
Preimenovati tablicu (relaciju)
Dodati novu kolonu (atribut) u tablicu (relaciju)
Preimenovanje tablice (relacije) obavlja se na sljedeći način:
ALTER TABLE ime_tablice RENAME TO novo_ime_tablice
Promjenu imena, ako se radi o relaciji koja je referencirana kao tablica (relacije) roditelj je
moguća jer će SQLite sam načiniti izmjene u definiciji vanjskog ključa u podređenoj,
odnosno podređenim relacijama (relacija dijete).
Promjena strukture tablice odnosno dodavanje kolona obavlja se slično ako kod CREATE
TABLE instrukcije. Opći oblik ALTER TABLE instrukcije koja dodaje novu kolonu (atribut)
u tablicu (relaciju) je:
ALETR TABLE ime_tablice ADD COLUMN naziv_novog_atributa Tip_atributa
ili
ALETR TABLE ime_tablice ADD naziv_novog_atributa Tip_atributa
Ključna riječ COLUMN je prema tome opciona. Prilikom upotrebe ALTER TABLE
instrukcije u ovom obliku treba imati na umu:
1. Nije moguće dodati kolonu (atribut) primarnog ključa u definiciji novog atributa
(kolone) jer dodavanjem primarnog ključa mijenja se struktura cijele relacijske sheme.
2. Predefinirana vrijednost kolone (atributa) ne može se definirati funkcijom (npr.
DEFAULT DATETIME('now'))
3. Nije moguće koristiti ograničenje sadržaja null vrijednosti atributa u tablici (NOT
NULL) niti koristi izraz UNIQUE jer relacija može sadržavati redove, prema tome
nova kolona mora moći imati null vrijednosti, pa prema tome i sadržavati ponovljive
vrijednosti.
4. Također nije moguće dodati kolonu (atribut) koji će biti referenciran kao vanjski ključ
na drugu tablicu (relaciju), s izuzetkom ako se radi o obje prazne tablice, odnosno
predefiniranoj null vrijednosti atributa u obje tablice.
Primjer izmjene strukture baze podataka:
Ako se u tablicu (relaciju) osnovno_sredstvo koja ima sljedeću relacijsku shemu:
osnovno_sredstvo (sifra INTEGER PRIMARY KEY,
naziv VARCHAR(50),
datum_nabave TIMESTAMP)
treba dodati kolonu s vrijednosti osnovnog sredstva, to će se postići sljedećom instrukcijom:
ALTER TABLE osnovno_sredstvo ADD COLUMN vrijednost NUMERIC(10,2);
Rezultat izvođenja prethodne instrukcije provjerite uz pomoć instrukcije:
. shema osnovno_sredstvo
49
Ako je sve obavljeno kako treba rezultat obavljanja instrukcije ALTER TABLE je sljedeći:
Zadaci:
U SQLite-u kreirajte bazu podataka pod nazivom: proba1, te načinite tablice za sljedeći
relacijski model baze podataka:
PRVA(A1:Integer, DRUGA.A2:Integer, A3:Numeric(9,2))
DRUGA(B1:Integer, B2:VarChar(30))
1. Dodajte u prvu relaciju datumsko-vremenski atribut, te prikažite shemu prve relacije.
Priložite slikovne dokaze o obavljenom zadatku.
2. Preimenujte drugu relaciju iz naziva DRUGA u naziv TREĆA. Načinite popis
kreiranih relacija. Priložite slikovne dokaze o obavljenom zadatku.
3. Dodajte u treću tablicu alfanumeričko polje varijabilne dužine od 50 znakova, te
prikažite shemu treće relacije. Priložite slikovne dokaze o obavljenom zadatku.
Brisanje postojeće relacije (tablice)
Brisanje postojeće tablice (relacije) izvodi se instrukcijom DROP TABLE. Treba razlikovati
instrukciju DROP od instrukcije DELETE FROM. Instrukcija DROP briše tablicu zajedno s
njezinim sadržajem i svim vezama iz ukupne sheme baze podataka, dok instrukcija DELETE
FROM briše sadržaj tablice, no čuva njezinu definiciju. Opći izgled instrukcije DROP table
je:
DROP TABLE ime_tablice
Moguće je i brisanje uz prethodnu provjeru postojanja tablice. Ova provjera sprječava
prijavljivanje greške u izvođenju DROP TABLE instrukcije, ako tablica ne postoji, a njezin
oblik je:
DROP TABLE IF EXIST ime_tablice
50
DROP TABLE instrukcija može prouzrokovati inkonzistenciju baze podataka, stoga se ovu
instrukciju treba koristiti s posebnim oprezom ako je uključeno referenciranje preko vanjskog
i primarnog ključa u tablicama. Stoga je preporučljivo, ako je uključen relacijski integritet,
prije brisanja određene tablice, obrisati sve n-torke iz tablica koje mogu narušiti relacijski
integritet.
Primjer izmjene strukture baze podataka:
U primjeru prikazanom na slici, koji se nadovezuje na prethodne primjere, načinjena je
provjera postojanja tablica u otvorenoj bazi podataka instrukcijom:
. tables
te brisanje instrukcijom DROP TABLE postojeće tablice osnovno_sredstvo.
DROP TABLE osnovno_sredstvo;
Konačno, načinjena je provjera jeli tablica osnovnih sredstava stvarno i obrisana.
Zadatak:
1. Kreirajte bazu podataka pod nazivom zadatak3, te u njoj formirajte dvije relacije
prema sljedećoj relacijskoj shemi:
PRVA(A1:Integer, DRUGA.A2:Integer, A3:Numeric(9,2))
DRUGA(B1:Integer, B2:VarChar(30))
Provjerite jesu li te tablice kreirane, potom obrišite tablice suprotnim redoslijedom od
redoslijeda kreiranja. Priložite slikovni dokaz o obavljenom zadatku.
51
4.2. SQL Instrukcije DML-a
Rezultati djelovanja DML instrukcija su:
umetanje redova – n-torki (vrijednost atributa entiteta) u relaciju (tablicu),
izmjena redova – n-torki (vrijednost atributa entiteta) u relaciji (tablici),
brisanje redova – n-torki (vrijednost atributa entiteta) u relaciji (tablici) i
izdvajanje redova (n-torki) i stupaca (atributa) iz tablice prema definiranim kriterijima.
Instrukcije koje to omogućavaju su:
INSERT
UPDATE
DELETE
SELECT
Na polaznoj razini poznavanja SQL-a dovoljno je i osnovno poznavanje prethodno navedenih
instrukcija za rad s n-torkama tablica (relacija), stoga će se u ovom praktikumu tim
instrukcijama posvetiti pozornost samo u pogledu njihove elementarne upotrebe. Treba
napomenuti da se posljednja od instrukcija koja će se obraditi, instrukcija SELECT često
svrstava u poseban podjezik SQL-a, u tzv. DQL (Data Query Language), no nerijetko se
svrstava i u DML.
Umetanje redaka (n-torki) u tablicu (relaciju)
Unos novog reda (n-torke) u tablicu obavlja se uz pomoć instrukcije INSERT.
Najjednostavniji oblik upotrebe INSERT instrukcije je sljedeći:
INSERT INTO ime_tablice VALUES (vrijednost1, vrijednost2,..., vrijednostN);
Prilikom unosa vrijednosti u zagradama, redoslijed vrijednosti mora odgovarati redoslijedu
atributa u shemi relacije. Ako je redoslijed atributa nepoznat, moguće ga je saznati pomoću
SQLite instrukcije:
. shema ime_tablice
Prilikom unosa n-torke na navedeni način potrebno je unijeti vrijednosti za sve atribute. Ako
neka vrijednost atributa u n-torki nije poznata ili se radi o primarnom ključu definiranom kao
cjelobrojna vrijednost (integer) koja se automatski uvećava (autoincrement), tada se unosi null
vrijednost. Primjera radi, ako je shema relacije:
PRIMJER(a INTEGER PRIMARY KEY AUTOINCREMENT,
b VARCHAR(5), c INTEGER, d TEXT,
e NUMERIC(5,2), f TIMESTAMP)
tada unos vrijednosti za n-torku može biti:
INSERT INTO primjer VALUES (null, “pet“, 10, “ovo je tekst“, 999.99, “2011-12-23“);
52
Treba uočiti:
Autoincrement atribut se unosi kao null vrijednost
VarChar atribut se unosi kao alfanumerički sadržaj pod navodnicima, isto kao i tekst
Cijelo-brojčana vrijednost se unosi kao cijeli broj
Brojčana vrijednost se unosi s decimalnom točkom
Vremenska vrijednost se unosi pod navodnicima u američkom obliku zapisivanja
datuma i vremena: GGGG-MM-DD SS:MM
Ako se podaci unose u više relacija, a relacije su međusobno povezane relacijskim
integritetom, prvo se podaci unose u relacije roditelje (nadređene relacije odnosno relacije
koje u vezi sudjeluju s 1), a potom u relacije djecu (podređene relacije, odnosno relacije koje
u vezi sudjeluju s M).
Ukoliko se podatke ne želi unositi redoslijedom kojim su poredani atributi u relacijskoj shemi
relacije (tablice), moguće ih je unijeti željenim redoslijedom, s tim da se prije toga moraju
navesti unutar instrukcije INSERT nazivi atributa. Opći oblik za takav oblik unošenja n-torke
je sljedeći:
INSERT INTO ime_tablice (naziv_atributa1, naziv_atributa2, ..., naziv_atributaN)
VALUES (vrijednost1, vrijednost2, ..., vrijednostN);
Prilikom ovakvog unosa podataka moguće je unijeti samo vrijednost primarnog ključa n-torke
i n-torka će biti formirana sa sadržajem predefiniranih ili null vrijednosti. Također je moguć
unos proizvoljnog broja vrijednosti atributa uz primarni ključ jedne n-torke, što znači da se ne
moraju unijeti svi atributi od jednom.
Primjeri unosa podataka u relaciju:
Formirana je jednostavna relacija (tablica) sljedećom shemom podataka:
INSERT_TEST(A:Integer, B:Innteger, C:text)
U tablicu (relaciju) su uneseni podaci (n-torke) prema oba navedena sustava unosa podataka,
što prikazuje sljedeća slika:
53
Treba uočiti kako je prilikom unosa prve n-torke načinjena greška u pisanju INSERT
instrukcije (syntax error) jer je izostavljena jedna od ključnih riječi, a to je riječ VALUES.
Potom su unesena dva reda (n-torke) bez upisa atributa kojima se vrijednosti dodjeljuju. Te n-
torke unesene su sukladno redoslijedu atributa u shemi relacije. Potom je pokušan unos reda
bez jedne vrijednosti atributa n-torke što je rezultiralo greškom u unosu. Sljedeća tri unosa su
primjeri mogućih unosa n-torki uz navođenje atributa. Posljednja u nizu instrukcija je SQL
instrukcija SELECT uz pomoć koje su ispisane unesene n-torke.
Zadatak:
1. Kreirajte bazu podataka i u njoj relaciju sljedeće relacijske sheme:
TEST(T1:TEXT, T2:TIMESTAMP, T3:INTEGER, T4:NUMERIC(8,2))
Upišite u relaciju 10 n-torki kombinirajući različite oblike upisa podataka. Priložite
slikovni dokaz o obavljenom zadatku.
2. Kreirajte u bazi podataka relacije prema sljedećoj relacijsko shemi:
PRVA(A1:Integer, DRUGA.A2:Integer, A3:Numeric(9,2))
DRUGA(B1:Integer, B2:VarChar(30))
Unesite u nadređenu relaciju pet n-torki, a u podređenu deset n-torki. Prije kreiranja
relacija uključite instrukcijom PRAGMA relacijski integritet, a kroz vanjski ključ
definirajte kaskadno brisanje i ispravljanje. Priložite slikovni dokaz o obavljenom
zadatku.
Izmjena vrijednosti redaka (n-torke) u tablici (relaciji)
Izmjena vrijednost retka (n-torke) u relaciji obavlja se pomoću instrukcije UPDATE. Radi se
o instrukciji koja može poprimiti vrlo složene oblike, no na početničkoj razini poznavanja
SQL-a dovoljno je znati načiniti zamjenu:
54
svih vrijednosti nekog ili više atributa u tablici i
određenih vrijednosti nekog ili više atributa u tablici.
Opći oblik UPDATE instrukcije za zamjenu svih vrijednosti više atributa u tablici je:
UPDATE ime_tablice SET naziv_atributa1=vrijednost1,
naziv_atributa2=vrijednost2, …, naziv_atributaN=vrijednostN;
Ovu instrukciju nije moguće primijeniti za atribute koji su definirani kao primarni ključ, niti
atribute koji su definirani kao UNIQUE. Također ovom instrukcijom nije moguće unijeti u
NOT NULL atribute vrijednost null.
Primjer zamjene svih vrijednosti nekog atributa instrukcijom UPDATE
Sljedeća slika prikazuje zamjenu svih vrijednosti atributa B u tablici s novom vrijednosti:
Kod zamjene određenih vrijednosti nekog ili više atributa u tablici (relaciji) potrebno je
definirati uvjet koji će odrediti na kojim mjestima treba zamjena biti učinjena. Uvjet se
definira unutar iskaza koji započinje ključnom riječi WHERE unutar instrukcije UPDATE.
Opći oblik UPDATE instrukcije za zamjenu određenih vrijednosti nekog ili više atributa u
tablici je:
UPDATE ime_tablice SET naziv_atributa1=vrijednost1,
naziv_atributa2=vrijednost2, …, naziv_atributaN=vrijednostN
WHERE naziv_atributaX=postojeća_vrijednostX;
Gdje X može poprimiti vrijednost od 1 do N
U prethodno prikazanom općem izrazu instrukcije UPDATE, s kojom se obavlja uvjetna
zamjena vrijednosti u tablici, prikazana je upotreba jednostavnog logičkog izraza. Uz znak
jednakosti SQLite u jednostavnim izrazima koristi i sljedeće operatore <, <=, >, >=, !=.
Složeni se uvjeti kreiraju kombinacijom jednostavnih uvjeta prema načelima trovalentne
55
logike opisane u točki 2.1. Kao logički operatori povezivanja koriste se logički operatori AND
i OR. Primjer jednog složenog logičkog izraza u UPDATE instrukciji može biti:
UPDATE ime_tablice SET naziv_atributa2=vrijednost WHERE
naziv_atributa3 > 100 and naziv_atributa3<1000;
U ovom slučaju zamijenit će se vrijednosti drugog atributa novom vrijednosti, svagdje gdje je
treći atribut veći od 100 i manji od 1000.
Načelo izgradnje složenih uvjeta primjenjivat će se istovjetno i kod instrukcija DELETE i
SELECT.
Primjer složenog uvjeta za zamjenu vrijednosti atributa instrukcijom UPDATE
Na slici je prikazan slučaj kada se vrijednost atributa B mijenja u novu vrijednost ako je
vrijednost atributa A=3 ili vrijednost atributa C= „Peti red“:
Zadaci:
1. Načinite izmjenu vrijednosti jednog atributa u tablici (relaciji) TEST koja je kreirana u
okviru prethodne skupine zadataka. Priložite slikovni dokaz o obavljenom zadatku.
2. Načinite pet proizvoljnih izmjena vrijednosti atributa u tablici (relaciji) PRVA koja je
kreirana u okviru prethodne skupine zadataka, tako da načinite dva složena upita, te
kombinirate barem četiri različita znaka usporedbe. Priložite slikovni dokaz o
obavljenom zadatku.
Brisanje vrijednosti redaka (n-torke) u tablici (relaciji)
Brisanje vrijednost retka (n-torke) u relaciji obavlja se pomoću instrukcije DELETE. Radi se
o još jednoj instrukciji koja zbog uvjeta WHERE može poprimiti vrlo složene oblike, ali i
zbog drugih razloga, npr. zbog uvjetnog brisanja s povezanim tablicama, no na početničkoj
razini poznavanja SQL-a dovoljno je znati načiniti brisanje:
56
n-torki koje zadovoljavaju određeni uvjet i
brisanje svih n-torki iz tablice (relacije).
Opći oblik instrukcije za uvjetno brisanje n-torki iz tablice s jednostavnim uvjetom je:
DELETE FROM ime_tablice WHERE naziv_atributaX=postojeća_vrijednostX;
gdje X može poprimiti vrijednost od 1 do N.
Primjer brisanja odabranih redaka (n-torki) it tablice (relacije)
Sljedeća slika prikazuje brisanje redova (n-torki) u tablici (relaciji) insert_test gdje je
vrijednost atributa B <> 10:
Kako je iz prethodne slike vidljivo, iz relacije su izbrisani svi redovi u kojima je vrijednost
atributa B bila različita od 10, a to su oni redovi u kojima je vrijednost atributa B bila 5.
Brisanje cjelokupnog sadržaja tablice (relacije), odnosno brisanje svih redova (n-torki) u
tablici (relaciji) obavlja se sljedećom instrukcijom:
DELETE FROM ime_tablice;
Primjer brisanja svih redova (n-torki) iz tablice (relacije)
Način brisanja svih n-torki iz relacije insert_test prikazan je na sljedećoj slici:
57
Zadaci:
1. Izbrišite sve redove (n-torke) u tablici (relaciji) TEST koja je kreirana u okviru
prethodne skupine zadataka. Priložite slikovni dokaz o obavljenom zadatku.
2. Načinite pet proizvoljnih brisanja n-torki u tablici (relaciji) PRVA koja je kreirana u
okviru prethodne skupine zadataka, tako da načinite dva složena upita za brisanje, te
kombinirate barem četiri različita znaka usporedbe. Priložite slikovni dokaz o
obavljenom zadatku.
Prikaz vrijednosti iz tablice (relacije)
Instrukcija SQL-a koja omogućava prikaz sadržaja cjelokupne tablice je instrukcija SELECT.
Ovo je jedna od najsloženijih instrukcija SQL-a i zahtjeva dobro poznavanje algebarskih
operacija, posebice selekciju, projekciju i pridruživanje. Od početnika se očekuju elementarna
znanja vezana za upotrebu SELECT instrukcije a to su znanja vezana za rad s jednom
tablicom i to:
prikaz svih redova i stupaca iz tablice (relacije),
izdvajanje odabranih stupaca i svih redova iz tablice (relacije),
izdvajanje odabranih redova i svih stupaca iz tablice (relacije) i
izdvajanje odabranih redova i odabranih stupaca iz tablice (relacije)
Opći oblik SELECT instrukcije koja omogućava izdvajanje svih redova i stupaca iz tablice
(relacije) je:
SELECT * FROM ime_tablice;
Oznaka zvjezdice („*“) je tzv. joker i on zamjenjuje nazive svih stupaca relacije. U SQLite-u
je zgodno prije izvođenja instrukcije SELECT načiniti prilagodbu prikaza tablice uz pomoć
instrukcija SQLite-a:
sqlite> .headers ON
sqlite> .mode columns
58
Primjer prikaza svih redova i stupaca iz tablice (relacije)
Na slici koja slijedi prikazan je rezultat izvođenja SELECT instrukcije. Njome su iz relacije
test ispisane sve n-torke (redovi) relacije (tablice). S obzirom da su prije toga zadane
instrukcije SQLite-a za prikaz zaglavlja tablice i formiranje kolonskog ispisa, rezultat
izvođenja ove operacije je prikazan u obliku tablice. Umjesto na ekran moguće je izvesti ispis
rezultata u datoteku. To se čini instrukcijom SQLitea:
sqlite> .output ime_datoteke.txt
Da bi se vratio ispis rezultata na ekran potrebno je nakon izvođenja SELECT instrukcije
uključiti ekranski prikaz SQLite instrukcijom:
sqlite> .output stdout
Opći oblik SELECT instrukcije koja omogućava izdvajanje svih redova i odabranih stupaca, u
ovom slučaju prvog i trećeg stupca (atributa) iz tablice (relacije) je:
SELECT naziv_atributa1, naziv_atributa3 FROM ime_tablice;
Redoslijed atributa kod navođenja atributa, kao i broj atributa (minimalno jedan a maksimalno
onoliko koliko atributa ima) nije bitan.
Primjer prikaza svih redova i odabranih stupaca iz tablice (relacije)
Na sljedećoj slici prikazana je projekcija relacije test kojom su izdvojeni prvi i teći stupac
(atribut) tablice relacije, te prikazane sve n-torke:
59
Opći oblik SELECT instrukcije koja omogućava izdvajanje svih stupaca (atributa) i odabranih
redova (n-torki) iz tablice (relacije) je:
SELECT * FROM ime_tablice WHERE naziv_atributaX=postojeća_vrijednostX;
gdje X može poprimiti vrijednost od 1 do N.
Uočite da se u ovom slučaju radi o jednostavnom uvjetu izdvajanja redova (n-torki) iz tablice
(relacije). Prema pravilima objašnjenim uz instrukciju UPDATE, moguće je, obično i
potrebno za izdvajanje redaka, odnosno selekciju relacije, koristiti složene uvjete.
Primjer izdvajanja odabranih redova i svih stupaca iz tablice (relacije)
Na slici koja slijedi prikazana je mogućnost izdvajanja redaka (n-torki) iz tablice upotrebom
uvjeta izdvajanja. U primjeru su izdvojene sve n-torke kod kojih je atribut B<=5.
60
Projekcija i selekcija se nad tablicom (relacijom) izvodi temeljem SELECT instrukcije koja
ima sljedeći opći oblik za jednostavni upit:
SELECT nazivi_atributa WHERE naziv_atributa=postojeća_vrijednost;
Kako je iz uopćene forme upita vidljivo, upit je kombinacija SELECT instrukcije za
projekciju i SELECT instrukcije za selekciju.
Primjer izdvajanja željenih redova(n-torki) i željenih stupaca (atributa) iz tablice (relacije)
Na slici je prikazano izdvajanje trećeg i drugog stupca (atributa) iz tablice (relacije) test, gdje
je vrijednost atributa C=“Prvi Red“ ili je vrijednost atributa B>5.
61
Zadaci:
Kreirajte bazu podataka i u njoj relaciju sljedeće relacijske sheme:
TEST(T1:TEXT, T2:TIMESTAMP, T3:INTEGER, T4:NUMERIC(8,2))
Upišite u relaciju 20 n-torki kombinirajući različite oblike upisa podataka. Pripremite tablični
ispisa zaglavljem rezultata u datoteku koja će se zvati: select.txt. Nakon izvođenja sva četiri
zadatka preuzmite sadržaj datoteke select.txt u MS Word ili njemu sličan program, te ispišite
rezultate i priložite ih kao dokaz o izvođenju ove vježbe. Također priložite slikovni dokaz
(ekranski prikaz SQLite-a) obavljanja zadataka.
1. Ispišite kompletan sadržaj relacije test u datoteku.
2. Načinite dvije projekcije relacije test u datoteku, s tim da prvi ispis sadrži atribute T3 i
T1, a drugi ispis atribute T2, T2, T3 i T4.
3. Izdvojite iz relacije test one atribute koji zadovoljavaju jedan složen proizvoljan uvjet.
4. Izdvojite iz relacije test atribute T1 i T4 za one atribute koji zadovoljavaju jedan
jednostavan proizvoljan uvjet.