You are on page 1of 32

SVEUILITE U ZAGREBU

FAKULTET ORGANIZACIJE I INFORMATIKE


VARADIN

Roko Labrovi

BAZA PODATAKA ZA POTREBE KNJINICE


PROJEKT IZ KOLEGIJA BAZE PODATAKA 2

Varadin, 2014.

SVEUILITE U ZAGREBU
FAKULTET ORGANIZACIJE I INFORMATIKE
VARADIN

Roko Labrovi
Redoviti student
Broj indeksa: 40021/11-R
Smjer: Informacijski sustavi
Preddiplomski studij

BAZA PODATAKA ZA POTREBE KNJINICE


PROJEKT IZ KOLEGIJA BAZE PODATAKA 2

Mentor:
Prof. dr. sc. Kornelije Rabuzin

Varadin, sijeanj 2013.

Sadraj
1. UVOD ......................................................................................................................................... 1
2. OPIS BAZE PODATAKA ZA POTREBE VETERINARSKE STANICE ......................... 2
3. IZRADA BAZE PODATAKA ................................................................................................. 4
3.1. TABLICE ............................................................................................................................. 4
3.2. ERA MODEL..................................................................................................................... 10
3.3. UNOS PODATAKA .......................................................................................................... 10
3.4. UPITI.................................................................................................................................. 18
3.5. POGLEDI ........................................................................................................................... 21
3.6. OKIDAI ........................................................................................................................... 23
4. ZAKLJUAK .......................................................................................................................... 26
LITERATURA ............................................................................................................................ 27

1. Uvod
Potrebno je osmisliti i realizirati bazu podataka koja moe unikovito posluiti za potrebe
knjinice. Svi samo u procesu kolovanja kad tad morali postati korisnikom neke od knjinice
kako bi pribavili potrebnu literaturu. Na taj nain moemo analizirati kako svaka knjinica
raspolae s znatnom koliinom literature, te da pojedine literature ima u nekoliko primjera npr.
nekoliko primjeraka iste knjige, kako su knjige rasporeene abecedno prema policama, odnosno
autorima zatim kako bi posudili odreenu knjigu moramo biti i lan knjinice itd. Ovim
projektom izraditi u potrebnu bazu podataka za potrebu knjinice.

2. Opis baze podataka

Bazu podataka koristimo zbog meusobnog povezivanja podataka, njihovog pohranjivanja uz


iskljuivanje bespotrebnog stvaranja redudancije. Podaci u bazi podataka su pohranjeni na nain
neovisan o programima koji ih koriste. Prilikom dodavanja novih podataka, mijenjanja i
pretraivanja postojeih podataka primjenjuje se zajedniki i kontrolirani pristup. Tablice u bazi
podataka su strukturirane tako da je omoguena jednostavna nadopuna sa potrebnim
informacijama. Takoer sve su tablice svedene na 3. normalnu formu te je time osigurano da
nee biti redudancije podataka iako postoje rijetki sluajevi u kojima 3. normalna forma nije
dovoljna.

Pri izradi baze koja e omoguavati developeru razvoj takve aplikacije, prvi korak bi bio
kreiranje potrebnih tablica (TABLE), odnosno relacija koje e u bazi imati odreene odnose.
Primjerice, raun e sadravati vie artikla, a artikl e se nalaziti na vie rauna. U tom sluaju e
biti potrebno dodati novu tablicu stavka rauna.
Bolji pregled baze podataka omoguit e ERA model, koji se sastoji od entiteta (tablice),
veza i atributa (stupci u tablicama).
Nakon kreiranih tablica, u bazu e obavezno biti potrebno unijeti skup polaznih
podataka. U svrhu projekta, podaci e biti izmiljeni.
Nad uneenim podacima je potrebno izvriti vie kombinacija upita (QUERY). Upiti su
bitna komponenta svake baze podataka. Upiti e omoguiti traenje, unaanje, te mijenjanje
podataka iz baze podataka.
Pretraivanje baze e uvelike olakati pogledi (VIEW). Pogledi su virtualne relacije koje
nastaju kao rezultat nekog upita. Jedan primjer gdje bi pogled mogao biti koristan je kod nabave,
ako bi se zahtijevao naziv i koliina prodane robe po datumima. Time bi se mogli prikupiti
podaci o robi koja je najprodavanija, pa i samim time najpotrebnija i via po prioritetu za
naruivanje.

