Anda di halaman 1dari 30

VISOKA ŠKOLA „CEPS –CENTAR ZA POSLOVNE STUDIJE“-KISELJAK

Informacijske tehnologije

Informacijski sistemi i tehnologije

SEMINARSKI RAD

SQL SERVER

Mentor: Student:

Prof.dr Hadzib Salkić Admin Vrbić


Microsoft SQL Server

Microsoft SQL Server je relacijska baza podataka kojoj je primarni jezik za


upite Transact SQL (T-SQL), što znači da osim osnovnih i klasičnih (SELECT tipa)
SQL upita dozvoljava i složenije stvari poput mijenjanja programskog toka (IF
naredba) i slično. Transact SQL nastao je kao plod suradnje
između Microsofta i Sybasea. SQL server je baza podataka koja se smjestila na prag
između manjih i srednjih baza.

Povijest

Prva verzija SQL Servera koji ima veze sa Microsoftom (ranije je Sybase proizvodio
SQL server pod imenom „Sybase SQL server“) izašla je na svjetlo dana 1989. godine
pod imenom „SQL Server for OS/2 1.0“. Ta verzija bila je identična Sybase-ovom
SQL serveru 3.0 koji je radio pod Unix sistemom. Microsoft SQL Server pod tim
imenom se počeo prodavati 1992. godine, a puno ime mu je glasilo Microsoft SQL
Server 4.2 koji se još uvijek vrtio na OS/2 platformi. Prvi SQL Server za Windows
NT izašao je isto kada i sami Windows-i. U tom trenutku Sybase i Microsoft su se
razišli, te je Sybase počeo razvijati svoju bazu podataka pod imenom Adaptive
Server Enterprise da bi se izbjeglo zbunjivanje korisnika oko imena. Do 1994.
Microsoft je svejedno morao na sada svojem sustavu nositi Sybaseovu oznaku zbog
autorskih prava.
Od trenutka raskida sa Sybaseom, Microsoft je napravio značajne pomake u razvoju
svoje baze podataka. SQL Server je prva baza podataka na svijetu koja je
posjedovala korisničko sučelje. Sve baze su u tadašnje vrijeme radili pomoću
„command-line“ sistema koji zna biti izrazito nezgodan i nezgrapan. Također, SQL
Server je prva komercijalna baza podataka koja je podržala Intelovu 64-bitnu
arhitekturu procesora. Aktualna je verzija SQL Server 2008 iz 2008. godine.
Od SQL Servera 2000 do SQL Servera 2005 napravljeni su golemi pomaci u
poboljšanju same baze podataka. Najbitniji od njih su: Klijentski dio IDE alata, SQL
Server Integration Services, Reporting Server, OLAP server, podrška za data mining,
Notification Services itd.
Kreiranje baze podataka

Uvod
Baze podataka u različitim oblicima i formatima postoje od same pojave računara. Potreba
za čuvanjem i pretraživanjem podataka postoji od uvijek, a tek od skoro, sa omasovljenjem
računara, postaje dostupna svima. Načini elektronskog čuvanja podataka su od početka do
danas doživjeli više evulucionih i revolucionih promena. Počev od jednostavnih datoteka u
tekst formatu, preko mainframe baza podataka, prvih desktop baza sve do današnjih moćnih
database servera koji osim osnovne namene donose mnoge dodatne mogućnosti.

Na našem tržištu u početku su bile veoma popularne Clipper aplikacije iza kojih je stajao
Dbase (popularni dbf) format baze podataka u različitim verzijama. Veliku popularnost zbog
jednostavnosti upotrebe i pouzdanosti je postigao i Microsoft Access, koji nije samo baza
podataka već je u njemu moguće pisati i Windows aplikacije. Međutim, kada govorimo o
velikim sistemima koji treba da čuvaju i manipulišu velikim brojem podataka i istovremenih
korisnika, referišemo se na servere baza podataka (eng. Database servers) koji mogu da
zadovolje ovakve potrebe u smislu perfomansi, bezbednosti, mogućnosti i administracije.

Teško je naći aplikaciju koja ne koristi nekakvu bazu podataka za svoj rad. Ovde je bitno
napomenuti da se pod terminom podaci ne smatraju samo numerčke i tekstualne informacije.
Potrebe su porasle, tako da sada u bazu možete smjestiti i druge informacije kao što su
slike, audio i video informacije, geografske podatke, dokumente i generalno bilo koji vid
informacije koji se pojavljuje u svakodnevnom radu.

Microsoft već odavno nudi server baze podataka pod nazivom SQL Server. Trenutna verzija
nosi komercijalni naziv Microsoft SQL Server 2008, interno u pitanju je verzija 10. SQL
Server je već odavno zreo proizvod, dokazan u praksi i u ovom serijalu se upravo
posvećujemo njemu.

Preduslovi za instalaciju
Imajući u vidu da je SQL Server kompleksni serverski proizvod, potrebno je znati postupak
instalacije i preduslove kako bi opšte mogli da izvršimo instalaciju. Ako instalaciju vršite na
Windows XP operativnom sistemu, neophodno je zadovoljiti sljedeće uslove:

Windows XP mora imati instalirani Service Pack 2 ili 3

Neophodno je instalirati .NET Framework 3.5 sa Service Packom 1

Windows Installer 4.5

Windows Power Shell 1.0 za Windows XP

Redosled instalacije treba da bude isti kao u gornjoj listi.

Ako SQL Server instalirate na operativnom sistemu Windows Vista potrebno je samo
instalirati .NET Framework 3.5 sa SP1.
Instalacija
Kada ste zavisno od operativnog sistema, uradili sve neophodne korake pre instalacije
možete pokrenuti instalaciju SQL Servera. Postupak je gotovo identičan, bez obzira da li ste
preuzeli SQL Server 2008 Express with Tools ili SQL Server 2008 Express with Advanced
Services verziju.

Pokrenite izvršnu instalacionu datoteku koju ste preuzeli i sačekajte da se "raspakuje" jer je u
pitanju arhiva koja sadrži sve datoteke potrebne za instalaciju. U narednom tekstu biće
prikazani samo dijelovi instalacije gde je potrebno unijeti ili izabrati neku vrednost. Na svim
ostalim ekranima prilikom instalacije prihvatite ponuđene opcije i kliknite na dugme "Next" ili
"OK".

Po pokretanju instalacione procedure na prvom ekranu se nudi puno informacija vezanih za


samu instalaciju, ali i za provjeru sistema, dokumentacijom i on-line resursima. Ovde kliknite
na link "Installation" u gornjem levom delu ekrana:

Nakon ovoga se otvara novi dijalog, gdje treba kliknuti na prvu opciju koja instalira novi SQL
Server:
Instalaciona procedura sada vrši prvi set provera sistema i neophodnih uslova za
postavljanje SQL Servera. Ako je sve u redu treba da vidite sljedeće:

Na ekranu "Feature Selection" je potrebno izabrati koje opcije želite da instalirate. U narednoj
slici je prikazan ovaj ekran za SQL Server with Advanced Servises verziju. Potvrdite opcije
kao na sljedećoj slici:

