You are on page 1of 12

Projektovanje baza podataka (programiranje CRUD operacija)

CRUD = Create, Read, Update, Delete


C= Create
Jezik za definisanje podataka (Data Definition Language (DDL)) omoguava formiranje
strukture baze podataka.
DDL! "reiranje baze
Nakon projektovanja strukture baze podataka, naredni korak je, izdavanje komande MySQ!u za
kreiranje nove baze podataka. "o se radi pomo#u SQ!ove komande CR$%"$ D%"%&%S$, na slede#i
na'in(
CR#$%# D$%$&$'# ()* +,% #-)'%'. db_name/
Uslov je da imate CR$%"$ privile)iju za bazu.
CR$%"$ D%"%&%S$ kreira bazu podataka sa datim nazivom. %ko ve# postoji baza podataka sa datim nazivom, a nije
upotrebljeno *+ N," $-*S"S, javi#e se )re.ka.
/reiranje baze podataka poslovanje(
CR$%"$ D%"%&%S$ poslovanje0
%ko korisnik 1eli da proveri da li je ova komanda uspe.no izvr.ena mo1e da izda komandu(
S2,3 D%"%&%S$S0
"rebalo bi da se naziv nove baze podataka pojavi u spisku baza podataka na serveru. Sada na serveru postoji prazna
baza podataka, a u MySQ data direktorijumu postoji direktorijum i i datoteka db.opt u direktorijumu baze. /ako se
budu dodavale tabele, dodava#e se i datoteke koje od)ovaraju tabelama.
Nazive baza podataka je najbolje pisati malim slovima. U nazivima baza ne treba koristiti razmake. %ko se 1eli e4ekat
razmaka treba koristiti donju 5rtu 678.
/omanda CR#$%# 'C0#1$ je sinon2m za CR#$%# D$%$&$'# (12'3L 45657)
Pro8irenje komande ima sintaksu!
CR#$%# 9D$%$&$'# : 'C0#1$; ()* +,% #-)'%'. db_name
9create_specification: ...
create_specification(
9D$+%U": C2%R%C"$R S$" 9=: charset_name
; 9D$+%U": C,%"$ 9=: collation_name
create_specification je op5ija koja spe5i4ira kara5teristi baze 6one se 'uvaju u datote5i db.opt u direktorijumu baze8.
/lauza C2%R%C"$R S$" spe5i4i5ira karakterski skup
/lauza C,%"$ spe5i4i5ira podrazumevanu kola5iju baze podataka. Collation 6uparivanje8 je skup pravila za pore<enje karaktera u
okviru seta karaktera.
=a kreiranje baze mo1e se koristiti mys>ladmin pro)ram 6?mys>ladmin @ Client 4or %dministerin) a MySQ
ServerA8.
DDL! "reiranje tabe<a (podsetnik)

+aredba"reiranja%abe<a!!= CR#$%# %$&L# %abe<a(Definicija"o<one= >(,granicenje%abe<e= >.)/
Definicija"o<one!!= "o<ona9 %ip : Domen; ,granicenje"o<one>
%ip"o<one!!=
,granicenja"o<one!!=
foreign?ke2?c<ause!!=
,)rani'enja/olone ,)ran'enja"abele
+,% +ULL
U+)3U#
PR)1$R@ "#@
C0#C"(Predikat)
D#*$UL%=Const
R#*#R#+C#' %abe<a(("o<ona).
(,+ UPD$%#9+, $C%),+:C$'C$D#:'#%
+ULL:'#% D#*$UL%;.
(,+ D#L#%#9+, $C%),+:C$'C$D#:'#%
+ULL:'#% D#*$UL%;.
U+)3U#("o<ona= >)
PR)1$R@ "#@("o<ona= >)
C0#C"(Predikat)
*,R#)A+ "#@("o<ona= >)
R#*#R#+C#' %abe<a(("o<ona= >).
(,+ UPD$%#9+, $C%),+:C$'C$D#:'#%
+ULL:'#% D#*$UL%;.
(,+ D#L#%#9+, $C%),+:C$'C$D#:'#%
+ULL:'#% D#*$UL%;.
,graniBenja%abe<e!!=
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_option ...]
ili:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
[table_option ...]
select_statement
ili:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
{ LIKE old_tbl_name | (LIKE old_tbl_name) }
create_definition:
column_definition
| [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
| {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
| [CONSTRAINT [symbol]] NI!E [INDEX|KEY]
[index_name] [index_type] (index_col_name,...)
| {FLLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)
| [CONSTRAINT [symbol]] FOREI"N KEY
[index_name] (index_col_name,...) [reference_definition]
| C#ECK (expr)
column_definition:
col_name data_type [NOT NLL | NLL] [DEFALT default_value]
[ATO$INCREMENT] [NI!E [KEY] | [PRIMARY] KEY]
[COMMENT %string%] [reference_definition]
index_col_name:
col_name [(length)] [ASC | DESC]
index_type:
SIN" {BTREE | #AS#}
reference_definition:
REFERENCES tbl_name [(index_col_name,...)]
[MATC# FLL | MATC# PARTIAL | MATC# SIMPLE]
[ON DELETE reference_option]
[ON PDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NLL | NO ACTION
table_option:
{EN"INE|TYPE} [&] engine_name
| ATO$INCREMENT [&] value
| A'"$RO($LEN"T# [&] value
| [DEFALT] C#ARACTER SET charset_name
| C#ECKSM [&] {) | *}
| COLLATE collation_name
| COMMENT [&] %string%
| CONNECTION [&] %connect_string%
| DATA DIRECTORY [&] %absolute path to directory%
| DELAY$KEY$(RITE [&] {) | *}
| INDEX DIRECTORY [&] %absolute path to directory%
| INSERT$MET#OD [&] { NO | FIRST | LAST }
| MAX$RO(S [&] value
| MIN$RO(S [&] value
| PACK$KEYS [&] {) | * | DEFALT}
| PASS(ORD [&] %string%
| RO($FORMAT [&]
{DEFALT|DYNAMIC|FIXED|COMPRESSED|REDNDANT|COMPACT}
| NION [&] (tbl_name[,tbl_name]...)
select_statement:
[I"NORE | REPLACE] [AS] SELECT ...
,graniBenja (Constraints)
%ko se redovno sortiraju poda5i u tabeli po jednoj istoj koloni ili kolonama potrebno je napraviti indeks
za tu kolonu ili te kolone. *ndeks je interna tabela vrednosti koja odr1ava red, odnosno redosled zapisa.
Na ovaj na'in, kada je potrebno da se sortiraju poda5i ili kada je potrebno da se odre<eni podatak
prona<e brzo MySQ mo1e da vr.i pretra1ivanje po indeks klju'evima po poznatom redosledu, .to je
bolje od sekven5ijalno) pretra1ivanja po poda5ima.
Bravljenje indeksa usporava uno.enje podataka0 svaki novi zapis, obrisani zapis ili promena vrednosti u
indeksiranoj koloni zaCteva promenu indeksa. *ndeksirane kolone treba koristiti samo onda kada su
stvarno neopCodne.
/$D 6klju'8 je sinonim za *ND$- 6indeks8 i zna'i da #e zadata kolona 6ili kolone8 biti indeksirana.
*ndeksi se koriste da bi se brzo prona.li redovi sa odre<enom vredno.#u u koloni. %tribut BR*M%RD
/$D se mo1e spe5i4i5irati i kao /$D kada je dat u de4ini5iji kolone.
UN*QU$ 6jedinstveni8 indeks kreira o)rani'enje takvo da sve vrednosti u indeksu 6odnosno koloni koja
je indeksirana8 moraju biti razli'ite. Ukoliko korisnik poku.a da doda novi red u tabelu koji ima istu
vrednost u koloni za koju je de4inisan UN*QU$ indeks kao neki dru)i red javi#e se )re.ka. ,vo
o)rani'enje se ne odnosi na NU vrednosti sem za &D& ma.ine za sme.tanje podataka. , ma.inama
bi#e re'i dole u tekstu. =a ostale ma.ine za sme.tanje podataka UN*QU$ indeks dozvoljava vi.estruke
NU vrednosti za kolone koje mo)u sadr1ati NU vrednosti.
BR*M%RD /$D 6primarni klju'8 je jedinstveni indeks )de sve kolone klju'a moraju biti de4inisane kao
N," NU. %ko nisu ekspli5itno deklarisane kao N," NU, MySQ iC deklari.e impli5itno. "abela
mo1e imati samo jedan primarni klju'. Na ovaj na'in se postavlja o)rani'enje nad tabelom. "o zna'i da
se upisom novo) zapisa u kolonu koja je primarni klju' ne sme upisati vrednost koja ve# postoji. =a
kolonu 6ili kolone8 koja je primarni klju' se automatski 4ormira indeks.
U kreiranoj tabeli primarni klju' je sme.ten kao prvi, zatim dolaze svi UN*QU$ 6jedinstveni8
indeksi i na kraju svi nejedinstveni indeksi.
Brimani klju' mo1e biti indeks nad vi.e kolona. Me<utim, nije mo)u#e kreirati indeks nad vi.e kolona
kori.#enjem atributa BR*M%RD /$D u spe5i4ika5iji kolone. Mora se koristiti posebna BR*M%RD
/$D6index_col_name, ...8 klauzula.
U MySQ!u naziv primarno) klju'a je BR*M%RD. =a ostale indekse, ako im se ne dodeli naziv, indeksu
se daje naziv prve indeksirane kolone, zajedno sa op5ionim su4iksom 67E,7F, ...8 da bi bio jedinstven.
Nazivi indeksa tabele se mo)u po)ledati sa S2,3 *ND$- +R,M tbl_name.
=a ma.ine za skladi.tenje koje nisu tipa *nnoD& je mo)u#e prilikom de4inisanja kolone koristiti
R$+$R$NC$S tbl_name6col_name8 koja nema stvarni e4ekat i slu1i samo kao podsetnik ili komentar
korisniku da se namerava da kolona koja se trenutno de4ini.e ukazuje na kolonu neke dru)e tabele.
Neke ma.ine za skladi.tenje dozvoljavaju de4inisanje tipa indeksa prilikom kreiranja indeksa.
Spe5i4ika5ija za index_col_name se mo1e zavr.avati sa %SC ili D$SC. ,ve klju'ne re'i su dozvoljene
za budu#e ekstenzije za spe5i4i5iranje sme.tanja vrednosti u indeksu po rastu#em ili opadaju#em
redosledu. "renutno se ove klju'ne re'i i)nori.u0 vrednosti u indeksu su uvek sme.tene po rastu#em
redosledu.
Mo)u#e je kreirati spe5ijalne +U"$-" indekse koji se koriste za +ull!teGt 6tekstualna8 pretra1ivanja.
Samo My*S%M ma.ina za skladi.tenje podr1ava +U"$-" indekse. ,ni mo)u biti kreirani samo za
C2%R, H%RC2%R i "$-" kolone.
Mo)u#e je kreirati SB%"*% indekse za prostorne tipove podataka 6dozvoljavaju )enerisanje, sme.tanje
i analizu )eo)ra4skiC obele1ja8. ,vi tipovi podataka su podr1ani samo u My*S%M tabelama i
indeksirane kolone moraju biti deklarisane kao N," NU.
*nnoD& tabele podr1avaju o)rani'enja tipa strani klju' 6+,R$*IN /$D8. Strani klju' je skup kolona
6jedna ili vi.e kolona8 iz jedne tabele 6sekundarna tabela ili dete tabela8 'ije vrednosti moraju da se
Jsla1u?, odnosno da od)ovaraju vrednostima primarno) klju'a u nekoj dru)oj tabeli 6primarna tabela ili
roditelj tabela8. De4inisanjem strano) klju'a se u stvari uspostavlja rela5ija izme<u tabela. Sintaksa za
de4inisanje strano) klju'a kod ovo) tipa tabela iz)leda ovako(
[CONSTRAINT symbol] FOREI"N KEY [id] (index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {RESTRICT | CASCADE | SET NLL | NO ACTION}]
[ON PDATE {RESTRICT | CASCADE | SET NLL | NO ACTION}]
Brilikom de4inisanja strano) klju'a obe tabele moraju biti *nnoD& tabele i ne smeju biti privremene
6"$MB,R%RD8 tabele.
*nnoD& odbija bilo koju *NS$R" ili UBD%"$ opera5iju koja poku.ava da kreira vrednost za strani klju' u
dete tabeli ako ne postoji od)ovaraju#a vrednost klju'a u roditelj tabeli. %k5ija koju preduzima *nnoD& za
bilo koju UBD%"$ ili D$$"$ opera5iju koja poku.ava da promeni ili obri.e vrednost klju'a u roditelj
tabeli koji ima povezane redove u dete tabeli zavisi od re4eren5ijalne ak5ije spe5i4i5irane kori.#enjem ,N
UBD%"$ i ,N D$$"$ podklauzula u +,R$*IN /$D klauzuli. /ada korisnik poku.a da obri.e ili
promeni red u roditelj tabeli, a postoje jedan ili vi.e povezaniC redova u dete tabeli, *nnoD& podr1ava K
op5ija vezano za ak5iju koja #e biti izvr.ena(
L C%SC%D$( &risanjem ili izmenom reda u roditelj tabeli se automatski bri.u ili menjaju povezani redovi u
dete tabeli
L S$" NU( &risanjem ili izmenom reda u roditelj tabeli se vrednost u koloni koja je strani klju' dete
tabele za povezane redove postavlja na NU. ,vo va1i samo ako kolone koje su strani klju' nemaju
spe5i4i5iran N," NU kvali4ikator.
L N, %C"*,N( U standardnom SQ!u N, %C"*,N zna'i da nema ak5ije u smislu da ne#e biti mo)u#e
obrisati ili promeniti vrednost primarno) klju'a u roditelj tabeli ako postoji povezana vrednost strano) klju'a
u dete tabeli. *nnoD& odbija opera5iju brisanja ili izmene za roditelj tabelu.
L R$S"R*C"( ,dbija se opera5ija brisanja ili izmene za roditelj tabelu
L S$" D$+%U"( ,va ak5ija je prepoznata od strane parsera, ali *nnoD& odbija de4ini5ije tabela koje sadr1e
,N D$$"$ S$" D$+%U" ili ,N UBD%"$ S$" D$+%U" klauzule
,d)ovaraju#e kolone koje 'ine strani i primarni klju' moraju imati sli'ne tipove podataka da bi mo)le da
budu pore<ene bez konverzije podataka. Heli'ina i znak 5elobrojniC tipova moraju biti isti. Du1ine strin)
tipova ne moraju biti iste.
Cadaci
M. Neka je kreirana baza podataka pos<ovanje koja slu1i za pra#enje poslovanja jedne 4irme koja radi sa odre<enom
)rupom proizvoda i sara<uje sa odre<enim brojem dru)iC 4irmi.
&aza podataka pos<ovanje ima 'etiri tabele i to( priozvodi, 4irme, 4akture i detalji74akture.
Na slede#oj sli5i se mo)u videti sve tabele sa nazivima kolona i primarnim klju'evima 6nazivi kolona ispisani
polu5rnim slovima8 i uspostavljene rela5ije i strani klju'evi u od)ovaraju#im tabelama. Mo1e se videti da su sve
uspostavljene rela5ije tipa jedan!prema vi.e.
/reirajte tabelu proizvodi
R$N$NO$(
Herzija M Herzija E
CR$%"$ "%&$ proizvodi 6
mati5ni7broj "*ND*N"6F8 UNS*IN$D N," NU,
ime H%RC2%R6KP8 N," NU,
jed7mere H%RC2%R6EP8 N," NU,
BR*M%RD /$D 6mati5ni7broj8
80
CR$%"$ "%&$ proizvodi 6
mati5ni7broj "*ND*N"6F8 UNS*IN$D N," NU,
ime H%RC2%R6KP8 N," NU,
jed7mere H%RC2%R6EP8 N," NU
80
QQQQuery ,/, P roRs a44e5ted 6P.PS se58
%"$R "%&$ proizvodi
%DD C,NS"R%*N" pk7mb
BR*M%RD /$D 6mati5ni7broj80
QQQQuery ,/, P roRs a44e5ted 6P.PT se58
Re5ords( P Dupli5ates( P 3arnin)s( P
E. /reirajte tabele +akture i Detalji74akture koje su povezane preko strano) klju'a. Naime, polje +aktura iz tabele
Detalji74akture mo1e uzimati samo one vrednosti koje se pojavljuju u polju Si4ra74akture tabele +akture.
Hodite ra'una da obezbedite deklarisanje kolona od)ovaraju#im op5ijama BR*M%RD /$D, /$D, UN*QU$ ili *ND$-,
kako bi mo)ao da se automatski 4ormira i indeks. Svi indeksi koji su neopCodni naj'e.#e #e se kreirati automatski
prilikom kreiranja tabele.
R$N$NO$(
CREATE TABLE +i,-. (
+i,-/ TINYINT(0) NSI"NED NOT NLL,
1/2i3$+i,-. 'ARC#AR(*))) NOT NLL,
-.456 'ARC#AR(7)) NOT NLL,
/8,.4/ 'ARC#AR(7)) NOT NLL,
5.l.+61 'ARC#AR(9)) NOT NLL,
PRIMARY KEY (+i,-/)
):
CREATE TABLE +/;5<,. (
4i+,/$+/;5<,. SMALLINT(7) NSI"NED NOT NLL,
4i+,/$+i,-. TINYINT(0) NSI"NED NOT NLL,
8/5<- DATE NOT NLL,
<l/2$i2l/2 C#AR(*) NOT NLL,
PRIMARY KEY (4i+,/$+/;5<,.),
KEY ;$4i+,/$+i,-. (4i+,/$+i,-.),
CONSTRAINT +;$+/;5<,.$+i,-. FOREI"N KEY (4i+,/$+i,-.) REFERENCES +i,-. (+i,-/)
ON DELETE CASCADE ON PDATE CASCADE
):
CREATE TABLE 8.5/l=i$+/;5<,. (
i8 MEDIMINT(>) NSI"NED NOT NLL ATO$INCREMENT,
+/;5<,/ SMALLINT(7) NSI"NED NOT NLL,
,.8$?, TINYINT(0) NSI"NED NOT NLL,
@,6i2368 TINYINT(0) NSI"NED NOT NLL,
;6liAi1/ DECIMAL(>,9) NOT NLL,
8/1$A.1/ DECIMAL(>,9) NOT NLL,
PRIMARY KEY (i8),
KEY ;$@,6i2368 (@,6i2368),
KEY ;$+/;5<,/ (+/;5<,/),
CONSTRAINT +;$8.5/l=i$+/;5<,.$@,6i2368i FOREI"N KEY (@,6i2368) REFERENCES
@,6i2368i (-/5iA1i$?,6=) ON DELETE CASCADE ON PDATE CASCADE,
CONSTRAINT +;$8.5/l=i$+/;5<,.$+/;5<,. FOREI"N KEY (+/;5<,/) REFERENCES +/;5<,.
(4i+,/$+/;5<,.) ON DELETE CASCADE ON PDATE CASCADE
):
1a8ine za sk<adi8tenje i tipovi tabe<a
MySQ podr1ava nekoliko ma.ina za skladi.tenje koji rade kao manipulatori za razli'ite tipove tabela. Me<u ovim
ma.inama postoje one koje rade sa transak5ionim i one koje rade sa netransak5ionim tabelama. ,vo su samo neke od
ukupno MM ma.ina za skladi.tenje.
L My*S%M upravlja netransak5ionim tabelama. ,bezbe<uje visoku brzinu sme.tanja i preuzimanja podataka kao i
mo)u#nost 4ullteGt pretra1ivanja.
L M$M,RD ma.ina za skladi.tenje radi sa tabelama koje su sme.tene u memoriji ra'unara i nikada se ne upisuju na
disk. =aCvaljuju#i tome te tabele su veoma brze, ali veli'ina im je o)rani'ena i poda5i iz njiC se ne mo)u restaurirati
ukoliko do<e do kvara sistema.
M$RI$ ma.ina za skladi.tenje, tako<e poznata i kao MRI7My*S%M ma.ina omo)u#ava rad sa kolek5ijom identi'niC
My*S%M tabela kao sa jednom tabelom. Bod identi'nim tabelama se podrazumeva da tabele imaju identi'ne kolone i
indekse. "o se mo1e iskoristiti kada operativni sistem o)rani'ava maksimalnu veli'inu 4ajlova U pa zbo) to)a i tabela.
M$M,RD i M$RI$ rade sa netransak5ionim tabelama.
L *nnoD& ma.ina za skladi.tenje radi sa transak5ionim tabelama i ima mo)u#nosti izvr.avanja, rollba5k!a i oporavka
prilikom Cavarije. ,va ma.ina radi zaklju'avanje na nivou redova prilikom transak5ija. Dizajnirana je za maksimum
per4ormansi kada obra<uje velike koli'ine podataka. ,va ma.ina podr1ava spoljne klju'eve. ,vo je podrazumevana
ma8ina za sk<adi8tenje5
L %RC2*H$ ma.ina za skladi.tenje se koristi za sme.tanje velikiC koli'ina podataka bez indeksa.
SQ!SE( ,p.ti inte)ritet
Naredba/reiranjaBravila((= CR$%"$ %SS$R"*,N Bravilo C2$C/6,)rani5enje80
NaredbaUklanjanjaBravila((=DR,B %SS$R"*,NBravilo0
DD( izvr.avanje o)rani'enja
Naredba *menovanja Bravila((=
C,NS"R%*N" Bravilo C2$C/6,)rani5enje8
9 V *N*"*%D D$+$RR$D; *N*"*%D *MM$D*%"$W :
9 V D$+$RR%&$; N," D$+$RR%&$W : 0
NaredbaBostvljanjaModaBravila((= S$" C,NS"R%*N"V Bravilo, X; %WV D$+$RR$D; *MM$D*%"$W
Cadaci
F. Data je .ema rela5ione baze podataka 4ubalsko) saveza za potrebe eviden5ije utakmi5a jedne sezone
6pretpostavka je da 4udbaleri ne mo)u da menjaju tim u kome i)raju, u toku sezone8(
+UD&%$R 6Si4+, *me, Si4"80
"*M 6Si4", Naziv, Mesto80
U"%/M*C% 6Si4U, Si4"Doma5i, Si4"Iost, /olo, *sCod, Iodina80
*IR%, 6Si4+, Si4U, Bozi5ija*)ra5a80
I, 6Si4I, Si4U, Si4+, Redni&rIola, Minut80
/%R",N 6Si4/, Si4U, Si4+, "ip, Minut80
Sastaviti SQ skript kojim se 4ormira tabela U"%/M*C%, ukoliko je poznato da utakmi5u i)raju dva
razli'ita tima 'ije se .i4re nalaze u tabeli "*M, da isCod utakmi5e mo1e biti iz skupa vrednosti
V-!nere.eno, M!pobeda doma#iC, E!pobeda )ostijuW i da postoji YE kola u kojima se utakmi5e i)raju. U toku
sezone svaki par timova odi)ra dve utakmi5e, pri 'emu je jedna na doma#em, a dru)a na )ostuju#em terenu.
Re.enje(
CR$%"$ "%&$ U"%/M*C%
6
Si4U *N" BR*M%RD /$D,
Si4"Doma5i *N" N," NU R$+$R$NC$S "*M6Si4"8 ,N UBD%"$ C%SC%D$,
Si4"Iost *N" N," NU R$+$R$NC$S "*M6Si4"8 ,N UBD%"$ C%SC%D$,
/olo *N" N," NU C2$C/ 6/olo &$"3$$N M and YE8,
*sCod C2%R N," NU C2$C/ 6*sCod *N 6 ZMZ, ZEZ, Z-Z88,
Iodina *N",
C2$C/ 6Si4"Doma5i[Q Si4"Iost8,
UN*QU$ 6Si4"Doma5i, Si4"Iost8
80
Y.
Data je .ema rela5ione baze podataka za potrebe skladi.ta robe u toku jedne )odine(
R,&%6Si4R, Naziv, ,pis, Si4D80
D,&%HO%C6Si4D, Naziv, %dresa80
N%&%H/%6Si4N, Datum, /oli5ina, Cena, Si4R80
Sastaviti SQ skript koji 4ormira tabelu N%&%H/% ukoliko je poznato da se datum predstavlja kao
5elobrojna vrednost u opse)u odM doFTK, i da 5ena predstavlja jedini'nu 5enu koja ne sme biti skuplja za vi.e
odMP\ od 5ene pri pretCodnoj nabav5i te robe. "ako<e je poznato da jedno) datuma mo1e biti najvi.e jedna
nabavka jedne vrste robe.
Re.enje(
CR$%"$ "%&$ N%&%H/%
6 Si4N *N" BR*M%RD /$D,
Datum *N" N," NU C2$C/ 6Datum &$"3$$N M and FTK8,
Cena *N" N," NU C2$C/ 6CenaQP8,
/oli5ina *N" N," NU C2$C/ 6/oli5inaQP8,
Si4R *N" N," NU R$+$R$NC$S R,&%6Si4R8 ,N UBD%"$ C%SC%D$,
UN*QU$ 6Si4R, Datum8,
C2$C/ 6N," $-*S"S 6S$$C" ]
+R,M N%&%H/% NM
32$R$ NM.Cena Q= M.MP ]6S$$C" N.Cena
+R,M N%&%H/% NE
32$R$ NE.Si4R=NM.Si4R
%ND NE.Datum = 6S$$C" M%-6NF.Datum8
+R,M NabavkaNF
32$R$ NF.Si4R=NM.Si4R
%ND NF.Datum[NM.Datum
8
8
8
8
80
K. Data je .ema rela5ione baze podataka, za potrebe izra'unavanja pomo#u matri5a(
M%"R*C%6Si4M, Naziv, &rHrsta, &r/olona80
B,D%C*6Si4B, *, O, Hrednost, Si4M80
Sastaviti SQ skript koji 4ormira tabelu B,D%C* ukoliko je poznato da svaka matri5a mora imati za svaki
element po ta'no jednu 5elobrojnu vrednost.
Re.enje(
CR$%"$ "%&$ B,D%C*
6
Si4B *N" BR*M%RD /$D,
* *N" N," NU C2$C/ 6* Q P8,
O *N" N," NU C2$C/ 6O Q P8,
Hrednost *N" N," NU,
Si4M *N" N," NU R$+$R$NC$S M%"R*C%6Si4M8 ,N UBD%"$ C%SC%D$,
UN*QU$ 6Si4M, *, O8,
C2$C/ 6N," $-*S"S 6S$$C" ]
+R,M B,D%C* NM
IR,UB &D Si4M
2%H*NI M%- 6*8 [Q C,UN" 6*8
8
8,
C2$C/ 6N," $-*S"S 6S$$C" ]
+R,M B,D%C* NM
IR,UB &D Si4M
2%H*NI M%- 6O8 [Q C,UN" 6O8
8
8
80
CR$%"$ %SS$R"*,N Dimenzije
C2$C/ 6N," $-*S"S 6S$$C" ]
+R,M B,D%C* B, M%"R*C% M
32$R$ B.Si4M=M.Si4M
IR,UB &D M.Si4M, M.&rHrsta, M.&r/olona
2%H*NI 6&rHrsta[Q C,UN"6B.*88 ,R 6&r/olona[Q C,UN"6B.O88
8
80
Izmena strukture postojee tabele ALTER TABLE sintaksa
ALTER [I"NORE] TABLE tbl_name
alter_specification [, alter_specification] ...
alter_specification:
ADD [COLMN] column_definition [FIRST | AFTER col_name ]
| ADD [COLMN] (column_definition,...)
| ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
| ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
| ADD [CONSTRAINT [symbol]]
NI!E [INDEX|KEY] [index_name] [index_type] (index_col_name,...)
| ADD [FLLTEXT|SPATIAL] [INDEX|KEY] [index_name] (index_col_name,...)
| ADD [CONSTRAINT [symbol]] FOREI"N KEY [index_name] (index_col_name,...)
[reference_definition]
| ALTER [COLMN] col_name {SET DEFALT literal | DROP DEFALT}
| C#AN"E [COLMN] old_col_name column_definition [FIRST|AFTER col_name]
| MODIFY [COLMN] column_definition [FIRST | AFTER col_name]
| DROP [COLMN] col_name
| DROP PRIMARY KEY
| DROP {INDEX|KEY} index_name
| DROP FOREI"N KEY fk_symbol
| DISABLE KEYS
| ENABLE KEYS
| RENAME [TO] new_tbl_name
| ORDER BY col_name
| CON'ERT TO C#ARACTER SET charset_name [COLLATE collation_name]
| [DEFALT] C#ARACTER SET charset_name [COLLATE collation_name]
| DISCARD TABLESPACE
| IMPORT TABLESPACE
| table_option ...
index_col_name:
col_name [(length)] [ASC | DESC]
index_type:
SIN" {BTREE | #AS#}
%"$R "%&$ omo)u#ava promenu strukture postoje#e tabele. Na primer, mo)u#e je dodati ili
izbrisati kolone, kreirati ili uni.titi indekse, promeniti tip podataka za postoje#e kolone ili preimenovati
kolone ili 5elu tabelu.
Sintaksa za mno)e dozvoljene promene je sli'na sintaksi za klauzule CR$%"$ "%&$ iskaza.
U ve#ini slu'ajeva %"$R "%&$ radi tako .to pravi privremenu kopiju ori)inalne tabele.
*zmene se vr.e na kopiji, a zatim se ori)inalna tabela bri.e, a privremena tabela se preimenuje u
ori)inalnu.
%ko se koristi %"$R "%&$ tbl_name R$N%M$ ", new_tbl_name bez dodatniC op5ija, MySQ
jednostavno preimenuje sve 4ajlove koji od)ovaraju tabeli tbl_name. U ovom slu'aju nema potrebe za
pravljenjem privremene tabele.
,p5ije C2%NI$ i M,D*+D zapravo su jedna te ista op5ija i omo)u#avaju izmenu de4ini5ije kolone ili
njeno) mesta u tabeli.
,p5ija DR,B C,UMN bri.e kolonu iz tabele, dok op5ije DR,B BR*M%RD /$D i DR,B *ND$-
bri.u samo indeks pridru1en koloni.
,p5ija D*S%&$ /$DS nala1e MySQ!u da ne a1urira sadr1aj nejedinstveniC indeksa, ali upotrebljiva
je samo za My*S%M tabele. ,p5ija $N%&$ /$DS uklju'uje a1uriranje indeksa.
,p5ija ,RD$R &D #e pore<ati zadatim redosledom redove tabele na koju je primenjena.
"aj redosled ne#e biti o'uvan kasnije kada se budu dodavali ili brisali poda5i.
=ada5i 6imajte na umu tabele iz zadatka M i bazu podataka poslovanje8
B.
/reirati SQ iskaz kojim se dodaje nova kolona sa nazivom primio i tipom podataka H%RC2%R6KP8
tabeli fakture.
Re.enje(

%"$R "%&$ fakture
%DD C,UMN primio H%RC2%R6KP80
^. /reirati SQ iskaz kojim se bri.e pretCodno dodata kolona iz zadatka T.
Re.enje(
%"$R "%&$ fakture
DR,B C,UMN primio0
_. /reirati SQ iskaz kojim se menja de4ini5ija kolone kolicina tabele detalji_fakture u smislu promene
pode.avanja za tip podataka.
%"$R "%&$ detalji_fakture
M,D*+D C,UMN kolicina D$C*M%6T,E80
S. /reirati SQ iskaz kojim se menja de4ini5ija kolone kolicina tabele detalji_fakture u smislu vra#anja
na prvobitnu de4ini5iju.
%"$R "%&$ detalji_fakture
M,D*+D C,UMN kolicina D$C*M%6_,E80
MP. /reirati SQ iskaz kojim se menja de4ini5ija kolone dan_cena tabele detalji_fakture tako .to se
naziv kolone iz dan_cena menja u cena i pored sve)a se menjaju pode.avanja za tip podataka 6u
prvobitnoj de4ini5iji je bilo D$C*M%6_,E88.
%"$R "%&$ detalji_fakture
C2%NI$ C,UMN dan_cena cena D$C*M%6MP,E80
=ada5i za ve1banje(
DD. Data je .ema rela5ione baze podataka veleprodajno) lan5a prodavni5a(
BR,D%HN*C%6Si4B, %dresa, Si4M80
M$S",6Si4M, Naziv80
/*O$N"6Si4/, Naziv, Si4M80
R%CUN6Si4R, Si4/, Si4B, Si4Ra, Datum80
BR,*=H,D6Si4Br, Naziv, Cena80
S"%H/%7R%CUN%6Si4S, Si4R, Si4Br, Redni&r, /oli5ina, *znos80
R%DN*/6Si4Ra, *me, Si4B80
Sastaviti SQ skript kojim se 4ormira tabela S"%H/%7R%CUN%, ukoliko je poznato da se stavke jedno)
ra'una moraju unositi redom 6suk5esivni Redni&r8 i da *znos mora biti de4inisan koli'inom i 5enom
proizvoda na koji se posmatrana stavka odnosi. Oedan proizvod sena ra'unu ne sme pojavljivati u vi.e stavki.
ME. Data je .ema rela5ione deo baze podataka 4akulteta(
S"UD$N" 6Si4S, *me, &r*ndeksa80
BR,+$S,R 6Si4B, *me, Si4,80
,DS$/ 6Si4,, Naziv80
/URS 6Si4/, Naziv, &r/redita, Si4,8 U`*,N*C% 6Si4U, &rMesta80
BR$DUS,H 6Si4/, Si4/B8 B,2%a%6Si4S, Si4R80
R%SB,R$D 6Si4R, Si4B, Si4/, Si4U, "ermin, Dan, &r.BrijavljeniC80
Sastaviti SQ skript kojim se 4ormira tabela R%SB,R$D, ukoliko je poznato da samo jedan pro4esor mo1e
dr1ati po rasporedu predavanje u jednom terminu u jednoj u'ioni5i.
Bri tom broj prijavljeniC mora biti manji od broja mesta u u'ioni5i koja je rasporedu predvi<ena za taj kurs, a
tako<e vrednost atributa termin mora biti 5elobrojna vrednost u opse)u od M do ^, a vrednost atributa dan iz
skupa vrednosti VBon, Uto, Sre, Cet, BetW.

You might also like