Projektovanje Baze Podataka Za Podrsku Radu Muzicke Izdavacke Kuce

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 39

Projektovanje baze podataka za podršku radu muzičke izdavačke

kuće

BAZE PODATAKA

Projekat

Projektovanje baze podataka za podršku radu muzičke izdavačke kuće

Predmetni nastavnik: Studenti:

ime_prezime_1 br. ind.

ime_prezime_2 br. ind.

ime_prezime_3 br. ind.

Datum predaje _

Beograd

mesec, godina

1
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće
Sadržaj

1. Rezime....................................................................................................................3
2. Poslovni domen - OPIS..............................................................................................4
3. Podmodeli podataka..................................................................................................5
4. Integrisani model podataka (PMOV).............................................................................8
5. Prevodjenje PMOV u relacioni model...........................................................................9
6. SQL naredbe za kreiranje tabela................................................................................11
7. SQL naredbe za umetanje podataka...........................................................................15
8. Tabelarni prikaz sadrzaja tabela................................................................................20
9. Specifikacija poslovnih transakcija i njihova realizacija..................................................24
9.1 Podsistem Umetnik..............................................................................................24
9.1.1 Definicija poslovne transakcije.........................................................................24
9.1.2 Pogled.........................................................................................................24
9.1.3 Bazna funkcija..............................................................................................25
9.1.4 Bazna procedura...........................................................................................26
9.2 Podsistem Album.................................................................................................29
9.2.1 Definicija poslovne transakcije.........................................................................29
9.2.2 Pogled.........................................................................................................29
9.2.3 Bazna funkcija..............................................................................................29
9.2.4 Bazna procedura...........................................................................................30
9.3 Podsistem Pesma.............................................................................................................................................33
9.3.1 Definicija poslovne transakcije.........................................................................33
9.3.2 Pogled.........................................................................................................33
9.3.3 Bazna funkcija..............................................................................................33
9.3.4 Bazna procedura...........................................................................................34
10. Literatura...............................................................................................................38

2
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

1. Rezime

U ovom projektu je izvršena analiza poslovnog domena muzičke izdavačke kuće sa ciljem
efikasnog upravljanja umetnicima, lokacijama, gradovima, saradnjama, ugovorima o saradnji,
studijima, statistikama snimanja, uslugama snimanja, muzičkim albumima, koncertima,
pesmama, dvoranama, tekstopiscima, tekstovima i honorarima. Kreiran je model podataka koji
odražava strukturu i odnose između entiteta u ovom poslovnom domenu.

Implementacija ovog modela podataka izvršena je kroz kreiranje šeme relacione baze podataka,
uz primenu odgovarajućih stranih ključeva radi očuvanja integriteta podataka. Kroz SQL insert
naredbe izvršeno je instanciranje ove šeme baze podataka, doprinoseći formiranju osnovnog
skupa podataka koji podržava operativne potrebe muzičke izdavačke kuće.

Projekat uključuje detaljan tabelarni prikaz sadržaja svih tabela baze podataka, pružajući uvid u
strukturu i podatke koji se čuvaju u svakoj tabeli.

Za svaki podsistem definisane su poslovne transakcije koje obuhvataju operacije vezane za


upravljanje entitetima tog podsistema. Takođe, kreirani su i odgovarajući pogledi i bazne
procedure koje omogućavaju izvršavanje poslovnih transakcija na efikasan način.

Nadalje, za svaki podsistem razvijene su bazne funkcije koje demonstriraju realizaciju


odgovarajućih poslovnih transakcija kroz pristup podacima i izvršavanje određenih operacija nad
njima. Ovaj projekat pruža sveobuhvatan sistem za podršku operativnim potrebama muzičke
izdavačke kuće, obezbeđujući efikasno upravljanje svim ključnim entitetima i procesima u ovom
poslovnom domenu.

3
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

2. Poslovni domen - OPIS

Za potrebe udruženja producentskih kuća potrebno je isprojektovati bazu podataka sa


neophodnim podacima. Poslovni domen je dekomponovan na tri celine (podsistema): Umetnik,
Album i Pesma. U nastavku se daje kratak opis ovih celina.

I Podsistem – Umetnik (student ime_prezime_1)

U okviru sistema muzičke izdavačke kuće, umetnici su ključni akteri u procesu stvaranja i
promocije muzike. Gradovi predstavljaju temeljnu infrastrukturu u kojima se nalaze lokacije i
studiji za snimanje, pružajući osnovnu podršku umetnicima u njihovom radu. Svaki grad može
imati više lokacija na kojima se odvijaju različite aktivnosti, poput snimanja, koncerta ili promocije.

Umetnici, kao kreativni entiteti, svoj rad realizuju u određenim lokacijama, bilo da je reč o
snimanju u studiju ili nastupima na koncertima. Ovi događaji često zahtevaju saradnju između
različitih umetnika, što se odražava kroz različite oblike saradnje i ugovore o saradnji.

Studiji za snimanje predstavljaju ključne entitete u procesu produkcije muzike, pružajući prostor i
tehničku podršku umetnicima za snimanje njihovih pesama i albuma. U okviru studija, snimanje
pesama se evidentira kroz usluge snimanja, gde se beleže detalji o datumu snimanja, količini
snimljenih pesama i ceni usluge.

II Podsistem Album (student ime_prezime_2)

U okviru sistema za upravljanje albumima, svaki album predstavlja zbirku pesama koje se
objavljuju pod određenim imenom i imaju specifičan žanr. Albumi se često povezuju sa koncertima
koji se održavaju u određenim dvoranama, pružajući publici priliku da doživi muziku uživo.