Takoer vaan dio baze podataka za knjinicu bili bi okidai (TRIGGER). Okidai su objekti u
bazi podataka koji izvravaju odreene akcije kao odgovor na dogaaj koji ih je pokrenuo. Za
bazu knjinice bi npr. bio potreban okida koji sprjeava posudbu knjige ako korisnik kod sebe
ve ima podignute 4 knjige.
Kod izrade baze podataka za potrebe veterinarske stanice bit e koriteni:

sustav PostgreSQL 9.2

alat za konceptualno modeliranje baza podataka MicroOLAP Database Designer


for PostgreSQL

3. Izrada baze podataka

Nakon opisanih glavnih funkcionalnosti kojima baza podataka u ovom sluaju mora pruati
potporu, potrebno je krenuti u korake izrade same baze.

3.1. Tablice
Tablice e se kreirati na sljedei nain:
1. Upisivanje SQL naredbi ukljuujui kljune izraze CREATE TABLE u SQL Executoru
unutar alata MicroOLAP Database Designer for PostgreSQL
2. Pomou odabira "Reverse Engineer PostgreSQL Database" omoguavanje se generiranje
modela baze

knjiga
CREATE TABLE "knjiga" (
"knjiga_id" SERIAL NOT NULL,

-ifra knjige

"izdavac_id" int4,

-ifra izdavaa

"godina" int4,

-Godina izdanja

"broj_stranica" int4,

-Broj stranica

"datum_uvodenja" int4,

-Datum uvoenja knjige

"isbn" varchar(20),

-ISBN knjige

PRIMARY KEY("knjiga_id")
);

Svaka knjiga ima svoj jedinstveni ID. Naziv djela je sadran u relaciji Djelo kojoj se pristupa
preko atribua djelo_id. Slino vrijedi i za izdavaa knjige. Knjiga je verzija nekog djela od
nekog izdavaa.

izdavac
CREATE TABLE "izdavac" (
"izdavac_id" SERIAL NOT NULL,

-ifra izdavaca

"naziv" varchar(20),

-Naziv izdavaa

PRIMARY KEY("izdavac_id")
);
djelo
CREATE TABLE "djelo" (
"djelo_id" SERIAL NOT NULL,

-ifra djela

"naziv" varchar(20),

-Naziv djela

"kratki_sadrzaj" varchar(20),

-Kratak sadrzaj djela

PRIMARY KEY("izdavac_id")
);
uvez
CREATE TABLE "uvez" (
"uvez_id" SERIAL NOT NULL,

-ifra uveza

"vrsta" varchar(10),

-Vrsta uveza (meki/tvrdi)

PRIMARY KEY("uvez_id")
);

autor
CREATE TABLE "autor" (
"autor_id" SERIAL NOT NULL,

-ifra autora

"ime" varchar(20),

-Ime autora

"prezime" varchar(20),

-Prezime autora

PRIMARY KEY("autor_id")
);

zanr
CREATE TABLE "zanr" (
"zanr_id" int4 NOT NULL,

-ifra autora

"naziv" int4 NOT NULL,

-ifra djela

PRIMARY KEY "zanr_id")


);

Svako djelo moe pripadati jednom ili vie anrova, koja su brojano prikazani na sljedei nain:
1. Kriminalistika
2. Horror
3. Znanstvena fantastika
4. Roman
5. Filozofija

polica
CREATE TABLE "polica" (
"polica_id" SERIAL NOT NULL,

-ifra police

"naziv" varchar(20),

-Naziv police

PRIMARY KEY("polica_id")
);

