-
0
Ekonomski fakultet u Osijeku Osijek, Gajev trg 7 Baze podataka i
poslovni procesi
PRAKTIKUM ZA ŠKOLSKU GODINU 2011/2012
Student:_____________________________
Indeks br.: ____________________________
Smjer: ____________________________
Skupina vježbi: „Napredni“ „Šaran“
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
demonstratorima. Demonstratori će biti organizirani 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
rješene, te nakon što se pregledom utvrdi da imaju većinu (preko
50%) točno riješenih zadataka, praktikum se priznaje kao zamjena za
temeljne vježbe. 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: =,
>, 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 σ ŠIFRA23 ( 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
-
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
-
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.