Želimo da instaliramo server baze podataka, alat za menadžment i neophodne drajvere


preko kojih aplikacije mogu da se povežu sa SQL Serverom.

Na ekranu "Instance Configuration" potrebno je da navedemo pod kojim nazivom će se


instalirati osnovni servis za baze podataka. Naime, na isti računar je moguće instalirati više
SQL Servera i tada svaki od njih mora imati jedinstveno ime. Kada instalirati prvi (prvu
instancu) SQL Server dobro je izabrati opciju "Default Instance" kao što naznačeno na slici:
Na ekranu "Server Configuration" potrebno je izabrati pod kojim nalogom će se pokretati
servisi SQL Servera. U pitanju su dva servisa: SQL Server Database Engine i SQL Server
Browser. Iz padajuće liste izaberite opcije kao na sledećoj slici:

Na kraju, treba definisati koji korisnički račun (ili više njih) predstavljaju administratora SQL
Servera. Administrator ima sva prava nad svim bazama i podacima i u praksi treba biti pažljiv
prilikom izbora. Dobra odluka je da administrator operativnog sistema ima i administratorska
prava nad SQL Serverom. U ovom dijalogu kliknite na dugme "Add..." u i narednom dijalogu
upišite "Administrator". Ako ste već ulogovani kao administrator operativnog sistema,
dovoljno je samo da kliknete na dugme "Add Current User":

Ovim smo objasnili sve bitne ekrane prilikom instalacije.


U narednom nastavku ćemo korišćenjem alata za menadžment SQL Servera naučiti kako
radi sam alat i kako se kreiraju baze podataka na SQL Serveru.

Baze podataka

Na jednoj instalaciji SQL Servera može da se napravi više baza podataka. Teoretski
maksimum je daleko veći od onoga što će bilo kome ikad zatrebati ili što jedan računar može
podneti, tako da to nije problem. Jedna baza podataka je zapravo logično grupisan skup
informacija i predstavlja jednu poslovnu celinu. Na primer, ako na istom SQL Serveru želite
da imate podatke o đacima škole, finansijske informacije i evidenciju inventara, to će se
verovatno držati u tri različite baze podataka. Naravno, uvek sve možete staviti u jednu
jedinu bazu, ali to će kasnije bespotrebno zakomplikovati administraciju.
U svakom slučaju, treba znati da je obezbjeđena jednostavna komunikacije između više
baza podataka, tako da po potrebi možete lako napisati upit koji kombinuje podatke iz
različitih baza.

Sada kliknite na plus levo od "Databases", a potom na plus levo od "System Databases"
kao što je prikazano na sledećoj slici:
U Object Exploreru su svi objekti baze prikazani hijerarhijski. Postoje dve grupe baza
podataka:
 Sistemske baze podataka
 Korisničke baze podataka

Mi trenutno nemamo ni jednu korisničku bazu podataka (uskoro ćemo ih praviti), dok svaki
SQL Server ima set od četiri sistemske baze koje se vide u folderu "System Databases". Kao
što se može videti, sistemske baze su:

Master – glavna sistemska baza SQL Servera u kojoj se čuvaju informacije o konfiguraciji,
korisnicima, svim bazama koje postoje i još mnogo toga.
Model – predstavlja šablon na osnovu koga se kreiraju sve korisničke baze podataka. Svi
atributi model baze se prenose na novo kreiranu bazu, osim ako drugačije nije rečeno. Na
primer, ako želite da u svakoj novoj bazi imate tabelu sa istim podacima, najjednostavnije je
prvo napraviti tu tabelu u model bazi.
Msdb – ovu bazu SQL Server koristi za neke svoje servise i automatizovane poslove.
Tempdb – jasno po imenu, baza podataka koja služi za privremeni smeštaj podataka
prilikom obrade. Na primer, kada se zada složeniji upit, SQL Server će ga automatski razložiti
na jednostavnije činioce i međurezultate smestiti u ovu bazu. Po završetku upita,
međurezultati se automatski brišu

Važno je naglasiti da ne treba ni na koji način menjati strukturu i podatke sistemskih baza
(izuzetak od ovoga je Model baza), jer na taj način možete narušiti ili čak potpuno
onemogućiti normalan rad SQL Servera. Ove sistmeske baze se automatski menjaju zavisno
od upotrebe SQL Servera.
Inicijalno, SQL Server drži ove baze zaključane i ne dozvoljava njihove izmene ili brisanje
čak ni administratoru SQL Servera. Ovo se može izmeniti u konfiguraciji, ali svakako nije
preporuka tako nešto uraditi.

Kreiranje baze podataka

Kreiranje baze podataka je na početnom nivou veoma jednostavno i dovoljno za skoro sve
primjene. Jednu bazu podataka sačinjavaju dve fizičke datoteke. U jednoj se čuvaju svi
podaci i informacije o svim objektima u toj bazi – metapodaci. Ova datoteka najčešće ima
isto ime kao i baza podataka, a ekstenzija je mdf. Druga datoteka služi za čuvanje dnevnika
rada (log datoteka) ka toj bazi i pomoću nje je implementiran transakcioni sistem o kome će
biti riječi kasnije. Ova datoteka ima ekstnziju ldf.
U literaturi se često nazivaju data i log datoteka, respektivno.

Ove dve datoteke predstavljaju minimum za svaku bazu, međutim jedna baza može da se
sastoji od nekoliko data i log datoteka. Osnovna ideja iza ovoga je mogućnost proširenja
baze na više diskova u računaru. Na primer, napravili ste jednu bazi sa jednim data i jednim
log fajlom. Vremenom baza podataka je "narasla" i preti da zauzme sav raspoloživ prostor na
disku. Tada se na računar instalira još jedan disk, i bazi dodaju po jedna data i jedan log
datoteka koji se fizički nalaze na novom disku.

Očigledno nema opravdanja da se dve data ili log datoteke iste baze nalaze na istom
fizičkom disku. Tehnički, to je izvodljivo ali potpuno nepotrebno, a kasnije otežava
administraciju baze. Ovo je česta početnička greška.

Prilikom kreiranja baze podatka, osnovni parametar je njeno ime. Na jednom SQL Serveru
svaka baza mora da ima jedinstveno ime. Pravila za zadavanje imena objekata (što uključuje
i ime baze) su slična pravilima za davanje imena varijablama u programiranju. Maksimalna
dužina imena je 128 karaktera. Ime može sadržati i brojeve, ali ne sme početi sa brojem. Na
primer, ime MojaBaza1 je ispravno, a ime 1MojaBaza nije ispravno.

U nazivu možete koristiti i razmake, ali opet, to će vam iskomplikovati rad kasnije. Bolje je
koristitu Upper Case notaciju – MojaPrvaBazaPodataka – potpuno čitljivo i bez korišćenja
razmaka.

U imenu ne smete koristiti specijalne znakove kao što su !"#$%&/()=?* i slični.


Često pitanje je da li se za imena objekata može koristiti ћирилица. Naravno da može, kao i
bilo koje drugo pismo jer SQL Server odavno podržava unicode standard.