Albumi se karakterišu svojim nazivom, brojem pesama koje sadrže i vrstom muzičkog izdanja koje
predstavljaju. Pesme, kao osnovni gradivni elementi albuma, sadrže informacije o nazivu, trajanju,
kompozitoru i tekstopiscu. Svaka pesma može biti deo jednog ili više albuma, što omogućava
raznolikost i fleksibilnost u kreiranju muzičkih izdanja.

Dvorane predstavljaju ključne lokacije gde se održavaju koncerti, pružajući prostor za nastupe
umetnika i interakciju sa publikom. Koncerti se organizuju kao događaji koji promovišu određene
albume, okupljajući publiku i pružajući im jedinstveno iskustvo uživo.

Blagajne su centralna mesta gde se prodaju ulaznice za koncerte i događaje vezane za albume.
Kroz proces prodaje ulaznica i rezervacija, blagajne pružaju interakciju sa publikom i omogućavaju
im pristup muzičkim događajima.

Kroz sistem Rezervacija, publiku se omogućava da unapred rezerviše ulaznice za koncerte i


događaje povezane sa određenim albumima, pružajući im sigurnost i praktičnost u planiranju
prisustva na događajima.

4
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

III Podsistem Pesma (student ime_prezime_3)

U okviru sistema za upravljanje pesmama, svaka pesma predstavlja jedinstveno muzičko delo koje
se sastoji od teksta i muzike. Pesme se često povezuju sa tekstom i produkcijom koje pružaju
dodatne slojeve kreativnosti i ekspresije.

Pesme se karakterišu svojim nazivom, trajanjem, kompozitorom i tekstopiscem. Tekstopisac je


ključna figura u procesu stvaranja pesme, odgovoran za pisanje stihova koji oblikuju emotivnu i
tematsku osnovu pesme. Producenti, sa druge strane, doprinose stvaranju pesme kroz svoj stil
produkcije, koji može obuhvatiti aranžmane, snimanje i postprodukciju. Producenti mogu raditi sa
različitim pesmama i tekstopiscima, donoseći svoj jedinstveni pečat u proces stvaranja muzike.

Kroz sistem Honorar, tekstopiscima se pruža kompenzacija za njihov rad kroz isplate honorara za
tekstove koje su napisali. Ovo omogućava pravedno nagrađivanje kreativnih doprinosa tekstopisaca
u muzičkoj industriji.

Tekstovi predstavljaju esencijalni deo pesama, pružajući verbalni izraz i emotivnu dubinu koja
doprinosi ukupnom doživljaju muzike. Kroz tekstove, tekstopisci prenose svoje ideje, emocije i
priče, stvarajući autentične i inspirativne pesme.

5
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

3. Podmodeli podataka
U nastavku su prikazani podmodeli podataka, napred opisanih celina, kroz podmodele PMOV.

Slika 1. Podmodel PMOV - Umetnik

6
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

Slika 2. Podmodel PMOV -Album

7
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

8
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće
Slika 3. Podmodel PMOV -Pesma

9
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

4. Integrisani model podataka (PMOV)

Na slici 4 je prikazan integrisani PMOV.

Slika 4. Integrisani PMOV

10
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

5. Prevodjenje PMOV u relacioni model

