Professional Documents
Culture Documents
Baza Podataka RTV Kuce
Baza Podataka RTV Kuce
SEMINARSKI RAD
iz predmeta
Student:
Profesor:
Asurdi Danica
Lukovi dr Ivan
Smer: informatika
Indeks: 1322/06
UVOD
Projekat Baza podataka IS RTV sektor arhiva audio materijala sadri
informacione zahteve i pravila poslovanja predstavljenih i kroz odgovarajuu ER
emu baze podataka studije sluaja, prevod ER eme u relacioni model, na
osnovu kojeg su kreirane tabele sa atributima i ogranienjima.
Trigeri, funkcije i procedure dodavani su postupno, a raeni su u skladu
sa pravilima poslovanja i u cilju obezbeenja konzistentnosti baze.
Baza podataka je testirana na Oracle 10g XE prikaz SQL script-ova za
kreiranje SQL opisa eme baze podataka nalazi se u nastavku ove tampane
forme, kao i na priloenom CD-u u elektronskom obliku.
Odgovor na zahteve korisnika prikazan je kroz nekoliko SQL upita i
pogleda. U napomenama su navedeni neki delovi koje sam odradila na vie
razliitih naina.
U obliku SQL skripta nalaze se i primeri koji testiraju rad trigera,
procedura i funkcija, za svaki posebno. Punjenje pojedinih tabela raeno je uz
korienje sekvencera. Ubaen je i skript za brisanje objekata, sekvencera i
tabela.
Idejno reenje daljeg proirenja baze opisano je na kraju ovog projekta.
PRAVILA POSLOVANJA
Prilikom izdavanja dostupnost u tabeli audio materijala se umanjuje za 1, a
uveava se tereenje radnika koji je materijal izneo.
Radnik moe izneti najvie 5 materijala.
Radnik ne mora u istom danu da vrati sve to je izneo.
Zabranjeno je izdavanje materijala radniku koji nije za to ovlaen (ne radi u
sektoru RADIO) i izdavanje od strane radnika koji ne radi u sektoru ARHIVA.
U trenutku vraanja, zavodi se datum povratka, dostupnost vraenog
materijala se uveava za 1, a tereenje radnika umanjuje za svaki vraeni
materijal 1.
Kod evidencije audio materijala, album mora imati bar 1 pesmu (Track
number>0).
Naziv izvoaa (ifra) se popunjava za svaku pesmu posebno. Jedna pesma
moe se nai na vie razliitih nosaa zvuka (npr. isti album na CD-u, LP-u i
kaseti).
Kod brisanja audio materijala dozvoliti brisanje jedino ako ne postoji u
evidenciji reversa, i obrisati pesme koje sadri ako nijedan drugi audio materijal
ne obuhvata iste.
Izvoa moe biti obrisan ako nema nijednu pesmu u arhivi.
Izdavaka kua moe biti obrisana ako nema nijednog albuma u arhivi.
Veina ovih ogranienja realizuje se automatski definicijom primarnih i stranih
kljueva.
ER ema u prilogu
Izvodjac({sifizv, artist}{sifizv})
Null (Izvodjac, sifizv) =
Pesma ({songID, sifizv, title, vers, time}{songID})
Pesma [sifizv] Izvodjac [sifizv]
Null (Pesma, songID) =
Null (Pesma, sifizv) =
Sadrzi ({sifam, songID}{ sifam+songID })
Sadrzi [sifam] Audio_m [sifam]
Sadrzi [songID] Pesma [songID]
Audio_m [sifam] Sadrzi [sifam]
Null (Sadrzi, songID) =
Null (Sadrzi, sifam) =
Radnik ({MBR, prez, ime, sektor}{MBR})
Null (Radnik, MBR)=
Tonac ({MBT, prez, ime, sektor, zaduzen}{MBT})
Null (Tonac, MBT)=
Tonac [MBT] Radnik [MBR]
Magacioner ({MBM, prez, ime, sektor, SQLsert}{MBM})
Null (Magacioner, MBM)=
Magacioner [MBM] Radnik [MBR]
Revers ({RBR, primio, izdao, sifam, datizd, datpov}{RBR})
Null (Revers, RBR)=
Revers [primio] Tonac [MBT]
Null (Revers, primio)=
Revers [izdao] Magacioner [MBM]
Null (Revers, izdao)=
Revers [sifam] Audio_m [sifam]
Null (Revers, sifam)=
10
Izvodjac({sifizv, artist}{sifizv})
Null (Izvodjac, sifizv) =
CREATE TABLE Izvodjac
(sifizv NUMBER(2) NOT NULL
CONSTRAINT pk4
PRIMARY KEY,
artist VARCHAR2(40) NOT NULL);
11
START WITH 1
MAXVALUE 99
NOCYCLE;
INSERT INTO Izvodjac
VALUES (kljuc_izv.NEXTVAL, 'Djordje Balasevic');
INSERT INTO Izvodjac
VALUES (kljuc_izv.NEXTVAL, 'Rambo Amadeus');
INSERT INTO Izvodjac
VALUES (kljuc_izv.NEXTVAL, 'Lepa Brena');
INSERT INTO Izvodjac
VALUES (kljuc_izv.NEXTVAL, 'Elvis Presley');
INSERT INTO Izvodjac
VALUES (kljuc_izv.NEXTVAL, 'Tina Turner');
INSERT INTO Izvodjac
VALUES (kljuc_izv.NEXTVAL, 'Beatles');
INSERT INTO Izvodjac
VALUES (kljuc_izv.NEXTVAL, 'Tom Jones');
INSERT INTO Izvodjac
VALUES (kljuc_izv.NEXTVAL, 'Ultravox');
INSERT INTO Izvodjac
VALUES (kljuc_izv.NEXTVAL, 'Billy Idol');
INSERT INTO Izvodjac
VALUES (kljuc_izv.NEXTVAL, 'Dire Straits');
12
13
14
tr IN Audio_m.trackno%TYPE)
IS
BEGIN
INSERT INTO Audio_m (sifam, sifik, album, godina, trackno)
VALUES (sam, sik, alb, god, tr);
END unos_audiocd;
/
*NAPOMENA: Procedura koja bi vrila unos audio materijala tipa LP:
CREATE OR REPLACE PROCEDURE unos_audiolp
(sam IN Audio_m.sifam%TYPE,
st IN Audio_m. siftipa %TYPE,
sik IN Audio_m.sifik%TYPE,
alb IN Audio_m.album%TYPE,
god IN Audio_m.godina%TYPE,
tr IN Audio_m.trackno%TYPE)
IS
BEGIN
INSERT INTO Audio_m (sifam, siftipa, sifik, album, godina, trackno)
VALUES (sam, st, sik, alb, god, tr);
END unos_audiolp;
/
EXECUTE
EXECUTE
EXECUTE
EXECUTE
6);
EXECUTE unos_audiolp(kljuc_am.NEXTVAL, 2, 24, 'Rock Evergreen', 1990,
6);
EXECUTE unos_audiolp(kljuc_am.NEXTVAL, 2, 22, 'Bezdan', 1986, 3);
15
16
CONSTRAINT pk8
PRIMARY KEY (sifam,songID),
CONSTRAINT fk5
FOREIGN KEY(sifam)
REFERENCES Audio_m(sifam)
ON DELETE CASCADE,
CONSTRAINT fk6
FOREIGN KEY(songID)
REFERENCES Pesma(songID)
);
19
SELECT title PESMA, vers VERZIJA, TIME, artist IZVODJAC, ALBUM, GODINA,
am.sifam SIFRA, VRSTA, DOSTUPAN
FROM Pesma p, Izvodjac iz, Audio_m am, Tip, Sadrzi s
WHERE UPPER(p.title)= 'STARI LALOSKI VALS'
AND p.songID=s.songID
AND s.sifam=am.sifam
AND am.siftipa=tip.siftipa
AND p.sifizv=iz.sifizv;
*NAPOMENA: Ovo je drugi nain funkcija koja vraa ifru traene pesme:
CREATE OR REPLACE FUNCTION nadji_pesmu (ulaz VARCHAR2)
RETURN NUMBER
IS
izlaz NUMBER(3);
BEGIN
SELECT songID
INTO izlaz
FROM Pesma
WHERE Title=ulaz;
21
RETURN izlaz;
END nadji_pesmu;
/
BEGIN
dbms_output.put_line('Trazena pesma ima sifru '||(nadji_pesmu('Zene')));
END;
/
SELECT title PESMA, vers VERZIJA, TIME, artist IZVODJAC, ALBUM, GODINA,
am.sifam SIFRA, VRSTA, DOSTUPAN
FROM Pesma p, Izvodjac iz, Audio_m am, Tip, Sadrzi s
WHERE p.songID=(nadji_pesmu('Zene'))
AND p.songID=s.songID
AND s.sifam=am.sifam
AND am.siftipa=tip.siftipa
AND p.sifizv=iz.sifizv;
22
23
Okida koji javlja greku ako se unosi radnik koji nije zaduen:
CREATE OR REPLACE TRIGGER razduzen
BEFORE UPDATE OF zaduzen ON Radnik
FOR EACH ROW
BEGIN
IF :NEW.zaduzen<0 THEN
RAISE_APPLICATION_ERROR (-20502, 'Ovaj radnik ne duguje materijal!');
END IF;
END razduzen;
*NAPOMENA: kasnije se uvodi okida koji ne dozvoljava izmenu ifre radnika
koji je izneo materijal, kako ne bi dolazilo do (zlo)namernih ili sluajnih prepravki
u evidenciji.
24
25
26
27
Testiranje:
DELETE FROM Revers WHERE RBR=3
/
28
Provera trigera:
UPDATE Revers
SET sifam=2000
WHERE RBR=3;
29
UPDATE Revers
SET datpov=SYSDATE
WHERE RBR=3;
KREIRANJE POGLEDA
Omoguiti ispis svih trenutno izdatih audio materijala (VIEW), sa kolonama:
1.
2.
3.
4.
5.
LISTANJE KODA
SELECT object_name
FROM user_objects
WHERE object_type = 'FUNCTION'
/
SELECT object_name
FROM user_objects
WHERE object_type = 'PROCEDURE'
/
SELECT object_name
FROM user_objects
30
DROP
DROP
DROP
DROP
DROP
DROP
DROP
DROP
DROP
DROP
DROP
DROP
DROP
DROP
TRIGGER
TRIGGER
TRIGGER
TRIGGER
TRIGGER
TRIGGER
TRIGGER
TRIGGER
TRIGGER
TRIGGER
TRIGGER
TRIGGER
TRIGGER
TRIGGER
nema_brisanja_drzave;
nema_brisanja_ik;
nema_brisanja_evidencije;
nema_brisanja_radnika;
ovlascen_radnik;
ovlascen_arhivar;
dosta5;
nema_am;
razduzen;
razduzi_radnika;
zaduzi_radnika;
umanji_materijal;
vrati_materijal;
zastita_evidencije;
FUNCTION
FUNCTION
FUNCTION
FUNCTION
dodaj1;
umanji1;
vrati_sektor;
nadji_pesmu;
DROP
DROP
DROP
DROP
DROP
DROP
DROP
DROP
DROP
DROP
VIEW izdati_am;
TABLE REVERS;
TABLE SADRZI;
TABLE PESMA;
TABLE IZVODJAC;
TABLE AUDIO_M;
TABLE TIP;
TABLE IZD_KUCA;
TABLE DRZAVA;
TABLE RADNIK;
31
32
ZAKLJUAK
33
DRZAVA
TIP
(0,N)
IZVODJAC
(0,N)
IZ
(0,N)
IMA
(1,1)
PEVA
(1,1)
IZD_KUCA
(0,N)
(1,1)
OBJAVILA
(1,1)
AUDIO_M
(1,N)
(0,N)
SADRZI
PESMA
(0,N)
IZDAT
(1,1)
TONAC
(0,N)
PRIMIO
(1,1)
REVERS
(1,1)
(1,1)
IZDAO
(0,N)
MAGACIONER
(1,1)
(0,N)
ISA
RADNIK
34