Sada uradite desni klik na folder "Databases" i u popup meniju kliknite na "New
Database...".
Otvara se dijalog za kreiranje baze podataka. Novu bazu ćemo nazvati "MojaBaza" kao što
je prikazano na sledećoj slici:
U polju "Database name" je upisano ime baze, a u listi ispod su prikazani atributi data i log
datoteka od kojih se baza sastoji. Inicijalne opcije su potpuno odgovarajuće za većinu
primena, a to su:

Logical Name: logičko ime data i log datoteka kako ih vidi SQL Server. Očigledno, ova
logička imena su bazirana na imenu baze koje ste uneli.
File Type: opisuje tip datoteke, "Rows Data" za data datoteku, odnosno "Log" za log
datoteku.
Filegroup: napredna opcija koju nećemo obrađivati.
Initial size (MB): inicijalna veličina datoteke u megabajtima. Prilikom kreiranja baze, uvek se
zadaju početne veličine data i log datoteka. Procena se vrši na osnovu veličine seta
podataka koji se očekuje u nekom narednom periodu. Ovo nije kritična odluke zbog sledećeg
parametra:
Autogrowth: definiše da li će i na koji način automatski "rasti" datoteka kada je podaci
popune. Za data datoteku inicijano je postavljeno da raste automatski, svaki put za jedan
megabajt, a za log po 10% od trenutne veličine. Inače, teoretski maksimum veličine jedne
baze na Express ediciji SQL Servera je 4GB. Na višim verzijama, teoretski maksimum je
preko pola miliona terabajta. Specifikaciju maksimuma SQL Servera možete videti na
http://msdn.microsoft.com/en-us/library/ms143432.aspx
Sada skrolujte tabelu na desno kako bi videli atribute "Path" i "File Name" koji očigledno
pokazuju fizički lokaciju gde će datoteke baze biti kreirane. Ovu lokaciju možete promeniti, ali
ona mora da pokazuje na lokalne diskove računara gde je instaliran SQL Server. Ne mogu
se koristiti mrežni diskovi, niti usb memorije ili usb diskovi.

Pri vrhu dijaloga polje "Owner" definiše korisnika koji je vlasnik baze – što znači da ima sva
prava nad njom. Ostavite "<default>" čime je vlasnik baze onaj korisnik ko je i kreira. U
našem slučaju administrator Windows – setite se da smo se tako i ulogovali na SQL Server.
Kliknite na dugme "OK" i posle nekoliko trenutaka baza je kreirana i prikazana u Object
Exploreru, u okviru foldera "Databases". Napravili smo svoju prvu bazu.

Za napredne korisnike:
Studio je SQL Serveru prosledio skript koji kreira bazu podataka. Po SQL standardu postoji
set naredbi CREATE ... kojima se kreiraju različiti objekt. Najjednostavniji oblik CREATE
naredbe za bazu podatka je:

CREATE DATABASE ImeBaze


u našem slučaju:
CREATE DATABASE MojaBaza.

U pretodnom nastavku smo napravili svoju prvu bazu podataka na Microsoft SQL Serveru.
Sada je vreme da se upoznamo sa osnovnim objektima koji se nalaze u svakoj bazi.
Naučićemo njihovu funkciju i kakve su preporuke za njihovo korišćenje.
Imajući u vidu da ovaj serijal namenjen početnicima, proučićemo samo osnovne objekte.

Objekti baze podataka

Prije svega treba razrešiti moguću pogrešnu interpretaciju. Kada se kaže "objekti SQL
servera", ne misli se na objekte u smislu objektnog programiranja, već jednostavno na
određene kategorije funkcionalnosti koje pruža SQL Server. Naravno, SQL Server podržava i
pravo objektno orijentisano programiranje, ali to su napredne tehnike koje prevazilaze
ambicije ovog serijala.
Pokrenite Microsoft SQL Server Management Studio i povežite se na lokalni server kao što
smo naučili u predhodnom nastavku.

Potom, sa lijeve strane kliknite na plus ikonu pored naše baze podataka koju smo nazvali
MojaBaza kao što je prikazano na slici:

Hijerarhijski je prikazana baza podataka i ispod nje svi pripadajući objekti. Na slici je takođe
otvoren i čvor "Programmibility" sa svojim pod objektima.

Tabela

Možemo slobodno reći da je tabela (eng. Table) osnovni objekat SQL Servera, kao i svake
druge baze podataka. Tabela je nosilac informacija i nju kreira korisnik u skladu sa svojim
potrebama. Predstavlja jednu logičku celinu – entitet u kome se čuvaju podaci. Postoji
jednostavan način na osnovu koga se može odrediti koje tabele ćete imati u bazi i šta će se
u njima nalaziti. Pažljivo slušajte zahteve korisnika (ili vlastite ako pravite bazu za sebe) i
obratite pažnju na imenice. Ako zahtev izgleda na primjer ovako: "Želim da imam informacije
o odeljenjima, učenicima, profesorima i predmetima", prilično je jasno da ćemo u bazi imati
tabele "Odeljenja", "Učenici", "Profesori" i "Predmeti". Obično ih bude još jer treba nekako
međusobno povezati odeljenja, učenike i predmete ali o tome kasnije.

Fizički tabela predstavlja matricu sa redovima i kolonama u kojoj se nalaze (ili će se nalaziti)
podaci. Obavezno je poređenje sa radnim listom u aplikaciji Excel, samo što tabela u bazi
ima mnogo striktnija pravila.

Kada krećete sa pravljenjem tabele koja će predstavljati neki entitet, počnite od karakteristika
(atributa) tog entiteta koje želite da imate u toj tabeli.
Na primer ako želite da napravite tabelu u kojoj će se nalaziti podaci o učenicima škole,
jasno je da treba imati sledeće atribute:

 Jedinstveni broj učenika


 Ime
 Prezime
 Ime oca
 Adresa
 Grad
 Telefon
 Datum upisa
 Godina rodjenja
 Prosek uspeha u osnovnoj školi
 i tako dalje, zavisno od potreba...

Sve ovo su atributi tabele "Učenici".


Obratite pažnju na prvi atribut "Jedinstveni broj učenika". U uređenom sistemu svaki entitet
(učenici, profesori, odeljenja...) mora da ima nekakav jedinstveni identifikator koji opisuje
jedan podatak. Očigledan primer je JMBG (Jedinstveni Matični Broj Građana) na osnovu
koga se tačno znaju svi vaši ostali podaci. Ili broj indeksa kao što je 123/2009 koji može imati
samo jedan student fakulteta.
U rečniku rada sa bazama podataka ovo se zove "Primarni ključ tabele" (eng. Primary Key).
On nam omogućava da u pomenutoj tabeli učenika uvek sa sigurnošću izdvojimo
(pronađemo ili ažuriramo) tačno određenog učenika i za njega dalje povežemo druge
informacije – ocene, izostanke, odeljenje u kome se nalazi i tome slično.

