PRAKTIKUM ZA ŠKOLSKU GODINU

Save this PDF as:
 WORD  PNG  TXT  JPG

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "PRAKTIKUM ZA ŠKOLSKU GODINU"

Transcript

1 Ekonomski fakultet u Osijeku Osijek, Gajev trg 7 Baze podataka i poslovni procesi PRAKTIKUM ZA ŠKOLSKU GODINU 2014/2015 Student: Indeks br.: Smjer: Predano:

2 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. 1

3 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 2

4 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 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. 3

5 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 4

6 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. 5

7 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 Vrijeme Razlog izlaska dolaska odlaska Kovač Petar :00 15:00 Žderić Mirko :00 11:00 Sastanak Vekić Anka :00 15:00 Butko Želimir :00 15:00 Žderić Mirko :20 15:00 Kovač Petar :00 15:00 Žderić Mirko :00 11:00 Vekić Anka :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. 6

8 2. Korak. Priprema i prilagodba atributa relacijskom modelu podataka PREZIME I IME DOLAZAK ODLAZAK RAZLOG ODLASKA Kovač Petar :00: :00:00 Žderić Mirko :00: :00:00 Sastanak Vekić Anka :00: :00:00 Butko Želimir :00: :00:00 Žderić Mirko :20: :00:00 Kovač Petar :00: :00:00 Žderić Mirko :00: :00:00 Vekić Anka :00: :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 :00: :00: :00: :00:00 Sastanak :00: :00: :00: :00: :20: :00: :00: :00: :00: :00: :00: :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. 7

9 4. Korak. Izdvajanje stupaca koji se mogu šifrirati (šifarnika) iz tablice dnevnika DJELATNIK DOLAZAK ODLAZAK ŠIFRA RAZLOGA :00: :00: :00: :00: :00: :00: :00: :00: :20: :00: :00: :00: :00: :00: :00: :00:00 ŠIFRA RAZLOGA RAZLOG ODLASKA 1 Sastanak 2 Pauza 3 Bolest 4 Osobni razlozi DJELATNIK PREZIME I IME 100 Kovač Petar 120 Žderić Mirko 130 Vekić Anka 144 Butko Želimir 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. 8

10 5. Korak. Definiranje primarnih ključeva AUTOBROJ DJELATNIK DOLAZAK ODLAZAK ŠIFRA RAZLOGA :00: :00: :00: :00: :00: :00: :00: :00: :20: :00: :00: :00: :00: :00: :00: :00:00 ŠIFRA RAZLOGA RAZLOG ODLASKA 1 Sastanak 2 Pauza 3 Bolest 4 Osobni razlozi DJELATNIK PREZIME I IME 100 Kovač Petar 120 Žderić Mirko 130 Vekić Anka 144 Butko Želimir 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. 9

11 1 6. Korak. Uspostavljanje veza između relacija DJELATNIK PREZIME I IME 100 Kovač Petar 120 Žderić Mirko 130 Vekić Anka 144 Butko Želimir M M AUTOBROJ DJELATNIK DOLAZAK ODLAZAK ŠIFRA RAZLOGA :00: :00: :00: :00: :00: :00: :00: :00: :20: :00: :00: :00: :00: :00: :00: :00:00 1 ŠIFRA RAZLOGA RAZLOG ODLASKA 1 Sastanak 2 Pauza 3 Bolest 4 Osobni razlozi 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 10

12 vrijednost i za atribute obiju šifara. U praksi se zbog mogućih vodećih nula (npr ) 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 ili RADNO_VRIJEME ( AUTOBROJ, DJELATNIK.DJELATNIK, DOLAZAK, ODLAZAK, ODLAZAK.ŠIFRA_RAZLOGA) DJELATNIK ( DJELATNIK, PREZIME_I_IME) ODLAZAK (ŠIFRA_RAZLOGA, RAZLOG_ODLASKA) 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. 11