predmet
CREATE TABLE "polica" (
"predmet_id" SERIAL NOT NULL,

-ifra police

"knjiga_id" varchar(20),

-ifra knjige

"Polica_id" varchar(20),

-ifra police

PRIMARY KEY("polica_id")
);

Knjinica ima vie verzija iste knjige, a svaka verzija moe imati jedan ili vie primjeraka,
odnosno predmeta. Relacija Predmet sadri podatke o tome gdje je fiziki smjetena odreeni
predmet.

knjiznica
CREATE TABLE "knjiznica" (
"knjiznica_id" SERIAL NOT NULL,

-ifra knjinice

"naziv" varchar(30),

-Naziv knjinice

"adresa" varchar(30),

-Adresa knjinice

"postanski_broj" int4,

-Potanski broj

"godina_otvaranja" int4,

-Godina otvorenja

"vlasnik" varchar(30),

-Vlasnik

"broj_telefona" varchar(30),

-Broj telefona

"email" varchar(30),

-Email adresa

PRIMARY KEY("knjiznica_id"));

mjesto
CREATE TABLE "mjesto" (
"postanski_broj" SERIAL NOT NULL,

-Potanski broj

"naziv" varchar(30),

-Naziv mjesta

PRIMARY KEY("postanski_broj")
);

korisnik
CREATE TABLE "korisnik" (
"korisnik_id" SERIAL NOT NULL,

-ifra korisnika

"ime" varchar(20),

-Ime korisnika

"prezime" varchar(30),

-Prezime korisnika

"adresa" varchar(30),

-Adresa korisnika

"postanski_broj" int4,

-Potanski broj

"broj_telefona" varchar(20),

-Broj telefona

"datum_uclanjenja" date,

-Datum ulanjenja

"datum_placanja_clanarine" date,

-Datum uplate lanarine

PRIMARY KEY("korisnik_id")
);

posudjena_knjiga
CREATE TABLE "posudjena_knjiga" (
"predmet_id" int4 NOT NULL,

-ifra predmeta

"korisnik_id" int4 NOT NULL,

-ifra korisnika

"datum_posudbe" date,

-Datum posudbe

"datum_povratka" date,

-Datum povratka

PRIMARY KEY("predmet_id","korisnik_id")

);
rezervacija
CREATE TABLE "rezervacija" (
"predmet_id" int4 NOT NULL,

-ifra predmeta

"korisnik_id" int4 NOT NULL,

-ifra korisnika

"datum_rezervacije" date,

-Datum rezervacije

PRIMARY KEY("predmet_id","korisnik_id")
);

3.2. ERA model


ERA model baze je generiran pomou reverznog inenjerstva. Nakon kreiranja tablica u
SQL Executoru, odabirom "Reverse Engineer PostgreSQL Database" u alatu MicroOLAP
Database Designer for PostgreSQL se generira model na temelju postojee baze.

10

Slika 3.2.1. ERA model

3.3. Unos podataka


U kreirane tablice je potrebno unijeti skup polaznih podataka. Poto je izrada baze
podataka za potrebe veterinarske stanice u svrhu projekta, uneeni podaci e biti izmiljeni.
Podaci e biti uneeni koritenjem izraza INSERT INTO u SQL Executoru. Nakon toga
je potrebno kreirati upit tipa SELECT * FROM naziv_tablice. Odnosno, upit e vratiti sve
atribute iz odreene tablice. Tim upitom e se obaviti provjera uneenih podataka u pojedinu
tablicu.
-- uvez
insert into uvez values
(default, 'meki'),
(default, 'tvrdi');
SELECT * FROM uvez;

Slika 3.3.1. Tablica "uvez"


-- Polica
insert into polica values
(default, 'Polica 1'),
(default, 'Polica 2'),
(default, 'Polica 3'),
(default, 'Polica 4'),
(default, 'Polica 5');

Slika 3.3.2. Tablica "polica"


10