Bez ovakovog primarnog ključa bilo kakva manipulacija podacima bi bila, otežana, sklona
greškama ili nemoguća.
Tehnički gledano, tabela ne mora da ima primarni ključ, odnosno ovakvo jedinstveno polje,
ali to apsolutno ne treba raditi. Svaka tabela koju pravite, treba da ima i primarni ključ.
Primer tabele koja sadrži podatke o kupcima (eng: Customers) je prikazan na sledećoj slici:
U zaglavlju tabele se nalaze nazivi atributa tabele: CustomerID, CompanyName,
ContactName, ContactTiltle, Address i City.
Svaki red tabele (eng: row) predstavlja informacije o jednom kupcu. Kod nas se ovakav red
zove i "slog" ili "zapis".
Atribut CustomerID u ovom primeru predstavlja primarni ključ tabele. Ovo znači da svaki
kupac ima jedinstvenu vrednost tog atributa. Ovo takođe znači da bi SQL Server odbio da
unese novog kupca koji nema jedinstvenu vrednost atributa CustomerID.

Ovo je jako važno razumeti – praktično baza podataka se sama brine i sebi na osnovu
pravila koje smo definisali. Važno pravilo je primarni ključ, ali ima ih još dosta i mogu se
implementirati na razne načine.

Osnovno pravilo koje definišemo prilikom kreiranja tabele je tip atributa. Podatak koji želite
da čuvate u atributu definiše i njegov tip. Ponoviću primer atributa jednog učenika, ali sada i
sa njegovim tipom:

 Jedinstveni broj učenika (tekst od 8 karaktera: na primer "001/2009")


 Ime (tekst do 15 karaktera)
 Prezime (tekst do 20 karaktera)
 Ime oca (tekst do 15 karaktera)
 Adresa (tekst do 50 karaktera)
 Grad (tekst do 20 karaktera)
 Telefon (tekst do 15 karaktera)
 Datum upisa (datum)
 Godina rodjenja (broj – celobrojni bez decimala)
 Prosek uspeha u osnovnoj školi (broj – sa decimalnim delom)
 I tako dalje, zavisno od potreba...
Iz ove liste je jasno da postoje tekstualni, datumski, celobrojni i realni (broj sa decimalnim
zarezom) tipovi atributa. Zapravo ima ih još mnogo više, ali ovo su osnovni. Ako smo za
atribut "Datum upisa" izabrali datumski tip, za vrednost ovog atributa je moguće isključivo
upisati validni datum. Bilo šta drugo će za posledicu imati prijavu greške i odbijanje unosa ili
izmene sloga.
U sledećem nastavku kada budemo kreirali tabele ćemo detaljnije naučiti tipove atributa koje
nudi SQL Server. Za sada samo je bitno znati da je potrebno izabrati odgovarajući tip za
svaki atribut tabele.

Pogled (eng: View)


Pogled nudi zgodnu pomoć prilikom pregleda podataka iz jedne ili više tabela. U praksi upiti
kojima se dobijaju podaci iz tabela mogu da se prilično zakomplikuju. Uvek je potrebno
prikazati deo atributa iz tabele, koji su sortirani na odgovarajući način i za zadati kriterijum.
Zbog ovoga SELECT upit može da postane prilično glomazan i komplikovan kada iz
aplikacije treba da ga pošaljete bazi podataka.
Pogled omogućava određeni nivo apstrakcije ovakve složenosti. Umesto da stalno baratate
glomaznim SELECT upitima, dovoljno je napraviti pogled u kome se zapravo nalazi ovaj
SELECT upit i potom ovom pogledu dati jedinstveno ime.
Nakon ovoga, pogled tretirate kao virtuelnu tabelu čime značajno sebi pojednostavljujete rad.
Sledi jednostavan primer u kome je treba obratiti pažnju na kvantitet, a ne na sadržinu osim
ako niste dobri poznavaoci SQL jezika.

Složeni SELECT upit:


SELECT Orders.ShipName, Orders.ShipAddress, Orders.ShipCity, Orders.ShipRegion,
Orders.ShipPostalCode, Orders.ShipCountry, Orders.CustomerID, Customers.CompanyName AS
CustomerName, Customers.Address, Customers.City, Customers.Region, Customers.PostalCode,
Customers.Country, (FirstName + ' ' + LastName) AS Salesperson, Orders.OrderID,
Orders.OrderDate, Orders.RequiredDate, Orders.ShippedDate, Shippers.CompanyName As
ShipperName, "Order Details".ProductID, Products.ProductName, "Order Details".UnitPrice,
"Order Details".Quantity, "Order Details".Discount, (CONVERT(money,("Order
Details".UnitPrice*Quantity*(1-discount)/100)) *100) AS ExtendedPrice, Orders.Freight FROM
Shippers INNER JOIN (Products INNER JOIN ((Employees INNER JOIN (Customers INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID) ON Employees.EmployeeID = Orders.EmployeeID)
INNER JOIN "Order Details" ON Orders.OrderID = "Order Details".OrderID) ON
Products.ProductID = "Order Details".ProductID) ON Shippers.ShipperID = Orders.ShipVia

Ovaj upit prikazuje podatke iz nekoliko tabela i u praksi nije bitno veliki – ima i manjih i većih
od njega.
Sada zamislite ako nešto ovako stalno provlačite kroz aplikaciju ili još gore, zahtevaju se
neke izmene na već gotovoj aplikaciji.
Umesto toga, napravićemo pogled na osnovu ovog upita i na primer nazvaćemo ga
"Fakture".

Sada iz aplikacije šaljete ovakav upit:

SELECT * FROM Fakture

Prilično jednostavnije, a ako kasnije treba nešto menjati, dovoljno je promeniti ovaj pogled,
aplikacije ne treba dirati.
Ovde je važno napomenuti da pogled NE sadrži podatke. On sadrži samo definiciju na koji
način treba prikazati podatke iz tabela.

Uskladištene procedure (eng: Stored Procedure)

Uskladištene procedure predstavljaju programibilni deo SQL servera. Predstavljaju oblast za


sebe i u ovom serijalu ih nećemo obrađivati. Programski jezik SQL Servera se zove TSQL i
predstavlja mešavinu programskih jezika PASCAL, C i BASIC. Posebno je prilagođen radu
sa bazama podataka, ali takođe poseduje standarde programske strukture grananja, petlji,
varijable i tako dalje.
U rukama iskusnog programera baza podataka predstavlja izuzetno oruđe.
Za učenje TSQL programskog jezika preporučujem knjigu u izdanju Microsoft Press
"Microsoft® SQL Server® 2008 T-SQL Fundamentals".
Informacije na http://www.microsoft.com/learning/en/us/Books/12806.aspx .

Dalje ćemo proučiti osnove za kreiranje tabele u SQL Server bazi podataka.
Kao što je ranije rečeno, tabela je ključni objekat svake baze podataka jer je nosilac
informacija i osnovni „čuvar“ integriteta podataka. Baza podataka predstavlja strogo uređen
sistem koji funkcioniše po pravilima koja oslikavaju poslovne potrebe.
Osnovno pravilo kada se radi sa podacima je tip podatka. Neophodno je, zavisno od
konkretne potrebe, odabrati odgovarajući tip podataka za svaku kolonu tabele u bazi.

Zbog ovoga ćemo ukratko proći sve raspoložive tipove podataka na SQL Serveru, kako bi na
jednom mestu imali sve potrebne informacije za ispravno postavljanje tipova kolona u tabeli.
Tipove podataka možemo podeliti u nekoliko kategorija zavisno od potrebe.

Tipovi podataka u SQL Server tabeli

Prikazani su naziv tipa, opseg i zauzeće prostora na disku.

Naziv Opseg Zauzeće prostora na disku

Celobrojni numerički tipovi:


Tinyint 0 do 255 1 bajt
Smallint -32,768 do 32,767 2 bajta
Int - 2,147,483,648 do 2,147,483,647 4 bajta
Bigint -263 do 263-1 8 bajtova

Brojevi sa pokretnim zarezom:


Money -922,337,203,685,477.5808 do 8 bajtova
922,337,203,685,477.5807
smallmoney - 214,748.3648 do 214,748.3647 4 bajta
Decimal Opseg zavisi od definisanih broja decimala. Maksimalno 17 bajtova
Sa maksimalnom preciznošću od 38 opseg
je
-1038 do 1038
Real -3.438 do 3.438 4 bajta
Float -1,79308 do 1.79308 8 bajtova
Datum i vreme:
Date 1.jan 0001 do 31.dec 9999 3 bajta
Datetime 1.jan 1753 do 31.dec 9999 8 bajtova
preciznost vremena je 0.003 sekunde
smalldatetime 1.jan 1900 do 6.jun 2079 4 bajta
preciznost vremena je 0.3 sekunde
datetime2 1.jan 0001 do 31.dec 9999 8 bajtova
preciznost vremena je 100 nanonsekundi
Time preciznost vremena je 100 nanonsekundi 5 bajtova

Tekstualni tipovi (ASCII – jedan bajt po karakteru):


Char 1 do 8000 karaktera (fiksne dužine) 1 do 8000 bajtova
Varchar 1 do 8000 karaktera (varijabilne dužine) 1 do 8000 bajtova
Text 1 do 2,147,483,647 (varijabilne dužine) 1 do 2,147,483,647 bajtova

Tekstualni tipovi (Unicode – dva bajta po karakteru):


Nchar 1 do 4000 karaktera (fiksne dužine) 2 do 8000 bajtova
Nvarchar 1 do 4000 karaktera (varijabilne dužine) 2 do 8000 bajtova
Ntext 1 do 1,073,741,823 (varijabilne dužine) 2 do 2,147,483,647 bajtova

Binarni tipovi – bilo koji binarni sadržaj uključujući sliku, zvuk ...
Binary 1 do 8000 (fiksne dužine) 1 do 8000 bajtova
Varninary 1 do 8000 (varijabilne dužine) 1 do 8000 bajtova
Image 0 do 231-1 (varijabilne dužine) 0 do 231-1 bajtova

Specijalni tip:
uniqueidentifier globalni jedinstveni identifikator koji služi za 16 bajtova
čuvanje rezultata funkcije NEWID()

Detaljnije o tipovima podataka

Osim pobrojanih tipova postoje još nekoliko specijalizovanih koji se ne mogu koristiti kao tip
podataka u tabeli, već služe kao tipovi varijabli prilikom pisanja TSQL skripti.
Sve u svemu, očigledno je da su podržani svi mogući tipovi podataka koje možete upisati u
tabelu, a u narednom tekstu ćemo dodatno objasniti pojedine tipove i grupe.

Celobrojni numerički tipovi mogu predstavljati samo cele brojeve u zadatom opsegu.
Zauzimaju malo prostora i često se koriste kao primarni ključevi tabele, kada se postavi da
se automatski povećavaju – IDENTITY atribut. Ovo znači da će (inicijalno) brojač početi od 1
i povećavati se automatski za 1 svaki put kada se doda nov slog u tabelu. Kada postavljate
IDENTITY atribut možete naglasiti od kog broja počinje i koji je korak povećavanja (ili
smanjivanja ako stavite negativnu vrednost).

Brojeve sa pokretnim zarezom možemo podeliti na tačne i aproksimativne tipove.


Tačni tipovi su money, smallmoney i decimal.
Money i smallmoney tip se interno čuvaju kao celobrojne vrednosti, ali četiri poslednje cifre
se interpretiraju kao decimale.
Malo binarne matematike: money tip zauzima 8 bajtova odnosno 8x8=64 bita. Pošto money
tip može biti i negativan, prvi bit služi za predznak tako da imamo na raspolaganju 63 bita.
Svaki bit može imati dva stanja, 0 i 1, tako da ukupan broj kombinacija iznosi 263-1 za
pozitivni opseg. Zašto oduzimamo 1 - zato što se 0 smatra pozitivnom vrednošću.
Dakle 263-1 = 9223372036854775808
Rekli smo da se poslednje 4 cifre (bankarski standard u svetu) tretiraju kao decimale, tako da
na kraju dolazimo do gornjeg opsega od 922,337,203,685,477.5808

Slično je kod tipa smallmoney, samo što se radi sa 4 bajta, te je i opseg manji.

Decimal tip je specifičan jer je moguće odrediti preciznost i skalu, odnosno koliko cifara
ukupno ima (preciznost) i koliko od njih se koristi sa desne strane decimalne tačke (skala).
Dozvoljene vrednosti za preciznost su od 1 do 38. Dozvoljene vrednosti za skalu su od 0 do
38. Ovo znači da od decimal tipa možete da napravite celobrojni (preciznost=38, skala=0) ali
i broj sa velikim brojem decimala (preciznost= 38, skala=38) i naravno sve između ove dve
krajnosti.
Očigledno, money i smallmoney tipovi su namenjeni finansijskim podacima, a decimal se
najčešće koristi za različite naučne i inženjerske proračune koji zahtevaju veliku preciznost.

Aproksimativni tipovi sa pokretnim zarezom su real i float. Aproksimacija se vrši na određeni


broj decimala jer se broj interno čuva u formatu mantisa + eksponent. Uvde budite pažljivi jer
ako se za ovaj tip unese veliki broj, on će ga zaokružiti na manji broj decimala a ostatak
prikazati kao eksponent broja deset, npr: 1.2345 x 1012. Zbog ovog zaokruživanja ovi tipovi
nisu pogodni za finansijske proračune jer će se pre ili kasnije pojaviti značajna kumulativna
greška, ali su podesni za primene gde se ovakve greške mogu tolerisati.

Datum i vreme su se ranije zajedno čuvale u tipu datetime i potom prikazivali po potrebi i
zadatom formatu. SQL Server ima veliki broj funkcija za rad sa datumom i vremenom, tako
da se može uraditi sve što je bilo potrebno. SQL Server 2008 uvodi neke nove tipove gde se
može čuvati odvojeno samo datum ili samo vreme – date i time tipovi. Koji tip ćete izabrati u
praksi zavisi naravno od potrebnog opsega i preciznosti.

Tekstualni podaci
Tekstualne podatke takođe delimo u dve grupe:
ASCII i Unicode. Kao što je opšte poznato, ASCII standard (skraćeno od American Standard
Code for Information Interchange), koristi samo jedan bajt po karakteru, odnosno opseg od 0
do 255 što predstavlja maksimalni broj različitih karaktera koje može prikazati. Verovatno se
neki čitaoc seća takozvanog YUSCII seta karaktera kojim su se zamenjivali neki karakteri
našim slovima jer u postojećih 255 nije bilo mesta za naša latinična slova, ćirilicu da ne
pominjem.
Tipovi char, varchar i text su ASCII tipovi i u praksi ćemo ih retko koristiti.

Unicode standard (http://www.unicode.org) je uveden sa namerom da se kreira set karaktera


koji uključuje sve karaktere svih svetskih azbuka. Ovde jedan karakter zauzima dva bajta, a
pošto nema negativnog dela, ukupan broj karaktera je 216 = 65,536. Tipovi koji podržavaju
Unicode standard su nchar, nvarchar, ntext. Prefiks „n“ je od National.

Prefiks „var“ označava da je tip varijabilne dužine. Na primer ako deklarišemo tip nchar(10)
ovo znači da imamo Unicode string sa maksimalno 10 karaktera. Ako u njega upišemo „SQL“
ostatak do 10, odnosno još 7 karaktera će biti automatski dodato i to 7 znakova razmaka.
Zato se zovi stringovi fiksne dužine. Koliko god upisali teksta u njih oni će uvek biti
deklarisane dužine. Ovo zna da pravi prilične probleme u praktičnom radu, pogotovo prilikom
pretrage.
S druge strane, pošto su fiksne dužine, SQL Server je efikasniji u pretrazi ovih podataka.
Ako sada deklarišemo tip nvarchar(10) i u njega upišemo isto „SQL“ on će zaista samo to i
sadržati. Nema dopunjavanja do 10 karaktera, te se zato i zovu stringovi varijabilne dužine.
Očigledno, oni su efikasniji što se tiče iskorišćenja prostora, ali nešto sporiji prilikom
pretrage.

Ova razlika u perfomansama pretraživanja je jako mala i ne treba da bude činilac odluke u
praktičnom radu. U praksi se gotovo uvek koristi nvarchar tip koji može da prikaže i latinicu i
ćirlicu.

Text i ntext tipovi polja su odranije poznati i kao memo polja. Služe za čuvanje ASCII
odnosno Unicode teksta velike dužine do 2GB, odnosno 1GB u Unicode verziji. Uvek su
varijabilnog tipa.

Binarni tipovi
Ovi tipovi su donekle slični tekstualnim tipovima, samo što se u njima ne čuva tekst, već bilo
koji niz bajtova. Posebno koristan je tip image čije ime i asocira na upotrebu. Osim slika,
ovde možete na primer smestiti audio i video materijal, različite objekte i slično.

Specijalni tipovi
Postoji više specijalnih tipova podataka, a najčešće se koristi uniqueidentifier. On
funkcioniše zajedno sa SQL funkcijom NEWID (). Ova funkcija generiše ogroman jedinstveni
broj koje se može smjestiti u ovaj tip.

Probajte:
Otvorite Microsoft SQL Server Management Studio, otvorite novi prozor za upite (New Query
dugme) i ukucajte sledeće:

SELECT NEWID()

Potom pokrenite ovaj upit (F5 funkcijski taster).


Dobićete nešto poput ovoga: C01C300D-2837-4091-8C6C-AE4D61DC1F33
Veliki jedinstveni heksadecimalni broj koji zauzima čak 16 bajtova.

Često se koristi kao vrijednost primarnog ključa kada se podaci unose na više SQL Servera,
a potom svi skupljaju na jednom. Ako koristite uniqueidentifier tip i punite ga vrednošću koju
generiše NEWID() funkcija, nećete imati problema sa dupliranim primarnim ključevima
prilikom grupisanja podataka.

Posle ove malo duže, ali neophodne teorijske priče, u sledećem nastavku ćemo kreirati svoje
prve tabele.
U predhodnom nastavku smo naučili koji tipovi podataka postoje na Microsoft SQL Serveru.
Prilikom projektovanja tabela od velikog značaja je izabrati pravi tip podataka zavisno od
potrebe i namjene. Kada je u pitanju tekstualni tip podataka, potrebno je ispravno odabrati i
maksimalne dužine stringova, što nije uvek jednostavno. Na primer, ako želite da sačuvate
adresu (ulicu i broj) koliko maksimalno karaktera za to predvidjeti? Za bilo koji broj je obično
odmah jasno da li je u pitanju celobrojna vrednost ili broj sa decimalnim zarezom. Ali treba
voditi računa o opsegu i potrebnoj preciznosti. Metod „stavićemo više nego što treba pa neće
biti problema u budućnosti“ se u praksi često koristi, što uvek kao rezultat daje neefikasan
dizajn.
Pre projektovanja baze i tabela potrebno je izvršiti detaljnu analizu potreba na osnovu ranijih
podataka, izveštaja, iskustva korisnika itd. Tek tada možemo krenuti u tehničku realizaciju.
Nije strašno ako se ponekad dogodi da naknadno treba proširivati kolone, pogotovo u
implementacijama gde nemamo dovoljno informacija na koje se možemo osloniti.
Svako kreiranje, izmjena i brisanje objekata u SQL Serveru se može izvršiti ili pomoću
vizuelnih alata (SQL Server Management Studio) ili pomoću odgovarajućih TSQL naredbi.
Naravno, vizuelni alati na osnovu unetih podataka u pozadini formiraju TSQL naredbu i
izvršavaju je, tako da je tehnički gledano TSQL jedini način za rad sa SQL Serverom.
Vizuelni alati su tu samo kao pomoć, a svaki iskusni administrator će brže uraditi svoj posao
dirketnim izvršavanjem TSQL naredbi.
U drugom nastavku ovog serijala smo kreirali bazu podataka pomoću vizuelnog alata, a sada
ćemo za vežbu to uraditi pomoću TSQL naredbe.
Pokrenite SQL Server Management Studio, konektujte se na SQL Server kao što smo to i
ranije radili. Kliknite na dugme „New Query“ u toolbar-u na vrhu čime ste otvorili prozor za
ipisivanje i izvršavanje upita. Obratite pažnju na dugme „Execute“ kojim se pokreće
izvršavanje upita:

U otvorenom prozoru otkucajte sledeću TSQL naredbu


CREATE DATABASE Test
i kliknite na dugme Execute. Na dnu prozora u delu „Messages“ dobijate poruku
„Command(s) completed successfully.“ što znači da je TSQL naredba uspešno izvršena.
Jasno je šta ta naredba radi. CREATE DATABASE ImeNoveBaze kreira novu bazu
podataka sa podrazumevanim opcijama na SQL Serveru. Da bi je videli u Object Explorer
prozoru potrebno je uraditi desni klik na čvor „Databases“ i iz padajućeg menija izabrati
stavku „Refresh“. Sada se vidi i novo kreirana baza pod nazivom Test.
Kreiranje tabele
Kliknite na mali plus levo od baze podataka Test, uradite desni klik na čvor „Tables“ i iz
padajućeg menija izaberite „New table...“ kao što je prikazano na sledećoj slici:

Na ovaj način ste otvorili dizajner za kreiranje nove tabele.


Vežbe radi, želimo da kreiramo tabelu u kojoj ćemo čuvati informacije o automobilima.
Predpostavka je da svaki automobil ima sledeće atribute:
 Jedinstveni broj vozila
(kolona koja će predstavljati primarni ključ tabele)
 Proizvođač
(naziv proizvođača automobila)
 Model
(naziv modela automobila)
 Datum proizvodnje
(datum kada je automobil proizveden u formatu dd.mm.yyyy)
 Registrovan
(da ili ne)
 Pređena kilometraža
(broj pređenih kilometara od 0 za nov automobil do 999,999 za polovni)
 Zapremina motora
(zapremina motora u ccm, npr. 1200, 1400, 1600,...)
 Snaga motora
(snaga motora u KW, npr. 55.2, 110.8,...)
 Tip goriva
(benzin, dizel, plin, hibrid)
 Tip karoserije
(limuzina, karavan, sedan ili kombi)
 Cena
(cena vozila)
 Napomene
(opcione ostale napomene vezane za vozilo)

Na osnovu ovih atributa treba definisita strukturu tabele i ispravno izabrati tip i dužinu
tekstualnih polja.
Nazivi kolona mogu imati do 128 karaktera, ali to ne treba zloupotrebljavati jer će kasniji rad
biti komplikovaniji. Potrebno je izabrati imena koja su razumljiva i dovoljno kratka. Struktura
naše tabele bi mogla da izgleda ovako:
 JedBrojVozila - int, primarni ključ tabele, obavezno za unos
 Proizvodjac – nvarchar (20) , obavezno za unos
 Model – nvarchar (15) , obavezno za unos
 DatumProizvodnje - date, obavezno za unos
 Registrovan - bit, obavezno za unos
 PredjenaKilometraza - int, obavezno za unos
 ZapreminaMotora - smallint, obavezno za unos
 SnagaMotora – real
 TipGoriva – nvarchar (6) , obavezno za unos
 TipKaroserije – nvarchar (8) , obavezno za unos
 Cena – smallmoney, obavezno za unos
 Napomene - ntext
Na osnovu tipova i dužina očekivanih podataka smo formirali strukturu i definisali koji podaci
su obavezni za unos, a koji ne.
Sada u dizajneru treba uneti sve atribute i njihove tipove kao što je prikazano na slici:

Svaka tabela treba da ima primarni ključ, odnosno kolonu čija vrednost jedinstveno
identifikuje svaki slog tabele. Rekli smo da će kolona JedBrojVozila biti primarni ključ, pa ga
treba i napraviti nad njom.
Uradite desni klik na naziv kolone JedBrojVozila i iz padajućeg menija izaberite stavku „Set
primary key“. Kada ovo uradite, obratite pažnju na malu ikonu levo od kolone JedBrojVozila
koja označava da je ova kolona primarni ključ:
Ostaje još da snimimo ovu tabelu i pri tome joj damo naziv, u našem slučaju Automobili. U
toolbaru kliknite na ikonu diskete, čime se prikazuje dijalog za davanje imena tabeli. Unesite
Automobili i kliknite na dugme OK:

Ovim je tabela kreirana i može da se koristi za unos podataka.

U pozadini je SQL Serveru poslat upit za kreiranje tabele – CREATE TABLE ... sa
odgovarajućim parametrima:
CREATE TABLE Automobili
(
JedBrojVozila int NOT NULL,
Proizvodjac nvarchar(20) NOT NULL,
Model nvarchar(15) NOT NULL,
DatumProizvodnje date NOT NULL,
Registrovan bit NOT NULL,
PredjenaKilometraza int NOT NULL,
ZapreminaMotora smallint NOT NULL,
SnagaMotora real NULL,
TipGoriva nvarchar(6) NOT NULL,
TipKaroserije nvarchar(8) NOT NULL,
Cena smallmoney NOT NULL,
Napomene ntext NULL,
CONSTRAINT PK_Automobili PRIMARY KEY (JedBrojVozila)
)

Proučite ovaj upit i videćete da nije ni približno komplikovan koliko to na prvi pogled izgleda.

Za vežbu pokušajte da napravite tabelu koja će čuvati podatke učenika iz


vaše škole. Počnite sa analizom u vezi atributa i tipova podataka, a
potom tabelu napravite pomoću vizuelnog alata i na kraju pomoću
CREATE TABLE upita.

Uvod
Svima je poznat termin „relaciona baza podataka“ a u ovom, poslednjem nastavku ćemo se
pozabaviti upravo ovom tematikom.

Kada se kaže „relacija“ misli se na vezu između dve tabele u istoj bazi podataka. Najbolje je
objasniti na primeru učenika i njegovih ocena:
Potrebno je da vodimo informacije o svim učenicima i njihovim ocenama. Za ovo je očigledno
potrebno imati dve tabele: „Učenici“ i „Ocene“. U tabeli „Učenici“ ćemo imati sve potrebne
podatke o učeniku (lični podaci, odeljenje, godina itd), a u tabeli „Ocene“ sve potrebne
podatke o oceni (koji učenik, koja ocena, datum, profesor, predmet...).
Kada gledamo podatke u tabeli „Ocene“, neophodno je da znamo podatke o učeniku koji je
dobio tu ocenu. Pre koncepta relacionog modela ovo je značilo da uz svaki slog tabele
„Ocene“ imamo kompletne informacije o svakom učeniku. Ovo praktično znači da ako jedan
isti učenik ima N ocena, svi njegovi podaci će biti ponovljeni (klonirani) takođe N puta uz
svaku ocenu.
Očigledna je neefikasnost ovakvog koncepta. Bespotrebno se set istih podataka klonira na
puno mesta. U praksi stvari su još gore je svaki učenik ima i svoje izostanke, predmete koje
pohađa, sekcije i tako dalje.

Manje očigledan, a veliki problem se događa prilikom izmena podataka o učeniku. Ako na
primjer, učenik promeni adresu stanovanja, ovu izmenu moramo propagirati na mnogo tabela
i slogova – svuda gde se nalazi set podataka o ovom učeniku. Ovo će u praksi da potraje, a
za to vreme ima puno šansi da nešto podje naopako pa da na kraju negde ove izmene prođu
a negde ne.

Teorija

Na našem primjeru treba primjeniti takozvanu prvu normalnu formu (prvi nivo normalizacije),
koji eliminiše bespotrebno ponavljanje istih podataka. Da bi ovo mogli uraditi predhodno
moramo kreirati primarni ključ u tabeli „Učenici“. Kao što smo pričali ranije, primarni ključ je
kolona u tabeli koja ima jedinstvene vrednosti. Zavisno od potreba, ova kolona može biti
različitih tipova – numerička ili tekstualna. Ako za tabelu „Učenici“ usvojimo da kolona koja
sadrži broj knjižice u formatu broj učenika/godina upisa, vrednost može biti na primer
24/2009. Ovo znači da kada se referišemo na učenika sa ovakvom vrednošću primarnog
ključa, uvek imamo informacije o jednom i samo jednom učeniku u tabeli.
Osnovna ideja prve normalne forme je da se umesto svih podataka o nekom entitetu, čuva
samo vrijednost primarnog ključa.
U našem slučaju ovo znači da u tabeli „Ocjene“ imamo samo informaciju o vrednosti
primarnog ključa učenika koji se nalazi u tabeli „Učenici“. Ovo znači da gledajući tabelu
„Ocjene“ uvek možemo pogledati i podatke o učeniku jednostavnim zadavanjem filtera za
vrijednost primarnog ključa u tabeli „Učenici“.

Da bi ovo ilustrovali na primjeru, pogledajte dvije tabele sa test podacima na sledećoj slici:
U tabeli „Ucenici“ kolona „UcenikID“ predstavlja primarni ključ tabele čija vrjednost
identifikuje jedinstvenog učenika.
U tabeli „Ocene“ istoimena kolona „UcenikID“ predstavlja jedinstveni identifikator učenika koji
je dobio zadatu ocjenu. Samo ta vrjednost se ponavlja onoliko puta koliko učenik ima ocjena
– ne ponavljaju se svi atributi učenika. U tabeli „Ocene“ kolona „UcenikID“ se zove spoljni
ključ tabele (eng. Foreign key) jer se ova vrednost referiše na vrednost neke druge (spoljne)
tabele.

Na slici je uspostavljena relacija između ove dve tabele. Semantički napisano, uspostavljena
je 1:N relacija između Ucenici.UcenikID i Ocene.UcenikID. Pravilna notacija je
ImeTabele.ImeKolone.

1:N znaci da jedan učenik može da ima N ocena (ovo N uključuje i nijednu ocenu). Relacija
se standardno čita od strane tabele sa primarnim ključem ka tabeli sa spoljnim ključem i otud
1:N. Međutim možemo pročitati i u obrnutom smeru pa relacija postaje N:1, odnosno N
ocena može biti dodeljeno jednom učeniku.
Kolona „UcenikID“ u obe tabele ne mora isto da se zove (mada je preporučljivo radi lakšeg
snalaženja), ali ove dve kolone moraju biti istog tipa jer sadrže iste vrjednosti.

Implementacija relacije

Na kraju, u našoj test bazi ćemo kreirati gore obrađen primjer između učenika i njihovih
ocjena.
Pokrenite Microsoft SQL Server Management Studio i u ranije kreiranoj bazi „Test“ napravite
tabele „Ucenici“ i „Ocjene“ sa sledećim atributima (konsultujte predhodni nastavak serijala):

„Ucenici“
UcenikID char (8) NOT NULL PRIMARY KEY (format nnn/gggg)
Ime nvarchar(10) NOT NULL
Prezime nvarchar(15) NOT NULL
Ostale atribute dodajte po zahtevu...

„Ocjene“
OcjenaID int NOT NULL PRIMARY KEY
UcenikID char(8) NOT NULL
Ocjena tinyint NOT NULL
Datum datetime NOT NULL
Takođe ostale atribute dodati po zahtevu...

Na sledeća dva snimka ekrana su prikazane obe tabele u dizajneru:


Ucenici:

Ocjene:

Sada je potrebno ove dve tabele povezati relacijom 1:N, odnosno Ucenici.UcenikID :
Ocene.UcenikID.
Sa leve strane Management Studia u Object Exploreru otvorite čvor Database, potom bazu
podataka „Test“, uradite desni klik na stavku „Database Diagrams“ i na kraju izaberite stavku
„New Database Diagram“:
Posto se kreira prva relacija u bazi, na postavljeno pitanja o dodavanju objekata za podršku
relacijama odgovorite potvrdno sa „Yes“:

U narednom dijalogu treba izabrati tabele koje treba da učestvuju u relaciji. U našem slučaju
„Ucenici“ i „Ocjene“, zatim kliknite na dugme „Add“ i potom na dugme „Close“ kako bi zatvorili
dijalog za izbor tabela:

Otvoren je prozor za kreiranje relacija između tabela. U njemu se nalaze naše dve tabele
koje sada treba povezati. Pomoću „drag and drop“ načina treba prevući kolonu „UcenikID“ iz
tabele „Ucenici“ na istoimenu kolonu u tabeli „Ocjene“. Uradite ovo kako bi kreirali relaciju
prikazanu na sledećoj slici (na oba dijaloga koje ste dobili posle kreiranja relacije odgovorite
sa „OK“).

Linija koja povezuje kolone u relaciji sigurno neće biti kao na slici. Poziciju tabela i linija
relacije možete rasporediti kako vama odgovara. Zvezdice pored naziva tabela znače da ova
relacije još uvek nije snimljena u bazu. Da bi to uradili kliknite na ikonu diskete u gornjoj liniji
alata. Management Studio će pre snimanja pitati za naziv ovog Database dijagrama – upišite
na primer „Relacije“ (bez znakova navoda) i kliknite na dugme „OK“ i potom na „Yes“ da bi
potvrdili izmene u tabelama koje se odnose na kreiranje spoljnog ključa.
Primetićete da su sada nestale zvezde pored imena tabela, što znači da je relacija snimljena
u bazu.

Zaključak

Ovom vežbom smo postigli prvi nivo normalizacije između dve tabele – nema bespotrebno
ponovljenih podataka.
Osim ovoga, uradili smo još dve značajne stvari koje nisu vidljive na prvi pogled, a sa
kreiranjem relacije su automatski „ugrađene“ u bazu podataka.

Kada dodajemo nov slog u tabelu „Ocjene“ moramo koloni „UcenikID“ dodati vrednost tj.
učenika koji postoji u bazi „Ucenici“. U suprotnom, dodavanje (a i izmena) sloga neće biti
moguća. Na ovaj način baza podataka štiti logičko pravilo koje smo uspostavili relacijom –
svaka ocena mora da ima svog postojećeg učenika.

Ako učenik ima bar jednu ili više ocena, nije dozvoljeno da se on obriše iz tabele „Ucenici“. U
suprotnom, imali bi ocene pridodeljene učeniku koji ne postoji, što opet narušava pravilo
relacije i referencijalnog integriteta.

U savremenim bazama podataka osim ovakvih moguće je kreirati još mnogo drugih pravila
koja se proveravaju na nivou same baze podataka, a ne na nivou aplikacije koja komunicira
sa bazom.

Sa ovim nastavkom završavamo serijal o Microsoft SQL Express 2008 bazi podataka.
Dalje informacije možete pronađi na puno lokacija na Web-u, gde bih izdvojio sledeće:
Matična strana: http://www.microsoft.com/express/sql/default.aspx
Domaći web portal za programere i baze podataka: http://msforge.net/
Sajt za učenje generalnog programiranja uključujući i SQL Server:
http://msdn.microsoft.com/en-us/beginner/default.aspx
Pregled karakteristika i drugi resursi: http://www.devx.com/MicrosoftISV/Article/38728
SQL Express WebLog: http://blogs.msdn.com/sqlexpress/

Anda mungkin juga menyukai