Grad(NazivGrada#, BrojStudija)

Lokacija(LokacijaID#, NazivLokacije, Adresa, NazivGrada#fk)


Lokacija (NazivGrada#fk) referencira Grad(NazivGrada#)

UgovorOSaradnji(UgovorID#, TipUgovora)

Studio(StudioID#)

Umetnik(UmetnikID#, Ime, Prezime, JMBG, Plata, Kontakt, LokacijaID#fk, StudioID#fk)


Umetnik(LokacijaID#fk) referencira Lokacija(LokacijaID#)
Umetnik(StudioID#fk) referencira Studio(StudioID#)

Saradnja(UmetnikID#fk, UgovorID#fk, DatumOd#, DatumDo)


Saradnja(UmetnikID#fk) referencira Umetnik(UmetnikID#)
Saradnja(UgovorID#fk) referencira UgovorOSaradnji(UgovorID#)

StatistikaSnimanja(Datum#, UkupanBrSesija, BrSnimljenihPesama, StudioID#fk)


StatistikaSnimanja(StudioID#fk) referencira Studio(StudioID#)

UslugaSnimanja(SnimanjeID#, DatumSnimanja, Kolicina, Cena, Umetnik, StudioID#fk)


UslugaSnimanja(StudioID#fk) referencira Studio(StudioID#)

Album(AlbumID#, NazivAlbuma, BrPesama, VrstaAlbuma)

Dvorana(DvoranaID#, Kapacitet, Adresa)

Sadrzi( AlbumID#fk, PesmaID#fk, Zanr#, GodinaIzdanja)


Sadrzi(AlbumID#fk) referencira Album(AlbumID#)
Sadrzi(PesmaID#fk) referencira Pesma(PesmaID#)

Koncert(AlbumID#fk, DvoranaID#fk, KoncertID#, NazivKoncerta, BrPosetilaca)


Koncert(AlbumID#fk) referencira Album(AlbumID#)
Koncert(DvoranaID#fk) referencira Dvorana(DvoranaID#)

Pesma(PesmaID#, NazivPesme, TrajanjePesme, Kompozitor, Tekstopisac)

Tekstopisac(TekstopisacID#, Ime, Prezime, StilPisanja)

Producent(ProducentID#, Ime, Prezime, StilProdukcije, PesmaID#fk, TekstopisacID#fk)


Producent(PesmaID#fk) referencira Pesma(PesmaID#)
Producent(TekstopisacID#fk) referencira Tekstopisac(TekstopisacID#)

Blagajna(BlagajnaID#)

Karta(KartaID#, CenaKarte, BrojSedista, AlbumID#fk, DvoranaID#fk, KoncertID#fk, BlagajnaID#fk)


Karta(AlbumID#fk) referencira Album(AlbumID#)
Karta(DvoranaID#fk) referencira Dvorana(DvoranaID#)
11
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće
Karta(KoncertID#fk) referencira Koncert(KoncertID#)
Karta(BlagajnaID#fk) referencira Blagajna(BlagajnaID#)

Rezervacija(RezervacijaID#, Telefon, Emai, BlagajnaID#fk)


Rezervacija(BlagajnaID#fk) referencira Blagajna(BlagajnaID#)

Honorar(DatumIsplate#, IznosHonorara, TekstopisacID#fk)


Honorar(TekstopisacID#fk) referencira Tekstopisac(TekstopisacID#)

Tekst(TekstID#, BrKaraktera, TekstopisacID#fk)


Tekst(TekstopisacID#fk) referencira Tekstopisac(TekstopisacID#)

ProducentTekstopisac(TekstopisacD#FK, ProducentID#FK)
ProducentTekstopisac (TekstopisacID#fk) referencira Tekstopisac(TekstopisacID#)
ProducentTekstopisac (ProducentID#fk) referencira Producent(ProducentID#)

12
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

6. SQL naredbe za kreiranje tabela

13
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

14
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

15
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

16
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

7. SQL naredbe za umetanje podataka

17
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

SQL naredbe za umetanje podataka

-- Primeri inserta za tabelu ProducentTekstopisac


INSERT INTO ProducentTekstopisac (ProducentID, TekstopisacID) VALUES (1, 1);
INSERT INTO ProducentTekstopisac (ProducentID, TekstopisacID) VALUES (2, 2);
INSERT INTO ProducentTekstopisac (ProducentID, TekstopisacID) VALUES (3, 3);

18
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

8. Tabelarni prikaz sadrzaja tabela

Slika 1. Tabela - Grad

Slika 2. Tabela - Lokacija

Slika 3. Tabela – UgovorOSaradnji

Slika 4. Tabela - Studio

Slika 5. Tabela - Umetnik

19
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

Slika 6. Tabela - Saradnja

Slika 7. Tabela-StatistikaSnimanja

Slika 8. Tabela – UslugaSnimanja

Slika 9. Tabela – Album

Slika 10. Tabela – Dvorana

Slika 11. Tabela - Sadrzi

20
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

Slika 12. Tabela – Koncert

Slika 13. Tabela – Pesma

Slika 14. Tabela – Tekstopisac

Slika 15. Tabela – Producent

Slika 16. Tabela - Blagajna

21
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

Slika 17. Tabela - Karta

Slika 18. Tabela – Rezervacija

Slika 19. Tabela – Honorar

Slika 20. Tabela - Tekst

Slika 21. Tabela - ProducentTekstopisac

22
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

9. Specifikacija poslovnih transakcija i njihova realizacija

Ovaj deo projekta zahteva specifikaciju poslovnih transakcija, koje treba opisati na način prilagođen
poslovnim eksperimentima, a ne konkretnim terminima baze podataka. Evo kako biste mogli struktuirati
ovaj deo:

Identifikacija Poslovnih Transakcija: Prvo, identifikujte sve poslovne transakcije koje će se događati u
sistemu. Na primer, ovo može biti "Kreiranje Novog Korisničkog Naloga", "Naručivanje Proizvoda",
"Izrada Novog Izveštaja", itd.

Opis Poslovne Transakcije: Za svaku identifikovanu poslovnu transakciju, napišite detaljan opis onoga
što se dešava kada se ta transakcija izvrši. Ovo uključuje korake koje korisnik ili sistem preduzima da bi
izvršio transakciju, kao i očekivane rezultate nakon završetka transakcije.

Na primer: Kreiranje Novog Korisničkog Naloga: Korisnik popunjava formu sa ličnim podacima, kao što
su ime, prezime, e-mail adresa, itd. Nakon popunjavanja i slanja forme, sistem validira unete podatke,
kreira novi korisnički nalog i šalje potvrdu na unetu e-mail adresu.

Specifikacija Pogleda: Definišite pogled koji će predstavljati apstrakciju podataka relevantnih za datu
poslovnu transakciju. Ovaj pogled bi trebao da obuhvati samo one podatke koji su potrebni za izvršenje
transakcije, a ne sve podatke iz baze.

Bazne Funkcije i Procedure: Definišite bazne funkcije i procedure koje će biti korišćene za
implementaciju poslovnih transakcija. Ove funkcije i procedure trebaju biti parametrizovane tako da
mogu referencirati segmente baze podataka nad kojima se žele izvršiti promene.

Testiranje Izvršenja Transakcija: Razvijte testove koji će proveriti ispravno izvršavanje poslovnih
transakcija. Ovi testovi bi trebali da uključuju pozive baznih funkcija i procedura pre i posle izvršenja
transakcije kako bi se proverilo da li su promene u bazi podataka odgovarajuće.

Na kraju, svaka poslovna transakcija bi trebalo da ima svoj odgovarajući opis, pogled, bazne funkcije i
procedure, kao i testove koji će proveriti ispravnost izvršenja transakcije. Ovo će omogućiti detaljno
razumevanje i implementaciju poslovnih procesa u sistemu.

23
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće
9.1 Podsistem Umetnik

9.1.1 Definicija poslovne transakcije

U skladu sa promenljivim potrebama poslovanja, Udruženje producentskih kuća periodično otvara nove
mogućnosti saradnje sa umetnicima u određenim gradovima. Proces uspostavljanja saradnje sa
umetnicima sprovodi se na sledeći način:

 Umetnicima koji trenutno nisu u saradnji sa producentskom kućom (oni koji nemaju aktivne
saradnje) u tom gradu pruža se prilika za saradnju na novom projektu. Početak saradnje je
tekući datum.

 U slučaju nedostatka umetnika bez aktuelne saradnje u tom gradu, umetnik koji je najduže u
aktuelnoj saradnji premešta se na novi projekat (ukoliko postoji više umetnika sa istim početkom
tekuće saradnje, birati jednog proizvoljno). Aktuelna saradnja se zatvara sa tekućim datumom,
dok se nova saradnja otpočinje danom posle tekućeg datuma.

9.1.2 Pogled
U skladu sa definicijom poslovne transakcije treba osmisliti pogled kroz koji se mogu videti podaci
nad kojima se zasniva poslovna transakcija. U ovom kontekstu, može se kreirati pogled
pUmetnik_Lokacija_Grad_Saradnja (prefiks p za pogled) kroz koji će se moći videti podaci o
umetniku, nazivu lokacije gde umetnik sarađuje, kao i nazivu grada lokacije, kao i podaci o
saradnjama umetnika. Od podataka umetnika, pogled treba da prikazuje sledeće: ID umetnika,
ime, prezime, plata, kontakt, naziv lokacije, naziv grada.

USE MuzickaKuca;
GO

CREATE VIEW pUmetnik_Lokacija_Grad_Saradnja (UmetnikID, Ime, Prezime, Plata, Kontakt,


NazivLokacije, NazivGrada, DatumOd, DatumDo)
AS
SELECT u.UmetnikID, u.Ime, u.Prezime, u.Plata, u.Kontakt, l.NazivLokacije, g.NazivGrada,
s.DatumOd, s.DatumDo
FROM Umetnik u
JOIN Lokacija l ON u.LokacijaID = l.LokacijaID
JOIN Grad g ON l.NazivGrada = g.NazivGrada
LEFT JOIN Saradnja s ON s.UmetnikID = u.UmetnikID;

24
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

-- Upit nad pogledom

SELECT *
FROM pUmetnik_Lokacija_Grad_Saradnja;

Sadržaj koji upit vraća dat je u sledećoj tabeli.

9.1.3
9.1.3
9.1.3
9.1.3
9.1.3
Bazna funkcija
Bazna funkcija treba da vrati podatke koji su relevantni za prethodno definisanu poslovnu
transakciju, i da bude tako parametrizovana da vrati segment podataka iz baze podataka u
kontekstu realizacije, tj. izvršenja poslovne transakcije. Opseg relevatnih podataka je obuhvaćen
prethodno definisanim pogledom, tako da funkcija treba upravo biti nad njim definisana. Naziv
grada kao parametar funkcije omogućiće da se kroz poziv funkcije vide željeni podaci za taj grad.

Potrebno je kreirati baznu funkciju kdfUmetnikAngazovanje (prefiks kdf - korisnički definisana


funkcija) koja će kao argument prihvatiti naziv grada a vratiti u tabeli šifru, ime i prezime radnika
čija lokacija rada je u tom gradu, stim da imaju, ili su imali angažovanje. Funkcija u tabeli treba
da vrati i naziv grada, naziv lokacije, datum početka i datum završetka angažovanja, kao i naziv
radnog mesta na kojem je radnik angažovan.

U nastavku sledi programski kod za kreiranje bazne funkcije. Kao što se vidi, funkcija koristi
prethodno definisani pogled pUmetnik_Lokacija_Grad_Saradnja .

GO

CREATE FUNCTION kdfUmetnikAngazovanje (@pNazivGrada NVARCHAR(30))


RETURNS TABLE
AS
RETURN
(
SELECT p.UmetnikID, p.Ime, p.Prezime, p.Plata, p.Kontakt, p.NazivLokacije,
p.NazivGrada, p.DatumOd, p.DatumDo
FROM pUmetnik_Lokacija_Grad_Saradnja p
WHERE UPPER(p.NazivGrada) = UPPER(@pNazivGrada)
);

Primer pozivanja funkcije sledi u nastavku.

-- Postavljanje vrednosti parametra


DECLARE @pNazivGrada nvarchar(30) = 'Beograd';

-- Poziv funkcije sa parametrom


SELECT * FROM [MuzickaKuca].[dbo].[kdfUmetnikAngazovanje] (@pNazivGrada);

25
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće
Funkcija vraća vrednost u tabeli, i ta tabela je prikazana u nastavku. Kao što se vidi, u Beogradu,
trenutno je angažovan umetnik sa ID-jem 1. Kao što se vidi, funkcija je vratila podskup
podataka dobijenih prethodnim upitom nad pogledom. Podskup podataka je rezultat vrednosti
argumenta prosleđenog u pozivu funkcije (podaci za grad Beograd)

9.1.4 Bazna procedura


Napraviti baznu proceduru kdpOtvaranjeUgovora (prefiks kdp - korisnički definisana procedura) ,
koja će kao argument prihvatiti tip ugovora i naziv grada u kojem treba rasporediti
umetnika/umetnike čija lokacija rada je upravo u tom gradu. Šifra novog ugovora treba da je za
jedan veća od do tada najveće šifre ugovora. Formirati novo angažovanje (ili angažovanja, ako se
raspoređuje više umetnika) u skladu sa definicijom poslovne transakcije datom ranije, u ovom
odeljku.

U nastavku sledi programski kod za kreiranje bazne procedure.

CREATE PROCEDURE kdpOtvaranjeUgovora


@pTipUgovora VARCHAR(100), @pNazivGrada VARCHAR(50)
AS
DECLARE @lUgovorID INT, @lBrojUbacenihAngazovanja INT = 0, @lUmetnikID INT,
@lSifraRM INT, @lDatOd DATE
BEGIN TRY
SET XACT_ABORT ON; -- U slučaju pojave greške automatsko sprečavanje daljeg izvršavanja
niza naredbi
BEGIN TRANSACTION;
-- Tražimo maksimalnu vrednost UgovorID
SELECT @lUgovorID = ISNULL(MAX(UgovorID), 0) + 1 FROM UgovorOSaradnji;
-- Ubacivanje ugovora o saradnji
INSERT INTO UgovorOSaradnji (UgovorID, TipUgovora)
VALUES (@lUgovorID, @pTipUgovora);
-- Ubacivanje angažovanja na novi ugovor o saradnji, trenutno neangažovanih umetnika
INSERT INTO Saradnja (DatumOd, UmetnikID, UgovorID)
SELECT GETDATE(), u.UmetnikID, @lUgovorID
FROM Umetnik u
WHERE u.UmetnikID NOT IN (SELECT DISTINCT s.UmetnikID FROM Saradnja s WHERE s.DatumDo IS
NULL)
AND EXISTS (SELECT 1 FROM Lokacija l WHERE l.NazivGrada = @pNazivGrada AND l.LokacijaID
= u.LokacijaID);
-- Određivanje broja novih ubačenih angažovanja
SELECT @lBrojUbacenihAngazovanja = COUNT(*)
FROM Saradnja
WHERE UgovorID = @lUgovorID;
--Testiranje da li je došlo do ubacivanja angažovanja
IF @lBrojUbacenihAngazovanja = 0
BEGIN
PRINT 'Nije uspelo ubacivanje angažovanja. Proveriti postoje li umetnici u željenom
gradu.';
PRINT 'Transakcija je poništila promene.';
ROLLBACK TRANSACTION;
END
26
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće
ELSE
BEGIN
PRINT 'Ubačeno je ' + CAST(@lBrojUbacenihAngazovanja AS VARCHAR(10)) + '
angažovanj(e/a).';
COMMIT TRANSACTION;
END;
END TRY
BEGIN CATCH
PRINT 'DOŠLO JE DO POJAVE GREŠKE!';
PRINT '------ Proverite ulazne parametre -------';
ROLLBACK TRANSACTION;
PRINT 'Transakcija je poništila promene.';
END CATCH;

-- Prvo pozivanje bazne procedure

EXEC kdpOtvaranjeUgovora @pTipUgovora = 'Produkcija pesama', @pNazivGrada = 'Beograd';

Provera izvršenja poslovne transakcije, tj. promena u bazi podataka koje su prouzrokovane
pozivom bazne procedure (koja realizuje poslovnu transakciju u bazi podataka), vrši se ponovnim
pozivom bazne funkcije sa vrednošću argumenta istim kao i argumanta @pNazivGrada u pozivu
procedure.

SELECT *
FROM kdfUmetnikAngazovanje ('Beograd');

Rezultat upita dat je u tabeli u nastavku. Promene u ovom segmentu baze podataka u odnosu na
prethodno pozivanje bazne funkcije je rezultat izvršenja bazne procedure kdpOtvaranjeUgovora.
Ovim je pokazano da je bazna procedura izvršila željenu poslovnu transakciju (ubačen je novi
ugovor, i raspoređen je odgovarajućeg umetnika na željenoj lokaciji).

27
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

Ako se želi sklopiti isti ugovor u drugom gradu (npr. u Novom sadu), treba proveriti sadržaj
odgovarajućeg segmenta baze podataka upitom nad baznom funkcijom, uz odgovarajući
argument u pozivu, kao što je prikazano u nastavku.

SELECT *
FROM kdfUmetnikAngazovanje ('Novi Sad');

Sadržaj podataka koji je upit vratio prikazan je u nastavku. Kao što se vidi, u Novom sadu,
jedan umetnik ima završena angažovanja (nemaju tekuća angažovanja).

U nastavku se ponovo poziva bazna procedura kako bi se realizovana poslovna transakcija, s


ciljem otvaranja novog radnog mesta u Novom sadu.
-- Drugo pozivanje bazne procedure
EXEC kdpOtvaranjeUgovora @pTipUgovora = 'Produkcija pesama', @pNazivGrada = 'Novi Sad';

Provera izvršenja poslovne transakcije, ponovo se vrži upitom nad odgovarajućim segmentom
baze podataka pozivanjem bazne funkcije.
SELECT *
FROM kdfUmetnikAngazovanje ('Novi Sad');

Rezultat upita prikazan je u nastavku.

28
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

9.2 Podsistem Album

9.2.1 Definicija poslovne transakcije


Poslovna transakcija za entitet Album obuhvata proces prodaje ulaznica za koncerte ili događaje na
kojima se promoviše određeni muzički album. Ovaj proces podrazumeva sledeće korake:

Identifikacija koncerta: Blagajnik ili osoblje zaduženo za prodaju ulaznica identifikuje koncert ili
događaj koji promoviše određeni album za koji se vrši prodaja ulaznica.

Provera dostupnosti ulaznica: Sistem proverava dostupnost ulaznica za odabrani koncert u određenoj
dvorani. Ukoliko postoje slobodna mesta za prodaju, transakcija može da se nastavi.

Odabir broja ulaznica: Klijent odabira željeni broj ulaznica za koncert koji promoviše album.

Izdavanje ulaznica: Blagajnik generiše i izdaje ulaznice za odabrani koncert, sa odgovarajućim


informacijama o koncertu, kao što su naziv koncerta, datum, vreme i lokacija održavanja.

Evidencija prodaje: Sistem beleži transakciju prodaje ulaznica, uključujući informacije o datumu,
vremenu, broju kupljenih ulaznica, kao i relevantne podatke o albumu koji se promoviše.

Ova poslovna transakcija omogućava efikasan proces prodaje ulaznica za koncerte i događaje
povezane sa promocijom određenog muzičkog albuma, osiguravajući korisnicima pristup ovim
događajima i generisanje prihoda za organizatore i izvođače.

9.2.2 Pogled
Potrebno je kreirati pogled AlbumKoncertDvoranaView kroz koji će se moći videti podaci o albumu
(broj pesama, naziv albuma, vrsta albuma), koncertu (naziv koncerta i broj posetilaca), i dvorani
(kapacitet i adresa dvorane)

USE MuzickaKuca;
GO
CREATE VIEW AlbumKoncertDvoranaView
AS
SELECT
a.AlbumID AS AlbumID,
a.NazivAlbuma AS NazivAlbuma,
a.BrPesama AS BrPesama,
a.VrstaAlbuma AS VrstaAlbuma,
k.KoncertID AS KoncertID,
k.NazivKoncerta AS NazivKoncerta,
k.BrPosetilaca AS BrPosetilaca,
d.DvoranaID AS DvoranaID,
d.Kapacitet AS KapacitetDvorane,
d.Adresa AS AdresaDvorane
FROM
Album a
LEFT JOIN
Koncert k ON a.AlbumID = k.AlbumID
LEFT JOIN
Dvorana d ON k.DvoranaID = d.DvoranaID;

-- Upit nad pogledom


SELECT *
FROM AlbumKoncertDvoranaView
29
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

Sadržaj koji upit vraća dat je u sledećoj tabeli.

9.2.3 Bazna funkcija

Ova funkcija, nazvana "kdfPrikazUlaznica", koristi se za dobijanje informacija o ulaznicama za određeni


film. Funkcija prima jedan ulazni parametar, šifru filma (@pSifraFilma), i vraća tabelu sa sledećim
podacima: KartaID, CenaKarte, BrojSedista, NazivDogadjaja, AdresaDvorane

Funkcija koristi spoljašnje veze (LEFT JOIN) sa tabelama Album i Dvorana kako bi dobila dodatne
informacije o događaju i dvorani u kojoj se održava. Uslov WHERE ograničava rezultate na ulaznice
koje su povezane sa određenim filmom prema šifri filma koja je prosleđena kao ulazni parametar
funkcije.

Nakon definisanja funkcije, poziv funkcije se vrši pomoću SQL upita koji prosleđuje šifru filma kao
argument funkciji, kao što je prikazano u primeru "SELECT * FROM kdfPrikazUlaznica(1);". Ovaj upit bi
vratio sve ulaznice vezane za film sa šifrom filma 1.

CREATE FUNCTION kdfPrikazUlaznica (@pSifraFilma INT)


RETURNS TABLE
AS
RETURN
(
SELECT k.KartaID, k.CenaKarte, k.BrojSedista, a.NazivAlbuma AS NazivDogadjaja,
d.Adresa AS AdresaDvorane
FROM Karta k
LEFT JOIN Album a ON k.AlbumID = a.AlbumID
LEFT JOIN Dvorana d ON k.DvoranaID = d.DvoranaID
WHERE k.AlbumID = @pSifraFilma
);

-- Pozivanje bazne funkcije

SELECT *
FROM kdfPrikazUlaznica(1);

30
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

Funkcija vraća vrednost u tabeli, i ta tabela je prikazana u nastavku. Kao što se vidi, za ID karte
1, funkcija je vratila podskup podataka dobijenih prethodnim upitom nad pogledom. Podskup
podataka je rezultat vrednosti argumenta prosleđenog u pozivu funkcije (podaci za ID karte 1)

9.2.4 Bazna procedura


Napraviti baznu proceduru kdpProdajaUlaznica (prefiks kdp - korisnički definisana procedura) ,
koja će kao argument prihvatiti šifru filma, šifru sale, datum i vreme početka projekcije kao i cenu
ulaznice. Pored toga potrebno je navesti i broj ulaznica koji se kupuje, red kao i početno sedište u
navedenoj sali. U nastavku sledi programski kod za kreiranje bazne procedure.

CREATE PROCEDURE kdpProdajaUlaznica


-- potrebni parametri
@pCena DECIMAL(10, 2),
@pSifraSale INT,
@pSifraFilma INT,
@pSifraBlagajne INT,
@pSatnica TIME,
@pDatum DATE,
@pRed INT,
@pSediste INT,
@pBrojUlaznica INT
AS
DECLARE
--podaci za ulaznicu
@lOznakaSedista AS NVARCHAR(50), @lBrojacSedista AS INT,
@lSediste AS INT, @lSifraKoncerta AS INT,
@lMaxRed AS INT, @lMaxSedista AS INT, @lBrojDvorana AS INT, @lBrojAlbuma AS INT
BEGIN TRY
SET XACT_ABORT ON -- U slučaju pojave greške automatsko sprečavanje daljeg izvršavanja
niza naredbi
SET @lBrojDvorana = 0; -- Promenljiva za testiranje postojanja dvorane
SET @lBrojAlbuma = 0; -- Promenljiva za testiranje postojanja albuma
SELECT @lSifraKoncerta = KoncertID
FROM Koncert
WHERE AlbumID = @pSifraFilma AND DvoranaID = @pSifraSale;
SELECT @lMaxRed = Kapacitet + 1, @lMaxSedista = Kapacitet + 1
FROM Dvorana
WHERE DvoranaID = @pSifraSale;
SELECT @lBrojDvorana = COUNT(*)
FROM Dvorana
WHERE DvoranaID = @pSifraSale;
SELECT @lBrojAlbuma = COUNT(*)
FROM Album
WHERE AlbumID = @pSifraFilma;
SET @lBrojacSedista = 0;
SET @lSediste = @pSediste;
IF @lBrojDvorana = 0 OR @lBrojAlbuma = 0

31
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće
BEGIN
PRINT 'Proverite ulazne parametre!'
END
ELSE
IF @pBrojUlaznica > 5
BEGIN
PRINT 'Broj ulaznica ne moze biti veci od 5!'
END
ELSE
IF @pRed > @lMaxRed
BEGIN
PRINT 'Red koji ste uneli je veci od broja redova koje postoje za navedenu salu!'
END
ELSE
IF @pSediste + @pBrojUlaznica > @lMaxSedista
BEGIN
PRINT 'Nije moguce uzeti karte od navedenog sedista!'
END
ELSE
WHILE (@lBrojacSedista < @pBrojUlaznica)
BEGIN
BEGIN TRANSACTION
SET @lOznakaSedista = 'R'+
CAST(@pRed AS VARCHAR(10)) +'-S' + CAST(@lSediste AS VARCHAR(10));

-- Ubacivanje ulaznice
INSERT INTO Karta(CenaKarte, BrojSedista, AlbumID, DvoranaID, KoncertID, BlagajnaID)
VALUES(@pCena, 1, @pSifraFilma, @pSifraSale, @lSifraKoncerta, @pSifraBlagajne);

SET @lBrojacSedista = @lBrojacSedista + 1


SET @lSediste = @lSediste + 1;

PRINT 'Ubačena je nova ulaznica broj: '+


CAST(@lBrojacSedista AS VARCHAR(10));

COMMIT TRANSACTION;
END

END TRY
BEGIN CATCH
PRINT 'DOŠLO JE DO POJAVE GREŠKE!' ;
PRINT '------ Proverite ulazne parametre-------' ;
PRINT ERROR_MESSAGE();
ROLLBACK TRANSACTION;
PRINT 'Procedura je poništila promene.';
END CATCH;

32
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

-- Pozivanje bazne procedure

EXEC kdpProdajaUlaznica
@pCena = 50.00,
@pSifraSale = 1,
@pSifraFilma = 1,
@pSifraBlagajne = 1,
@pSatnica = '18:00',
@pDatum = '2024-03-01',
@pRed = 1,
@pSediste = 1,
@pBrojUlaznica = 2;

Provera izvršenja poslovne transakcije, tj. promena u bazi podataka koje su prouzrokovane
pozivom bazne procedure (koja realizuje poslovnu transakciju u bazi podataka), vrši se ponovnim
pozivom bazne funkcije sa vrednošću argumenta istim kao i argument KartaID u pozivu
procedure.

SELECT *
FROM kdfPrikazUlaznica(1);

33
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

9.3 Podsistem Pesma

9.3.1 Definicija poslovne transakcije


Potrebno je izvršiti isplatu honorara za određenu pesmu, u skladu sa ugovornim obavezama prema
tekstopiscu i producentu. Transakcija se sastoji od nekoliko koraka:

Identifikacija pesme, tekstopisca i producenta: Na osnovu podataka o pesmi, tekstopiscu i producentu,


utvrđuje se iznos honorara koji treba isplatiti.

Isplata honorara: Na osnovu evidencije isplate, vrši se isplata honorara tekstopiscu i producentu
prema dogovorenim uslovima.

Ovaj proces obezbeđuje transparentnost i pravilnu evidenciju isplate honorara za pesmu, uz


poštovanje ugovornih obaveza prema tekstopiscu i producentu.

9.3.2 Pogled
Pogled PogledPesmaProducentTekstopisac omogućava pregled informacija o pesmama, njihovim
producentima i tekstopiscima. Svaki red u ovom pogledu sadrži sledeće podatke:

PesmaID, NazivPesme, TrajanjePesme, Kompozitor, ImeTekstopisca, PrezimeTekstopisca,


StilPisanjaTekstopisca,ImeProducenta,PrezimeProducenta, StilProdukcijeProducenta

Ovaj pogled omogućava korisnicima da jednostavno pristupe informacijama o pesmama, producentima i


tekstopiscima tako što ih spaja na osnovu njihovih međusobnih veza u bazi podataka.

CREATE VIEW PogledPesmaProducentTekstopisac AS


SELECT
P.PesmaID,
P.NazivPesme,
P.TrajanjePesme,
P.Kompozitor,
TP.Ime AS ImeTekstopisca,
TP.Prezime AS PrezimeTekstopisca,
TP.StilPisanja AS StilPisanjaTekstopisca,
PR.Ime AS ImeProducenta,
PR.Prezime AS PrezimeProducenta,
PR.StilProdukcije AS StilProdukcijeProducenta
FROM Pesma P
JOIN Tekstopisac TP ON P.TekstopisacID = TP.TekstopisacID
JOIN Producent PR ON PR.PesmaID = P.PesmaID AND PR.TekstopisacID = P.TekstopisacID;

--Upit nad pogledom

SELECT *
FROM PogledPesmaProducentTekstopisac;

34
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće
Sadržaj koji upit vraća dat je u sledećoj tabeli.

9.3.3 Bazna funkcija

Opseg relevantnih podataka obuhvaćen je prethodno definisanim tabelama Pesma, Tekstopisac i


Producent, koje sadrže informacije o pesmama, tekstopiscima i producentima. Funkcija
kdfPesmaProducentTekstopisac definisana je nad ovim tabelama kako bi omogućila pregled željenih
podataka za određenu pesmu.

Potrebno je kreirati baznu funkciju kdfPesmaProducentTekstopisac (prefiks kdf – korisnički definisana


funkcija) koja će kao argument prihvatiti identifikator pesme (PesmaID), a vratiti tabelu koja sadrži
sledeće podatke: identifikator pesme, naziv pesme, trajanje pesme, kompozitor, ime, prezime i stil
pisanja tekstopisca, ime, prezime i stil produkcije producenta.

CREATE FUNCTION kdfProducentTekstopisacHonorar (@TekstopisacID INT)


RETURNS TABLE
AS
RETURN
(
SELECT DISTINCT
pr.ProducentID,
pr.Ime AS ImeProducenta,
pr.Prezime AS PrezimeProducenta,
pr.StilProdukcije,
tp.TekstopisacID,
tp.Ime AS ImeTekstopisca,
tp.Prezime AS PrezimeTekstopisca,
tp.StilPisanja,
h.IznosHonorara,
h.DatumIsplate
FROM
Tekstopisac tp
INNER JOIN
Honorar h ON tp.TekstopisacID = h.TekstopisacID
INNER JOIN
Producent pr ON tp.TekstopisacID = pr.TekstopisacID
WHERE
tp.TekstopisacID = @TekstopisacID
);

-- Pozivanje bazne funkcije


SELECT *
FROM kdfProducentTekstopisacHonorar(1);

35
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

9.3.4 Bazna procedura


Napraviti baznu proceduru kdpFormiranjeHonorara, koja treba da:

Proverava se da li je prosleđeni iznos honorara pozitivan. Ako nije, ispisuje se greška i procedura se
zaustavlja.

Proverava da li pesma sa prosleđenim ID-om postoji u tabeli "Pesma". Ako ne postoji, ispisuje se
odgovarajuća greška i procedura se zaustavlja.

Proverava da li producent sa prosleđenim ID-om postoji u tabeli "Producent". Ako ne postoji, ispisuje
se odgovarajuća greška i procedura se zaustavlja.

Proverava da li tekstopisac sa prosleđenim ID-om postoji u tabeli "Tekstopisac". Ako ne postoji,


ispisuje se odgovarajuća greška i procedura se zaustavlja.

Ako su svi uslovi ispunjeni, honorar se ubacuje u tabelu "Honorar" sa trenutnim datumom isplate,
prosleđenim iznosom honorara i ID-om tekstopisca.

Ako dođe do bilo kakve greške prilikom izvršavanja koraka, hvata se greška i ispisuje se odgovarajuća
poruka. Programski kod za kreiranje procedure sledi u nastavku.
USE MuzickaKuca

GO

CREATE PROCEDURE kdpFormiranjeHonoraraPesmaProducentTekstopisac


@pPesmaID INT,
@pProducentID INT,
@pTekstopisacID INT,
@pIznosHonorara DECIMAL(10, 2)
AS
BEGIN
DECLARE @lDatumIsplate DATE;
SET @lDatumIsplate = GETDATE(); -- Postavljanje datuma isplate na trenutni datum

BEGIN TRY
-- Provera da li je iznos honorara pozitivan
IF @pIznosHonorara <= 0
BEGIN
PRINT 'Greska!!!!!!!';
PRINT 'Iznos honorara mora biti pozitivan.';
RETURN;
END

-- Provera da li pesma sa datim ID-om postoji


IF NOT EXISTS (SELECT 1 FROM Pesma WHERE PesmaID = @pPesmaID)
BEGIN
PRINT 'Pesma sa datim ID-om ne postoji.';
RETURN;
END

-- Provera da li producent sa datim ID-om postoji


IF NOT EXISTS (SELECT 1 FROM Producent WHERE ProducentID = @pProducentID)
BEGIN
PRINT 'Producent sa datim ID-om ne postoji.';
RETURN;
END
36
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

-- Provera da li tekstopisac sa datim ID-om postoji


IF NOT EXISTS (SELECT 1 FROM Tekstopisac WHERE TekstopisacID = @pTekstopisacID)
BEGIN
PRINT 'Tekstopisac sa datim ID-om ne postoji.';
RETURN;
END

-- Ubaci honorar
INSERT INTO Honorar (DatumIsplate, IznosHonorara, TekstopisacID)
VALUES (@lDatumIsplate, @pIznosHonorara, @pTekstopisacID);

PRINT 'Honorar uspešno ubačen za tekstopisca sa ID ' + CAST(@pTekstopisacID AS


VARCHAR) + '.';
END TRY
BEGIN CATCH
PRINT 'DOŠLO JE DO GREŠKE prilikom ubacivanja honorara.';
PRINT ERROR_MESSAGE();
END CATCH
END;

-- Prvo pozivanje bazne procedure

EXEC kdpFormiranjeHonoraraPesmaProducentTekstopisac @pPesmaID = 1, @pProducentID = 1,


@pTekstopisacID = 1, @pIznosHonorara = 400.00;

Procedura vraća sledeću poruku:

Provera izvršenja poslovne transakcije, vrši se ponovnim pozivom bazne funkcije sa


odgovarajućom vrednošću argumenta.

SELECT *
FROM kdfProducentTekstopisacHonorar(1);

37
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće
-- Drugo pozivanje bazne procedure

EXEC kdpFormiranjeHonoraraPesmaProducentTekstopisac @pPesmaID = 1, @pProducentID = 1,


@pTekstopisacID = 1, @pIznosHonorara = -400.00;

U drugom pozivu procedure prosleđena je negativna vrednost za parametar @pIznosHonorara.


Pošto smo uveli ograničenje da honorar mora biti pozitivna vrednost, procedura izbacuje poruku o
grešci, kao što je prikazano u nastavku.

38
Projektovanje baze podataka za podršku radu muzičke izdavačke
kuće

10.Literatura
1. Majstorović M.: Baze podataka, skripta, Visoka škola strukovnih studija za informacione
tehnologije, Beograd, 2013.

2. M. Majstorović, Uvod u baze podataka, Visoka škola strukovnih studija za informacione


tehnologije, Beograd, 2015, ISBN 978-86-89007-03-9.

3. Majstorović M.: Napredne baze podataka, ITS, Beograd, 2017, ISBN 978-86-89007-19-0.

4. Majstorović M.: Baze podataka, predavanja i vežbe za predmet u ppt formi,


školska 2019/2020. (na studentskom portalu).

39

You might also like