-- izdavac
insert into izdavac values
(default, 'Algoritam'),
(default, 'Alfa'),
(default, 'Differo'),
(default, 'Mozaik knjiga'),
(default, 'Profil'),
(default, 'Verbum');

Slika 3.3.3. Tablica "izdavac"


-- djelo
insert into djelo values
(default, 'ohar', 'Kratki sadrzaj 1'),
(default, 'Iskonsko zlo', 'Kratki sadrzaj 2'),
(default, 'Dogodilo se jedne vecer', 'Kratki sadrzaj 3'),
(default, 'Divni novi svijet', 'Kratki sadrzaj 4'),
(default, 'Djevojka koja se igrala s vatrom', 'Kratki sadrzaj 5'),
(default, 'Zatoenik neba', 'Kratki sadrzaj 6'),
(default, 'Rugalica', 'Kratki sadrzaj 7'),
(default, 'Zeleni kvadrat', 'Kratki sadrzaj 8'),
(default, 'Kraj vremena', 'Kratki sadrzaj 8'),
(default, 'Stube prema nebu', 'Kratki sadrzaj 10'),
(default, 'Ulicna lampa', 'Kratki sadrzaj 11'),
(default, 'Let leptira', 'Kratki sadrzaj 12'),
(default, 'Kolodvor Zoo', 'Kratki sadrzaj 13'),
(default, 'Krvavi meridijan', 'Kratki sadrzaj 14'),
(default, 'Marina', 'Kratki sadrzaj 15'),
(default, 'Sirova koa', 'Kratki sadrzaj 16'),
(default, 'Momentum efekt', 'Kratki sadrzaj 17'),
(default, 'Simetrija', 'Kratki sadrzaj 18'),

11

(default, 'Prislukivanje', 'Kratki sadrzaj 19'),


(default, 'Odgovor', 'Kratki sadrzaj 20');

Slika 3.3.4. Tablica "djelo"


-- knjiga
insert into knjiga values
(default, 'ohari', 1995,'1999-03-07', '978-953-500-056-1', 1, 2, 1),
(default, 'Iskonsko zlo', 1995,'1999-03-07', '978-953-500-056-2', 1, 2, 2),
(default, 'Dogodilo se jedne vecer', 1995,'1999-03-07', '978-953-500-056-3', 1, 2, 3),
(default, 'Divni novi svijet', 1996,'2000-02-06', '978-953-500-056-4', 1, 1, 4),
(default, 'Djevojka koja se igrala s vatrom', 1999,'2000-02-06', '978-953-500-056-5',
1, 1,5),
(default, 'Zatoenik neba', 1999,'2001-10-12', '978-953-500-056-6', 2, 1, 6),
(default, 'Rugalica', 2001,'2001-10-12', '978-953-500-056-7', 2, 2, 7),
(default, 'Zeleni kvadrat', 2001,'2004-06-06', '978-953-500-056-8', 3, 2, 8),
(default, 'Kraj vremena', 2005,'2004-06-06', '978-953-500-056-9', 3, 2, 9),
(default, 'Stube prema nebu', 2005,'2004-06-06', '978-953-500-056-10', 3, 1, 10),
(default, 'Ulicna lampa', 2005,'2011-04-04', '978-953-500-056-11', 4, 1, 11),
(default, 'Let leptira', 2009,'2011-04-04', '978-953-500-056-12', 4, 2, 12),
(default, 'Kolodvor Zoo', 2010,'2011-04-04', '978-953-500-056-13', 4, 2, 13),
(default, 'Krvavi meridijan', 2012,'2012-08-08', '978-953-500-056-14', 4, 2, 14),
(default, 'Marina', 2012,'2012-08-08', '978-953-500-056-15', 4, 1, 15),

12

(default, 'Sirova koa', 2013,'2012-08-08', '978-953-500-056-16', 5, 2, 16),


