42

Mala Skola Baza Podataka-SQL Server2008

Embed Size (px)

DESCRIPTION

Skola baze podataka

Citation preview

Page 1: Mala Skola Baza Podataka-SQL Server2008
Page 2: Mala Skola Baza Podataka-SQL Server2008

UvodBaze podataka u različitim oblicima i formatima postoje od same pojave računara. Potreba za čuvanjem i pretraživanjem podataka postoji od uvek, a tek od skoro, sa omasovljenjem računara, postaje dostupna svima. Načini elektronskog čuvanja podataka su od početka do danas doživeli 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 smestiti 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.

Postoji više tržišnih verzija SQL Servera koje su prilagođene različitim namenama i zahtevima korisnika. Naredna tabela nabraja i opisuje sve ove verzije:

SQL Server CompactZove se još SQL Server Mobile, jer je namenjena mobilnim uređajima (džepnim računarima i pametnim telefonima) na kojima se nalazi Windows Mobile operativni sistem. U pitanju je optimizovana i veoma moćna baza podataka koja se koristi u različitim scenarijima unosa i manipulacijom podacima na terenu, tamo gde je neefikasno nositi prenosne računare. Ovo je takođe besplatna verzija čiju instalaciju možete preuzeti na Microsoft web sajtu.

SQL Server 2008 Express Takođe besplatna baza podataka namenjena desktop ili prenosnim računarima. Ovde ne važi pravilo da besplatne stvari tačno toliko i vrede. Naime, u pitanju je izuzetno moćna baza podataka i više od toga, koja svojim perfomansama i mogućnostima prevazilazi druge baze podataka na tržištu. U sklopu je ostalih Microsoft Express proizvoda kao što su C#, Visual Basic i Web Development.

SQL Server 2008 DeveloperOvo je puna verzija SQL Servera koja je po licencnim pravima namenjena razvojnim kompanijama za kreiranje i testiranje softvera koji će se plasirati na tržište.

SQL Server 2008 WebVerzija namenjena korišćenju na Web-u bilo kao podrška za Web sajtove i različite servise i usluge na Web-u.

Page 3: Mala Skola Baza Podataka-SQL Server2008

SQL Server 2008 WorkgroupNamenjena manjim ili ograncima velikih kompanija sa mogućnostima sinhronizacije podataka i alatima za izveštavanje – poslovna inteligencija.

SQL Server 2008 StandardVerzija namenjena velikim kompanijama sa mogućnostima analize podataka, izveštavanjima i sposobna za skladištenje ogromne količine podataka.

SQL Server 2008 EnterpriseNajjača verzija SQL Servera namenjena velikim kompanijama, bankarskim i državnim sistemima. Podržava rad na višeprocesorskim serverima, može se instalirati na više servera i obezbediti paralelne obrade, analize i izveštavanja nad obimnim podacima od strane velikog broja istovremenih korisnika.

Odlično je što su sve verzije (izuzev SQL Server Compact) kompatibilne na gore. U praksi ovo znači da se na primer, može početi sa besplatnom SQL Express verzijom, pa kako rastu potrebe, bezbolno preći (preneti podatke) na jače verzije (pravi primer skalabilnosti IT proizvoda).

SQL 2008 ExpressU ovom serijalu ćemo se posvetiti besplatnoj Microsoft SQL 2008 Express verziji. Prilikom preuzimanja sa Microsoft web sajta postoje tri opcije, zavisno od toga da li želimo samo server baze podataka ili još neke dodatne mogućnosti i alate za menadžment. Postoji sledeće:

1. SQL Server 2008 Express with Tools (220 Mb)Sadrži server baze podataka i alate za menadžment. Ovo je minimum koji treba da preuzmete zbog neophodnih alata za upravljanje koji su nam neophodni u ovom serijalu.

2. SQL Server 2008 Express with Advanced Services (502 Mb)Sadrži sve što i predhodno sa dodatkom servisa za kreiranje izveštaja i naprednim mogućnostima pretrage podataka. Ovo takođe možete preuzeti i instalirati. U ovom serijalu neće biti govora o ovim dodatnim mogućnostima, ali ako želite sami da ih pogledate – tu su.

3. SQL Server 2008 Express (Runtime Only) (90 Mb)U ovoj instalaciji se nalazi samo server baze podataka. Ako ste već napravili bazu i aplikacije koje je koriste, ova opcija je zgodna kada treba samo instalirati server i ništa više.

Matična strana za SQL Express 2008 je http://www.microsoft.com/express/sql/