13 Pomoć u rješavanju zadatka 2.: Temeljnica za knjiženje u financijskom računovodstvu Datum TEMELJNICA ZA KNJIŽENJE br. KONTO OPIS DUGUJE POTRAŽUJE STRANA DNEVNIKA NALOG ZA KNJIŽ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 12

14 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). 13

15 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. Konto - skladište od Kupac: Narudžbenica br.: od ŠIFRA NAZIV JEDINICA MJERE Količina Cijena PDV Vrijednost Preuzeo: Kontrolirao: Primio: Likvidirao: 14

16 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 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. 15

17 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)) 16

18 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 Jabuka Kruška Breskva 6 25 b (PDV, KOLIČINA, BILJKA, ŠIFRA) - Unijski kompatibilna relacija PDV KOLIČINA BILJKA ŠIFRA Višnja Mandarina Borovnica 324 c (OZNAKA, NAZIV, BROJ KOMADA, PDV) - Unijski kompatibilna relacija OZNAKA NAZIV BROJ KOMADA PDV 333 Orah Šljiva 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 Mandarina

19 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 Šljiva 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 f 2 g a 4 f 7 1 Jesu li ove dvije relacije unijski kompatibilne? Zašto? 18

20 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: 19

21 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 20

22 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 21

23 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 ) 22

24 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 23

25 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 ) 24

26 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 25

27 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 ) 26

28 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 Ribar Petar 17 Statistika Grgić Franc 11 Informatika Grgić Franc 17 Statistika Horvat Mirjana 11 Informatika 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. 27

29 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? 28

30 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 29

31 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 Statistika Matematika Engleski jezik Njemački jezik 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 30

32 Rješenje: T 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 Jeli u ovom slučaju tablica ujedno i relacija? 31

33 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: 32

34 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 Statistika Matematika Engleski jezik Njemački jezik Relacija σ ECTS=5 ( r ) ŠIFRA PREDMET ECTS PREDAVANJA SEMINARI VJEŽBE 23 Engleski jezik Njemački jezik Relacija σ SEMINATI>0 ( r ) ŠIFRA PREDMET ECTS PREDAVANJA SEMINARI VJEŽBE 11 Informatika Statistika Relacija σ PREDAVANJA VEŽBE ( r ) ŠIFRA PREDMET ECTS PREDAVANJA SEMINARI VJEŽBE 11 Informatika Statistika Matematika Relacija σ ŠIFRA<17 ŠIFRA>23 ( r ) ŠIFRA PREDMET ECTS PREDAVANJA SEMINARI VJEŽBE 11 Informatika Njemački jezik

35 Relacija σ ŠIFRA 17 ŠIFRA 23 ( r ) ŠIFRA PREDMET ECTS PREDAVANJA SEMINARI VJEŽBE 17 Statistika Matematika Engleski jezik 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 34

36 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 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 35

37 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: 36

38 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 klijentserverskom 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 SQLiteu. 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 Preuzimanje programa s Interneta i pokretanje programa SQLite Program na standardan način možete pronaći i skinuti na Web adresi: Otvaranjem navedene poveznice dobiva se sljedeća Web stranica: 37

39 Zaokruženi dio, odnosno poveznica: sqlite-shell-win32-x zip ( KB) je mjesto koje treba izabrati, te kopirati na vlastito računalo. Preporuča se preuzimanje aktualne verzije programa SQLite, a ona je 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: - 38

40 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: 39

41 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: 40

42 Na ekvivalentan način, kreiranjem batch datoteka moguće je formirati ikone za pokretanje sqlite3 programskog sustava u kombinaciji s drugim nazivima baza podataka 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) 41

43 .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 42

44 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. 43

45 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čkazarez (;) 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: 44

46 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; 45

47 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); 46

48 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: 47

49 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 48

50 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 49

51 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. 50

52 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, , ); 51

53 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: 52

54 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: 53

55 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 54

56 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 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: 55