(default, 'Momentum efekt', 2013,'2012-08-08', '978-953-500-056-17', 5, 1, 17),
(default, 'Simetrija', 2013,'2012-08-08', '978-953-500-056-18', 5, 1, 18),
(default, 'Prislukivanje', 2014,'2013-03-03', '978-953-500-056-19', 5, 2, 19),
(default, 'Odgovor', 2014,'2013-03-03', '978-953-500-056-20', 6, 2, 20);

Slika 3.3.5. Tablica "knjiga"

-- Artikl autor
insert into autor values
(default, 'Dubravka', 'Ugrei'),
(default, 'Miroslav', 'Krlea'),
(default, 'Tin', 'Ujevi'),
(default, 'Ivana', 'Brli-Maurani'),
(default, 'Filip', 'ovagovi'),
(default, 'Dragutin', 'Tadijanovi'),
(default, 'Mile', 'Budak'),
(default, 'Luko', 'Paljetak'),
(default, 'Ivan', 'Gunduli'),
(default, 'Borivoj', 'Radakovi');

13

Slika 3.3.6. Tablica "autor"

-- autor_djelo
insert into autor_djelo values
(1, 1),
(1, 2),
(2, 3),
(2, 4),
(3, 5),
(3, 6),
(3, 7),
(4, 8),
(5, 9),
(5, 10),
(5, 11),
(5, 12),
(6, 13),
(7, 14),
(7, 15),
(7, 16),
(8, 17),
(9, 18),
(10, 19),
(10, 20);

Slika 3.3.7. Tablica "artikl_primke"


14

-- zanr
insert into zanr values
(default, 'Kriminalistika'),
(default, 'Horror'),
(default, 'Znanstvena fantastika'),
(default, 'Roman'),
(default, 'Filozofija');

Slika 3.3.8. Tablica "zanr"


-- djelo_zarn
insert into djelo_zanr values
(1,1),
(1,2),
(1,3),
(1,4),
(2,5),
(2,6),
(2,7),
(3,8),
(3,9),
(3,10),
(3,11),
(3,12),
(3,13),
(3,14),
(3,15),
(4,16),
(4,17),
(4,18),
(5,19), (5,20);

Slika 3.3.9. Tablica "djelo_zarn"

15

-- mjesto i knjiznica
insert into mjesto values
(42000, 'Varazdin');
insert into knjiznica values
(default, 'Gradska knjiznica Hobist', 'Frankopanska 2', '042-333-467',
'info@hobist.hr', 1994, 'Vlasnik 1', 42000),
(default, 'Gradska knjiznica Hobist 2', 'Pavlinska 5', '023-555-436',
'info@hobist2.hr', 2000, 'Vlasnik 1', 42000);

Slika 3.3.10. Tablica " mjesto i knjiznica "

-- korisnik
insert into korisnik values
(default, 'Pero', 'Peric', 'Adresa 1', '0976672314', '2002-03-04',
'2002-03-04'),
(default, 'Marko', 'Maric', 'Adresa 2', '0918987765', '2000-10-05',
'2000-10-05'),
(default, 'Ante', 'Antic', 'Adresa 3', '0993345644', '2012-04-12',
'2012-04-12'),
(default, 'Roko', 'Rokic', 'Adresa 4', '0955671423', '2013-06-22',
'2013-06-22');

Slika 3.3.11. Tablica "korisnik"

16

-- predmet
insert into predmet values
(default, 1,1),
(default, 2,1),
(default, 3,1),
(default, 4,1),
(default, 5,1),
(default, 6,2),
(default, 7,2),
(default, 8,2),
(default, 9,2),
(default, 10,2),
(default, 11,3),
(default, 12,3),
(default, 13,3),
(default, 14,3),
(default, 15,3),
(default, 16,4),
(default, 17,4),
(default, 18,4),
(default, 19,4),
(default, 20,4);

Slika 3.3.12. Tablica "predmet"


-- posudjena_knjiga
insert into posudjena_knjiga values
(1,1),
(2,1),
(3,2),
(4,4);

Slika 3.3.13. Tablica "posudjena_knjiga"

17

-- rezervacija
insert into rezervacija values
(5,1);