Dobro je registrovati se pa onda preuzeti instalaciju jer na taj način dobijate besplatno elektronsku knjigu o SQL Serveru i još neke dodatne resurse. Registracija se obavlja na lokaciji: http://www.microsoft.com/express/sql/register/

Ako ne želite da se registrujete, direktno preuzimanje možete obaviti na lokaciji: http://www.microsoft.com/express/sql/download/

Preduslovi za instalacijuImajuć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 sledeće uslove:

Page 4: Mala Skola Baza Podataka-SQL Server2008

Windows XP mora imati instalirani Service Pack 2 ili 3Link za SP3: http://www.microsoft.com/downloads/details.aspx?FamilyID=5B33B5A8-5E76-401F-BE08-1E1555D4F3D4&displaylang=en

Neophodno je instalirati .NET Framework 3.5 sa Service Packom 1Link: http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe

Windows Installer 4.5Link: http://www.microsoft.com/downloadS/details.aspx?familyid=5A58B56F-60B6-4412-95B9-54D056D6F9F4&displaylang=en Izaberite poslednju opciju u listi - WindowsXP-KB942288-v3-x86.exe

Windows Power Shell 1.0 za Windows XPLink: http://www.microsoft.com/downloads/details.aspx?FamilyId=6CCB7E0D-8F1D-4B97-A397-47BCC8BA3806&displaylang=en

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.

InstalacijaKada 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 delovi instalacije gde je potrebno uneti 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 proveru sistema, dokumentacijom i on-line resursima. Ovde kliknite na link "Installation" u gornjem levom delu ekrana:

Page 5: Mala Skola Baza Podataka-SQL Server2008

Nakon ovoga se otvara novi dijalog, gde treba kliknuti na prvu opciju koja instalira novi SQL Server:

Page 6: Mala Skola Baza Podataka-SQL Server2008

Instalaciona procedura sada vrši prvi set provera sistema i neophodnih uslova za postavljanje SQL Servera. Ako je sve u redu treba da vidite sledeć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 sledećoj slici:

Page 7: Mala Skola Baza Podataka-SQL Server2008

Ž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:

Page 8: Mala Skola Baza Podataka-SQL Server2008

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.

Page 9: Mala Skola Baza Podataka-SQL Server2008

Struktura SQL Servera

U predhodnom nastavku smo naučili proceduru instalacije Microsoft SQL Servera 2008 Express na računar i vreme je da se upoznamo sa njegovom strukturom, značenjem i upotrebom elemenata od kojih se sastoji SQL Server.

Iako koristimo Express ediciju, sve objekte koje ćemo ovde proučiti poseduju i ostale verzije, a može se slobodno reći i baze podataka drugih proizvođača na tržištu. Uz SQL Server dolazi i veoma moćan alat za administraciju koji se zove "SQL Server Management Studio". Kliknite na Start meni, zatim All Programs -> Microsoft SQL Server 2008 i na kraju SQL Server Management Studio. Ubuduće ćemo ga zvati skraćeno "Studio".

Kada ste pokrenuli Studio prvo ćete videti dijalog "Connect to SQL Server" gde se unose parametri na osnovu kojih se Studio povezuje sa SQL Serverom. Možete se povezati na lokalni (onaj koji je instaliran na istom računaru gde se pokrenuli Studio) ili na SQL Server bilo gde u mreži. Pod mrežom se podrazumeva i Internet mreža. Ako znate javnu IP adresu na kojoj se nalazi SQL Server možete se povezati na njega uvek kada imate Internet konekciju. Ova mogućnost je jako dobra u praksi jer omogućava udaljenu administraciju i rad sa bilo koje lokacije.

Režimi bezbednosti

SQL Server poseduje dva načina na koje se korisnik (takođe i aplikacija ili Web sajt), može povezati.

SQL Server autentifikacija – znači da je potrebno upisati korisničko ime i šifru za povezivanjeOvaj način povezivanja se koristi u slučaju peer to peer mreža, bez centralizovane lokacije na kojoj se čuvaju korisnički računi – aktivni direktorijum.Windows autentifikacija – koristi se ime korisnika i šifra preko kojih se korisnik ulogovao na Windows. Ideja iza ovoga je da jednom prijavljen korisnik na Windows mrežu, iste kredencijale koristi i za prijavu na SQL Server. U predhodnom nastavku smo prilikom instalacije dodali korisnika Administrator, što znači da svako ko se na Windows prijavi kao administrator, automatski ima prava prijave i na SQL Server. Ovo se može uraditi za bilo koji korisnički račun ili grupu na lokalnom računaru, kao i u domenskoj mreži.

Bez obzira na način prijave koji je izabran, pre svega je neophodno uneti ime SQL Servera na koji želimo da se povežemo. Standardno, ime SQL Servera je isto kao ime računara na koji je instaliran. Isto važi i za njegovu IP adresu.