Slika 3.3.14. Tablica "rezervacija"

3.4. Upiti
Nakon uneenih podataka u tablice, potrebno je dohvatiti te podatke koristei upite. U
sluaju baze podataka za knjinicu, izlazni podaci koji su rezultat nekog upita esto mogu sluiti
kao izvjee ili izvor za obrazac.
Nekoliko primjera upita e biti kreirani koritenjem izraza SELECT u SQL Executoru.
Ako elimo vidjeti koliko je koji korisnik posudio knjiga upit ce glasiti:
select ime as "Ime", prezime as "Prezime",
count(posudjena_knjiga.predmet_id) as "Broj posudjenih knjiga "
from korisnik
join posudjena_knjiga on korisnik.korisnik_id =
posudjena_knjiga.korisnik_id
join predmet on posudjena_knjiga.predmet_id = predmet.predmet_id
group by 1,2;

Slika 3.4.1. Broj posuenih knjga korisnika


select ime as "Ime", prezime as "Prezime", naziv as "Naziv knjige"
from korisnik
join posudjena_knjiga on korisnik.korisnik_id =
posudjena_knjiga.korisnik_id
join predmet on posudjena_knjiga.predmet_id = predmet.predmet_id
join knjiga on predmet.knjiga_id = knjiga.knjiga_id;

18

Slika 3.4.2. Koji je korisnik posudio koju knjigu

select ime as "Ime autora", prezime as "Prezime autora", djelo as


"Djelo", naziv as "Zanr"
from autor
join autor_djelo on autor.autor_id = autor_djelo.autor_id
join djelo on autor_djelo.djelo_id = djelo.djelo_id
join djelo_zanr on djelo_zanr.djelo_id = djelo.djelo_id
join zanr on djelo_zanr.zanr_id = zanr.zanr_id
where autor_id = 1;

Slika 3.4.3. Djela odreenog autora i anr


select izdavac.naziv as "Naziv izdavac", knjiga.naziv as "Naziv
knjige", polica.naziv as "Polica"
from izdavac
join knjiga on izdavac.izdavac_id = knjiga.izdavac_id
join predmet on knjiga.knjiga_id = predmet.knjiga_id
join polica on predmet.polica_id = polica.polica_id;

19

Slika 3.4.4. Knjiga izdavaa i polica na kojoj se nalazi


select polica.naziv, count(knjiga_id)
from polica
join predmet on polica.polica_id = predmet.polica_id
group by 1;

Slika 3.4.5. Broj knjiga na policama

20

3.5. Pogledi
Koritenje baze podataka veterinarske stanice i razvijanje desktop aplikacije koja e
koristiti bazu e uvelike olakati pogledi. Primjerice, s ERA modela baze je vidljivo da tablica
"knjiga" ima previe vanjskih kljueva za jasnu evidenciju i detaljniji pregled. Naime, ako se
jednostavnim upitom dohvate svi podaci s odgovarajuim atributima iz te tablice, rezultat e biti
sami brojevi koji korisniku ne predstavljaju vanost. U ovom sluaju je potrebno kreirati pogled
koji e kao rezultat upita vratiti naziv knjige, godina izdanja, datum_uvodenja, isbna, uvez,
polica, izdavac.
create view knjiga_polica as
select
knjiga.naziv as "Knjiga",
godina as "Godina",
polica.naziv as "Polica",
izdavac.naziv as "Izdavac",
vrsta as "Uvez"
from izdavac
join knjiga on knjiga.izdavac_id = izdavac.izdavac_id
join uvez on knjiga.uvez_id = uvez.uvez_id
join predmet on knjiga.knjiga_id = predmet.knjiga_id
join polica on predmet.polica_id = polica.polica_id;

Slika 3.5.1. Pogled "knjiga_cijepljenja_view"


21