Napomena za administratore: Osnovni protokol koji koristi SQL Server je TCP/IP na portu 1433, što je značajan podatak u slučaju da postoji FireWall.

To znači da se za ime SQL Servera na koji se vezujemo uvek može uneti njegova IP adresa, kao i ime računara gde je instaliran (što se opet prevodi u njegovu IP adresu). Izuzetak od ovoga je slučaj kada se SQL Server nalazi na Internetu i tada se mora uneti njegova IP adresa.

Postoje i dve skraćenice kada je u pitanju lokani SQL Server. Možete upisati (local) ili jednostavno tačku. Obe skraćenice se interno prevode na IP adresu 127.0.0.0 što označava lokalnu IP adresu lokalnog računara.

SQL Server Express edition po inicijalnoj instalaciji predstavlja mali izuzetak od ovog pravila

Page 10: Mala Skola Baza Podataka-SQL Server2008

jer se njegovo ime formira po sistemu ImeRačunara\SQLEXPRESS kako bi se razlokovalo od "velikog" SQL Servera.

Na sledećoj slici je prikazan dijalog za povezivanje sa izabranom SQL Server autentifikacijom. Zapazite da su polja "User name" i "Password" otvorena za unos:

Ako u izbornoj listi izaberete "Windows authentication", polja "User Name" i "Password" su onemogućena za unos. Bićete ulogovani sa svojim Windows korisničkim imenom i šifrom.

Uz uslov da ste na Windows ulogovani kao Administrator, koristićemo Windows Authentication opciju i kliknuti na dugme "Connect".

Page 11: Mala Skola Baza Podataka-SQL Server2008

Za prvo polje "Server type" ćemo uvek koristiti "Database Engine" kao na obe predhodne slike.Ako je sve u redu, posle par sekundi će biti prikazan Studio gde sa leve strane u Object Explorer okviru možete videti da ste se konektovali na željeni SQL Server (ime računara u primeru je WS2005):

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 obezbeđ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:

Page 12: Mala Skola Baza Podataka-SQL Server2008

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 primene. Jednu bazu podataka sačinjavaju dve fizičke datoteke. U jednoj se čuvaju svi

Page 13: Mala Skola Baza Podataka-SQL Server2008

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 reč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:

Page 14: Mala Skola Baza Podataka-SQL Server2008

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

Page 15: Mala Skola Baza Podataka-SQL Server2008

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 ImeBazeu našem slučaju:CREATE DATABASE MojaBaza.

U prehodnom 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

Pre 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.

Page 16: Mala Skola Baza Podataka-SQL Server2008

Pokrenite Microsoft SQL Server Management Studio i povežite se na lokalni server kao što smo naučili u predhodnom nastavku.

Potom, sa leve 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 primer 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.

Page 17: Mala Skola Baza Podataka-SQL Server2008

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:

Page 18: Mala Skola Baza Podataka-SQL Server2008

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...

Page 19: Mala Skola Baza Podataka-SQL Server2008

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,

Page 20: Mala Skola Baza Podataka-SQL Server2008

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 bajtsmallint -32,768 do 32,767 2 bajtaint - 2,147,483,648 do 2,147,483,647 4 bajtabigint -263 do 263-1 8 bajtova

Brojevi sa pokretnim zarezom:money -922,337,203,685,477.5808 do

922,337,203,685,477.58078 bajtova

smallmoney - 214,748.3648 do 214,748.3647 4 bajtadecimal Opseg zavisi od definisanih broja decimala.

Sa maksimalnom preciznošću od 38 opseg je-1038 do 1038

Maksimalno 17 bajtova

real -3.438 do 3.438 4 bajta

Page 21: Mala Skola Baza Podataka-SQL Server2008

float -1,79308 do 1.79308 8 bajtova

Datum i vreme:date 1.jan 0001 do 31.dec 9999 3 bajtadatetime 1.jan 1753 do 31.dec 9999

preciznost vremena je 0.003 sekunde8 bajtova

smalldatetime 1.jan 1900 do 6.jun 2079preciznost vremena je 0.3 sekunde

4 bajta

datetime2 1.jan 0001 do 31.dec 9999preciznost vremena je 100 nanonsekundi

8 bajtova

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 bajtovavarchar 1 do 8000 karaktera (varijabilne dužine) 1 do 8000 bajtovatext 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 bajtovanvarchar 1 do 4000 karaktera (varijabilne dužine) 2 do 8000 bajtovantext 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 bajtovavarninary 1 do 8000 (varijabilne dužine) 1 do 8000 bajtovaimage 0 do 231-1 (varijabilne dužine) 0 do 231-1 bajtova

Specijalni tip:uniqueidentifier globalni jedinstveni identifikator koji služi

za čuvanje rezultata funkcije NEWID()16 bajtova

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

Page 22: Mala Skola Baza Podataka-SQL Server2008

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 = 9223372036854775808Rekli 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 podaciTekstualne 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.

Page 23: Mala Skola Baza Podataka-SQL Server2008

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 tipoviOvi 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 tipoviPostoji 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 smestiti 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-AE4D61DC1F33Veliki jedinstveni heksadecimalni broj koji zauzima čak 16 bajtova.

Često se koristi kao vrednost 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 namene. 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 predvideti? 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, izmena i brisanje objekata u SQL Serveru se može izvršiti ili pomoću

Page 24: Mala Skola Baza Podataka-SQL Server2008

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 naredbuCREATE DATABASE Testi 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.

Page 25: Mala Skola Baza Podataka-SQL Server2008

Kreiranje tabeleKliknite 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

Page 26: Mala Skola Baza Podataka-SQL Server2008

(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č:

Page 27: Mala Skola Baza Podataka-SQL Server2008

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.

UvodSvima 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

Page 28: Mala Skola Baza Podataka-SQL Server2008

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 primer, 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.

TeorijaNa sreću Britanski kompjuterski naučnik Edgar Frank Codd je 1970 objavio svoj rad pod nazivom "A Relational Model of Data for Large Shared Data Banks" gde je započeo koncept relacionih baza podataka. Codd je obradio čak 12 nivoa normalizacije tabela u bazama podataka od kojih se u praksi najčešće koriste prve tri. Ova tematika daleko prevazilazi ambicije serijala, tako da za više informacija preporučujemo da pogledate sledeću Web lokaciju: http://en.wikipedia.org/wiki/Relational_model

Codd je takođe rodonačelnik jezika za rad sa bazama podataka koje se originalno zvao SEQUEL a kasnije je preimenovan u dragi nam SQL.

Na našem primeru treba primeniti 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 vrednost primarnog ključa.U našem slučaju ovo znači da u tabeli „Ocene“ imamo samo informaciju o vrednosti primarnog ključa učenika koji se nalazi u tabeli „Učenici“. Ovo znači da gledajući tabelu „Ocene“ uvek možemo pogledati i podatke o učeniku jednostavnim zadavanjem filtera za vrednost primarnog ključa u tabeli „Učenici“.

Da bi ovo ilustrovali na primeru, pogledajte dve tabele sa test podacima na sledećoj slici:

Page 29: Mala Skola Baza Podataka-SQL Server2008

UcenikID Ime Prezime Ostali podaci…

23/2009 Petar Petrović …

24/2009 Una Milosavljević …

Ocena ID UcenikID Ocena Datum Ostali podaci…

1 23/2009 5 30.05.2009 …

2 23/2009 4 15.05.2009 …

3 24/2009 5 11.05.2009 …

4 23/2009 5 12.05.2009 …

Tabela “Ucenici”

Tabela “Ocene”

U tabeli „Ucenici“ kolona „UcenikID“ predstavlja primarni ključ tabele čija vrednost identifikuje jedinstvenog učenika. U tabeli „Ocene“ istoimena kolona „UcenikID“ predstavlja jedinstveni identifikator učenika koji je dobio zadatu ocenu. Samo ta vrednost se ponavlja onoliko puta koliko učenik ima ocena – 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 vrednosti.

Implementacija relacije

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

„Ucenici“UcenikID char (8) NOT NULL PRIMARY KEY (format nnn/gggg)Ime nvarchar(10) NOT NULL

Page 30: Mala Skola Baza Podataka-SQL Server2008

Prezime nvarchar(15) NOT NULLOstale atribute dodajte po zahtevu...

„Ocene“OcenaID int NOT NULL PRIMARY KEYUcenikID char(8) NOT NULLOcena tinyint NOT NULLDatum datetime NOT NULLTakođe ostale atribute dodati po zahtevu...

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

Ocene:

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“:

Page 31: Mala Skola Baza Podataka-SQL Server2008

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 „Ocene“, 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 „Ocene“. 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

Page 32: Mala Skola Baza Podataka-SQL Server2008

u bazu.

Rezime

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 „Ocene“ 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. Nadamo se da je bilo korisno i da smo vas motivisali za korišćenje i dalje učenje ovog izvanrednog i besplatnog softverskog proizvoda.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/

Miloš Milosavljević

Page 33: Mala Skola Baza Podataka-SQL Server2008