Pogled bi takoer mogao biti koristan kako bi korisnik moga vidjeti koji autor je napisako
koje djeli i na kojoj polici se knjiga tog djela nalazi.
create view autor_djelo_zanr as
select ime as "Ime autora", prezime as "Prezime autora", djelo.naziv
as "Djelo", zanr.naziv as "Zanr"
from autor
join autor_djelo on autor.autor_id = autor_djelo.autor_id
join djelo on autor_djelo.djelo_id = djelo.djelo_id
join djelo_zanr on djelo_zanr.djelo_id = djelo.djelo_id
join zanr on djelo_zanr.zanr_id = zanr.zanr_id;

Slika 3.5.2. Pogled "dnevni_promet_maloprodaje_view"

22

3.6. Okidai
Okidai e biti od velike vanosti u sluaju auriranja nekih podataka u bazi ili
sprjeavanja unosa podataka u tablicu tamo gdje to ne bi bilo doputeno. Takoer mogu sluiti
kao ispis odreene poruke prilikom unosa u bazu.
U nastavku e okidai biti kreirani u SQL Executoru, a testirani u komandnom modu
SQL Shell (psql).
1. Okida - auriranje podataka o zalihama robe nakon primljene robe, tj. nakon unosa u
tablicu "artikl_primke"

create or replace function posudba() returns trigger as $$


declare
broj_knjiga integer;
begin
select count(posudjena_knjiga.predmet_id) into broj_knjiga from
korisnik
join posudjena_knjiga on korisnik.korisnik_id =
posudjena_knjiga.korisnik_id
join predmet on posudjena_knjiga.predmet_id = predmet.predmet_id
where posudjena_knjiga.korisnik_id = new.korisnik_id;
if ( broj_knjiga > 3) then
raise exception 'Ne mozete posuditi, trenutno imate: %. knjige',
broj_knjiga-1;
return null;
end if;
return new;
end;
$$ language plpgsql;

23

create trigger provjera_posudbe


after insert on posudjena_knjiga
for each row execute procedure posudba();

Slika 3.6.2. Zabrana posudbe knjige

2. Okida Ne doputa podizanje knjige korisniku ukoloko nije platio lanarinu

create or replace function posudba2() returns trigger as $$


declare
godina integer;
godina2 integer;
begin
select to_char(datum_placanja_clanarine, 'YYYY') into godina
from korisnik
where korisnik.korisnik_id = new.korisnik_id;
select to_char(current_date, 'YYYY') into godina2;
if( godina != godina2) then
raise exception 'Niste platili clanarinu za ovu godinu, ne mozete
podignuti knjigu';
return null;
end if;
return new;
end;
$$ language plpgsql;

24

create trigger provjera_clanarine


before insert on posudjena_knjiga
for each row execute procedure posudba2();

Slika 3.6.3. Zabrana podizanje knjige ukoliko korisnik nije platio lanarinu

25

4. Zakljuak
Baza podataka za potrebe knjiare je vaan dio desktop aplikacije koju e koristiti
zaposlenici knjiare. Funkcionalnosti koje e imati aplikacija e biti potpora knjinici prilikom
nabave knjiga, evidenciji istih, te evidenciji korisnika, itd. Dakle, osnovna svrha izrade baze
podataka u ovom projektu je bila omoguavanje desktop aplikaciji u postizanju njenih
funkcionalnosti. Koristei reverzno inenjerstvo je na temelju kreiranih tablica generiran ERA
model koji omoguuje bolji pregled svih tablica zajedno sa pripadajuim atributima, te veza
izmeu tablica.Upiti kao bitna komponenta svake baze podatka su omoguili traenje, unaanje i
mijenjanje uneenih podataka. Takoer su neophodan dio pogleda koji su se pokazali korisnima
u svrhu bolje preglednosti podataka. Implementacija okidaa u bazi je omoguila evidenciju
posuenih knjiga, kao i naplata lanarine.

26

Literatura
1. http://www.postgresql.org/docs/
dostupno 23.1.2014.
2. http://www.postgresql.org/docs/9.2/static/plpgsql.html
dostupno 23.1.2014.

27

You might also like