Presentation is loading. Please wait.

Presentation is loading. Please wait.

BAZA PODATAKA (Database) je skup međusobno povezanih podataka koji se čuvaju zajedno, tokom dužeg vremenskog perioda, i među kojima ima samo onoliko ponavljanja.

Similar presentations


Presentation on theme: "BAZA PODATAKA (Database) je skup međusobno povezanih podataka koji se čuvaju zajedno, tokom dužeg vremenskog perioda, i među kojima ima samo onoliko ponavljanja."— Presentation transcript:

1 BAZA PODATAKA (Database) je skup međusobno povezanih podataka koji se čuvaju zajedno, tokom dužeg vremenskog perioda, i među kojima ima samo onoliko ponavljanja koliko je neophodno za njihovo optimalno korišćenje pri višekorisničkom radu. RELACIONA BAZA PODATAKA (Relational Database) je baza podataka izgrađena prema relacionom modelu koju korisnik vidi kao skup vremenski promenljivih tabela. Kod relacionog modela podataka i relacionih baza podataka sledeći termini se koriste kao sinonimi: Relacija ® relaciona tabela ® tabela Atribut ® kolona Vrsta ® red ® n-torka ® slog ® zapis Polje ® ćelija (presek vrste i kolone)

2 Da bi neka tabela predstavljala relaciju tj
Da bi neka tabela predstavljala relaciju tj. bila RELACIONA TABELA mora zadovoljavati sledeće uslove: Tabela mora imati jedinstveno ime. U tabeli ne smeju postojati identične vrste. Redosled vrsta nije od značaja. Vrste nisu imenovane. Svaka vrsta reprezentuje jedno pojavljivanje odgovarajućeg entiteta. Vrsta se sastoji od polja (field) i svako polje pamti jedan atribut entiteta. Redosled kolona nije od značaja, ali je isti za sve vrste jedne tabele. Kolone su imenovane i sve kolone unutar jedne tabele moraju imati različita imena. Ime kolone je naziv atributa entiteta. Dopušteno je korišćenje istih imena za kolone u različitim tabelama. Sve vrednosti atributa su atomske, elementarne tj. nije dozvoljeno da sami atributi budu relacije, odnosno da imaju više vrednosti.

3 Među atributima ne smeju postojati funkcionalne zavisnosti.
Kolone su homogene; svi podaci u jednoj koloni su istog tipa. Neka polja u vrsti mogu biti nepopunjena, tj.mogu imati NULL (“nultu”) vrednost. Pod pojmom nultog podatka podrazumeva se vrednost nekog atibuta koja je u datom trenutku nepoznata, nije nastupio momenat njegovog postojanja ili neki objekti uopšte ne poseduju to svojstvo (“neprimenljivo svojstvo”). Atributi uzimaju vrednosti iz prethodno definisanih domena. U svakom trenutku su dozvoljene operacije nad podacima sadržanim u tabeli. Vrste i kolone se mogu sagledavati u bilo kom redosledu, bez uticaja na sadržaj tabele. Relacioni model je zasnovan na relacijama (vezama) između tabela, pri čemu su i same veze predstavljene tabelama!

4 KLJUČ U RELACIONOM MODELU
Relacioni model razlikuje sledeće tipove ključa: Primarni Alternativni Sekundardni Spoljni (strani)

5 PRIMARNI KLUČ I ALTERNATIVNI KLJUČEVI
Kandidat za primarni ključ (ključ relacije, ključ) je takva kolekcija atributa koja zadovoljava sledeće uslove: Uslov jedinstvenosti – ne postoje bilo koje dve n-torke sa istom vrednošću ključa. Uslov neredundantnosti – ako se bilo koji atribut izostavi iz ključa, gubi se osobina jedinstvenosti, tj. nijedan podskup kandidata za ključ nije kandidat za ključ. Među kandidatima za ključeve bira se jedan za primarni ključ (Primary key) . Ostali (neizabrani) kandidati nazivaju se alternativnim ključevi. Primarni kluč mora biti: jedinstven, nepromenljiv i raspoloživ (nijedan deo primarnog ključa ne može imati NULL vrednost). Ako primarni ključ čini samo jedan atribut, onda je on prost; u suprotnom je složen (kompozitan).

6 Prost primarni ključ je ona kolona čiji su svi elementi obavezno različiti (broj indeksa, matični broj, registarski broj vozila, ...). Tek ako nema kandidata za prost primarni ključ, tj. tabela ne sadrži kolonu koja će obavezno imati različite vrednosti, razmišljamo o uvođenju složenog primarnog ključa. Problem se može rešiti i na drugi način: uvođenjem novog, dodatnog atributa (npr. šifra, redni_broj, ID, ..) koji je jedinstven za svaku vrstu. Uobičajeno je da primarni ključ na neki način markira u zapisu šeme relacije. Atributi koji čine primarni ključ se obično označavaju znakom # koji se stavlja ispred ili iza naziva atributa. Drugi način je podvačenje atributa koji čine primarni ključ. Mi ćemo znak # stavljati iza naziva atributa. Npr. STUDENT<broj_indeksa#, mat_br, ime, prezime, broj_položenih_ispita, telefon> T-SQL dozvoljava da se karakter # pojavi u imenu atributa!

7 SEKUNDARNI KLJUČEVI su svi atributi po kojima se vrši pretraživanje baze osim primarnog ključa. Razlika između primarnog i sekundarnih ključeva je u tome što pri pretraživanju baze po primalnom ključu dobijamo najviše jedan ili nijedan zapis, a pri pretraživanju po sekundarnim ključevima možemo dobiti i više zapisa (recordset).

8 STRANI KLJUČ Strani, spoljni ključ (Foreign key) je atribut jedne relacije koji u drugoj relaciji ima ulogu primarnog ključa. Veza između dve relacione tabele u bazi podataka ostvaruje preko deljenih kolona tj. stranih ključeva. Tabela može imati više stranih ključeva, koji čak ne moraju biti samo prosti već i kompozitni. Strani ključevi su neophodni jer osiguravju konzistentnost podataka koji se nalaze u više tabela. Zbog preglednosti modela, korisno je strani ključ obeležiti. Obično se kao oznaka stranog ključa koristi $ ili !. Npr. Posmatrajmo šeme relacija: KLINIKA <šifra_klinike#, naziv_klinike, adresa, telefon > LEKAR<šifra_lekara#, mat_broj, šifra_klinike$, ime, prezime, specijalnost > Strani ključ može imati NULL vrednost!

9 DOMEN je skup iz kog atributi relacije uzimaju svoje vrednosti
DOMEN je skup iz kog atributi relacije uzimaju svoje vrednosti. Domeni mogu biti: predefinisani domeni – domeni ugrađeni u jezik baze podataka. Predefinisani domeni su ustvari standardni tipovi podataka raspoloživi u konkretnom jeziku baze podataka (npr. u T-SQL-u); semantički domeni – domeni koje korisnik definiše na bazi predefinisanih domena ili prethodno definisanih semantičkih domena. Korisnik ugrađuje u definiciju domena neko ograničenje dajući mu na taj način određeno značenje. Stoga oni i nose naziv “semantički“. Korišćenje semantičkih domena obezbeđuje veći stepen itegriteta podataka. Npr. pretpostavimo da su atributi ocena i srarost definisani na istim celobrojnim standardnim tipom podataka. U tom slučaju bi operacije ocena<starost ili ocena+starost bile legalne mada su logički neprihvatljive. Bez obzira na prednost korišćenja semantičkih domena, mi ćemo uglavnom raditi sa bogatim spektrom standardnih tipova podataka raspoloživih u T-SQL-u.

10 TIP PODATAKA pridružen konkretnom atributu bliže opisuje atribut i određuje način njegovog memorisanja. S druge strane, tip podataka predstavlja i jedan vid ograničenja jer onemogućava jedan broj grešaka prilikom unošenja podatka. Npr. ako je atribut ocena celobrojnog tipa, ne možemo kao njegovu vrednost uneti realan broj. Tip podataka je, osim atributima, pridružen i drugim konstrukcijama T-SQL jezika: promenljivama, izrazima, funkcijama, ... Svaki tip podataka okarakterisan je oblašću vrednosti i operacijama koje mogu da se izvedu nad podacima datog tipa. Svaki od tipova podataka u T-SQL-u uključuje i NULL vrednost!

11 Ekzaktni numerički tipovi (Exact Numerics)
Ime tipa Opis tipa Oblast vrednosti Memorijski prostor (u bajtima) Ekzaktni numerički tipovi (Exact Numerics) BIGINT celobrojni -2^63 (-9,223,372,036,854,775,808) do 2^63-1 (9,223,372,036,854,775,807) 8 INT -2^31 (-2,147,483,648) do 2^31-1 (2,147,483,647) 4 SMALLINT -2^15 (-32,768) do 2^15-1 (32,767) 2 TINYINT 0 to 255 1

12 realni, fiksna preciznost i skala - 10^38 +1 do 10^38 za maksimalno p
BIT celobrojni 0 ili1 8 ili manje Bit kolona u tabeli, čuvaju se kao 1 bajt; od 9 do 16 Bit kolona, čuvaju se kao 2 bajta, itd. DECIMAL [ (p[,s] ) ] NUMERIC [ (p[,s] ) ] p – maksimalni ukupni broj dekadnih cifara, levo i desno od decimalne tačke, 1 <= p <= 38 s - maksimalni broj dekadnih cifara desno od decimalne tačke, 0 <= s <= p realni, fiksna preciznost i skala - 10^38 +1 do 10^38 za maksimalno p promenljiv, zavisi od preciznosti p MONEY novčane vrednosti -922,337,203,685, do 922,337,203,685, 8 SMALLMONEY - 214, do 214, 4

13 Aproksimativni numerički tipovi (Approximate Numerics)
FLOAT [ ( n ) ] n je broj bita za mantisu, 1<= n <= 53 realni, pošireni -1.79E+308 do -2.23E-308, 0 i 2.23E-308 do 1.79E+308 zavisi od n REAL (FLOAT (24 )) realni - 3.40E + 38 do -1.18E - 38, 0 i 1.18E - 38 do 3.40E + 38 4 Datumski i vremenski (Date and Time) DATETIME datum i vreme Datum i vreme od do sa korakom 3.33 msec 8 SMALLDATETIME Datum i vreme od do sa korakom 1 min

14 Znakovni tipovi (Character Strings)
CHAR [ ( n ) ] 1 <= n <= 8000 znakovni Znakovni podaci fiksne dužine n karaktera. Podaci kraći od specificirane dužine dopunjavaju se prazninama. n VARCHAR [ ( n | max ) ] max= 2^31-1 Znakovni podaci promenljive dužine do n karaktera. Podaci kraći od specificirane dužine ne dopunjavaju se prazninama. n+2 TEXT ( VARCHAR(max)) Znakovni podaci promenljive dužine sa maksimalno 2^31-1 ( ) karaktera promenljiv *Tip TEXT je predviđen za uklanjanje iz sledećih verzija SQL Servera!

15 Binarni tipovi (Binary Strings)
BINARY [ ( n ) ] 1 <= n <= 8000 binarni binarni podaci fiksne dužine n bajta n VARBINARY [ ( n | max ) ] max= 2^31-1 binarni podaci promenljive dužine do n bajta n+2 IMAGE ( VARBINARY(max)) binararni podaci promenljive dužine sa maksimalno 2^31-1 ( ) bajta promenljiv *Tip IMAGE je predviđen za uklanjanje iz sledećih verzija SQL Servera!

16 Ostali tipovi podataka (Other Data Types )
TABLE specijalni čuva result set za kasnije procesiranje promenljiv CURSOR referenca na kursor TIMESTAMP Unikatni broj koji se menja svaki put kad se radi promena nad vrstom 8 SQL_VARIANT tip podataka koji omogućava čuvanje većine drugih tipova podataka UNIQUEIDENTIFIER globalni identifikator koji se nikada ne može ponoviti 16 XML znakovni definiše znakovno polje koje predstavlja XML podatke

17 NAREDBE ZA DEFINISANJE PODATAKA služe za definisanje strukture objekata, izmene i brisanja definicija. Pomoću ovih naredbi se opisuje šema baze podataka. Osnovna karakteristika ovih naredbi je da se njihovo izvršenje ne može otkazati naredbom ROLLBACK. U ovu grupu spadaju sledeće naredbe: CREATE TABLE – kreiranje fizičke tabele baze podataka, ALTER TABLE – izmena definicije objekata u postojećoj tabeli, DROP TABLE – uklanjanje tabele iz baze podataka, CREATE INDEX – kreiranje indeksa nad jednom ili više kolona tabele ili pogleda, DROP INDEX – uklanjanje indeksa, CREATE VIEW – kreiranje virtuelene imenovane tabele, pogleda, DROP VIEW – uklanjanje pogleda iz baze podataka.

18 Naredba CREATE TABLE Najjednostavnija sintaksa naredbe ima oblik: CREATE TABLE <ime_tabele> ( <ime_atributa> <tip_atributa> {, <ime_atributa> <tip_atributa>} )

19 Primeri naredbi za definisanje tabela:
1. CREATE TABLE RADNIK ( id_br# INT, ime CHAR(15), prezime CHAR(20), br_od$ TINYINT ) 2. CREATE TABLE ODELJENJE br_od# TINYINT , ime_od CHAR(15), mesto CHAR(20)

20 Uslovi za tabele Nametanje uslova (constraints) na tabele obezbeđuje integritet podataka u pojedičnoj tabeli i u bazi podataka. SQL Server 2005 raspolaže sa više uslova, a mi ćemo spomenuti sledeće: PRIMARY KEY NOT NULL UNIQUE CHECK DEFAULT Uslovi referencijalnog integriteta.

21 Uslov PRIMARY KEY Nametanje uslova primarnog ključa sprečava unošenje duplih vrednosti u kolonu tj. kolone tabele koje smo proglasili za primarni ključ. Takođe, nijedana kolona koja je deo primarnog ključa ne može sadržati NULL vrednost. Proširena sintaksa naredbe CREATE TABLE u tom slučaju ima oblik: CREATE TABLE <ime_tabele> ( <ime_atributa> <tip_atributa> {, <ime_atributa> <tip_atributa>} CONSTRAINT <ime_uslova> PRIMARY KEY (<ime_atributa> {, <ime_atributa>}) )

22 Primeri uvođenja uslova primarnog ključa:
1. CREATE TABLE RADNIK ( id_br# INT, ime CHAR(15), prezime CHAR(20), br_od$ TINYINT CONSTRAINT p_kljuc_radnik PRIMARY KEY (id_br#) ) 2. CREATE TABLE ODELJENJE br_od# TINYINT , ime_od CHAR(15), mesto CHAR(20) CONSTRAINT p_kljuc_odeljenje PRIMARY KEY (br_od#)

23 Ovakav način definisanja primarnog ključa je obavezan za složeni primarni ključ: atributi koji čine složeni primarni ključ navode se u ograničenju razdvojeni zarezima. Ukoliko je primarni ključ prost, uslov primarnog ključa se može nametnuti i odmah iza tipa atributa koji predstavlja primarni ključ. Primer: 1. CREATE TABLE RADNIK ( id_br# INT PRIMARY KEY, ime CHAR(15), prezime CHAR(20), br_od$ TINYINT )

24 Uslov NOT NULL Uslov NOT NULL zabranjuje da neki atribut uzme NULL vrednost. Uslov se navodi iza tipa odgovarajućeg atributa. S obzirom da primarni ključ mora zadovoljavati uslov raspoloživosti, uslov NOT NULL ima smisla nametnuti na atribut koji nije deo primarnog ključa. Primer: 1. CREATE TABLE RADNIK ( id_br# INT PRIMARY KEY, ime CHAR(15) NOT NULL, prezime CHAR(20) NOT NULL, br_od$ TINYINT )

25 Uslov UNIQUE Uslov UNIQUE zabranjuje ponavljanje vrednosti nekog atributa. S obzirom da primarni ključ mora zadovoljavati uslov jedinstvenosti, uslov UNIQUE ima smisla nametnuti na atribut koji nije primarni ključ. Uslov UNIQUE ne isključuje pojavu NULL vrednosti, pa se ova dva uslova često nameću na isti atribut. Primer: 1. CREATE TABLE ODELJENJE ( br_od# TINYINT PRIMARY KEY , ime_od CHAR(15) NOT NULL UNIQUE, mesto CHAR(20) NOT NULL )

26 Uslov DEFAULT Uslov DEFAULT služi za automatsko upisivanje vrednosti u određenu kolonu kada nikakva vrednost nije zadata. Time se značajno ubrzava unos podataka ako se neka vrednost često ponavlja, smanjuje se mogućnost pojave pogrešnih podataka i obezbeđuje integritet podataka (izbegava se NULL podatak). Primer: 1. CREATE TABLE ODELJENJE ( br_od# TINYINT PRIMARY KEY , ime_od CHAR(15) NOT NULL UNIQUE, mesto CHAR(20) DEFAULT 'Beograd' )

27 Uslov CHECK Uslov CHECK sprečava da u kolonu unesemo vrednost izvan opsega zadatog uslovom CHECK. Prilikom formulisanja uslova najčešće se koriste sledeći opratori: Operator Opis operatora Primer upotrebe =, <, >, <> <=, >= Standardni relacijski operatori ime='Petar' br_od$>3 AND, OR i NOT Standardni logički operatori ime= 'Petar' AND br_od$>3 BETWEEN Ispituje da li se vrednost datog izraza nalazi između dve zadate vrednosti br_od# BETWEEN 1 AND 5 IN Ispituje da li se vrednost datog izraza nalazi u specificiranoj listi mesto IN ('Beograd', 'Zemun')

28 Primeri: 1. CREATE TABLE ODELJENJE ( br_od# TINYINT PRIMARY KEY CONSTRAINT br_od#_provera CHECK (br_od# BETWEEN 1 AND 5), ime_od CHAR(15) NOT NULL UNIQUE, mesto CHAR(20) DEFAULT 'Beograd' CONSTRAINT mesto_provera CHECK (mesto IN ('Beograd', 'Zemun')) ) 2. CREATE TABLE RADNIK id_br# INT PRIMARY KEY CONSTRAINT id_br#_provera CHECK (id_br#>=1 AND id_br#<=99999), ime CHAR(15) NOT NULL, prezime CHAR(20) NOT NULL, br_od$ TINYINT

29 Uslovi referencilanog integriteta
Relaciona baza podataka se sastoji od tabela i veza između njih. Da bismo definisali vezu između tabela deklarišemo uslov referencijalnog integriteta. Ovaj uslov određuje da red u jednoj tabeli (onoj u kojoj je definisan spoljni ključ) ne može da postoji ako ogovarajuća kolona u tom redu ne sadrži vrednost koja je jednaka vrednosti primarnog ključa u drugoj tabeli. Referencijalni integrit moze bit narušen: umetanjem - operacija INSERT, ažuriranjem - operacija UPDATE, brisanjem - operacija DELETE.

30 Primer: ODELJENJE Umetanje reda <4, 'Milica', 'Pešić',3> u tabelu RADNIK nije moguće jer odeljenje sa rednim brojem 3 ne postoji, Ažuriranje reda <2, 'Petar', 'Petrović',1> iz tabele RADNIK u red <2, 'Petar', 'Petrović',3> nije moguće jer odeljenje sa rednim brojem 3 ne postoji, Brisanje reda <1, 'Personalno', ‘Beograd'> iz tabele ODELJENJE nije moguće jer bi prvi i drugi red u tabeli RADNIK referencirali nepostojeće odeljenje. br_od# ime_od mesto 1 Personalno Beograd 2 Računarski centar RADNIK id_br# ime prezime br_od$ 1 Marko Marković 2 Petar Petrović 3 Zoran Ilić

31 Da bi prilikom kreiranja tabele deklarisali uslov referencijalnog integriteta neophodno je prvo napraviti referenciranu tabelu u kojoj je definisan primarni ključ (npr. tabelu ODELJENJE). Nakon toga koristeći naredbu CREATE TABLE kreiramo referencirajuću tabelu sa definisanim spoljnim ključem (npr. tabelu RADNIK). Primer: 1. CREATE TABLE ODELJENJE ( br_od# TINYINT PRIMARY KEY CONSTRAINT br_od#_provera CHECK (br_od# BETWEEN 1 AND 5), ime_od CHAR(15) NOT NULL UNIQUE, mesto CHAR(20) DEFAULT 'Beograd‘ CONSTRAINT mesto_provera CHECK (mesto in ('Beograd', 'Zemun')) ) 2. CREATE TABLE RADNIK id_br# INT PRIMARY KEY CONSTRAINT id_br#_provera CHECK (id_br#>=1 AND id_br#<=99999), ime CHAR(15) NOT NULL, prezime CHAR(20) NOT NULL, br_od$ TINYINT REFERENCES ODELJENJE(br_od#)

32 Ako smo na ovakav način povezali tabele, zahtevi za nedozvoljenim umetanjem, ažuriranjem i brisanjem će biti odbačeni od strane SQL Servera, tj. neće se dogoditi nikakava akcija. Prethodnoj naredbi za kreiranje tabele RADNIK potpuno je ekvivalentna sledeća: CREATE TABLE RADNIK ( id_br# INT PRIMARY KEY CONSTRAINT id_br#_provera CHECK (id_br#>=1 AND id_br#<=99999), ime CHAR(15) NOT NULL, prezime CHAR(20) NOT NULL, br_od$ TINYINT CONSTRAINT br_od$_sk REFERENCES ODELJENJE(br_od#) ON DELETE NO ACTION ON UPDATE NO ACTION ) Ovde smo uslov referencijalnog integriteta imenovali (što nije obavezno). Takođe, u slučaju pokušaja brisanja, tj. ažuriranja reda iz roditeljske tabele (ODELJENJE) koji je referenciran u podređenoj tabeli, SQL Server ce prijaviti grešku i poništiti akciju brisanja tj. ažuriranja reda u roditeljskoj tabeli. Opcija NO ACTION je podrazumevana, pa stoga u primeru na prethodnom slajdu nije navedena.

33 Opcija CASCADE Osim prostog odbacivanja zahteva za brisanjem tj.ažuriranjem moguće je izabrati opciju kaskadnog brisanja tj. ažuriranja. Opcija ON DELETE CASCADE omogućava brisanje redova iz podređene tabele (npr. RADNIK) na koje utiče brisanje redova iz referencirane tabele. Npr. kaskadno brisanje dovodi do toga da ako iz tabele ODELJENJE izbrisemo podatke o odeljenju sa br_od#=1 iz tabele RADNIK ce biti obrisani svi radnici za koje vazi br_od$ =1. Opcija ON UPDATE CASCADE omogućava ažuriranje redova iz podređene tabele na koje utiče ažuriranje redova iz referencirane tabele. Npr. ako Personalno odeljenje u tabeli ODELJENJE dobije novi broj br_od#=3, za sve radnike zaposlene u njemu vazice br_od$ =3. Opcije ON DELETE i ON UPDATE ne moraju biti postavljenje na istu vrednost.

34 Primer: CREATE TABLE RADNIK ( id_br# INT PRIMARY KEY
CONSTRAINT id_br#_provera CHECK (id_br#>=1 AND id_br#<=99999), ime CHAR(15) NOT NULL, prezime CHAR(20) NOT NULL, br_od$ TINYINT CONSTRAINT br_od$_sk REFERENCES ODELJENJE(br_od#) ON DELETE NO ACTION ON UPDATE NO CASCADE )

35 dodajemo novi atribut u postojeću tabelu,
Naredba ALTER TABLE Naredbom ALTER TABLE: dodajemo novi atribut u postojeću tabelu, izbacujemo atribut iz tabele, menjamo definiciju postojećeg atributa u tabeli, postavljamo i ukidamo ograničenja: primarnog ključa, NOT NULL vrednosti, jedinstvenosti, provere specificiranog uslova, DEFAULT vrednosti, spoljnjeg ključa. Dakle, sve što smo "zaboravili" da definišemo naredbom CREATE TABLE možemo "popraviti" naredbom ALTER TABLE!

36 Sintaksa naredbe ALTER TABLE za dodavanje novih atributa:
ALTER TABLE <ime_tabele> ADD <ime_atributa> <tip_atributa> {, <ime_atributa> <tip_atributa>} Primer: Sledeća naredba dodaje atribute kvalif i datum_zap u tabelu RADNIK. ALTER TABLE RADNIK ADD kvalif CHAR(3), datum_zap SMALLDATETIME

37 Sintaksa naredbe ALTER TABLE za izbacivanje atributa iz tabele:
ALTER TABLE <ime_tabele> DROP COLUMN <ime_atributa> {, <ime_atributa>} Primer: Sledeća naredba izbacuje atribute kvalif i datum_zap iz tabele RADNIK. ALTER TABLE RADNIK DROP COLUMN kvalif, datum_zap

38 Sintaksa naredbe ALTER TABLE za promenu definicije postojećeg atributa:
ALTER TABLE <ime_tabele> ALTER COLUMN <ime_atributa> <tip_atributa> Primer: Sledeća naredba menja tip atributa ime_od u tabeli ODELJENJE u CHAR(50). ALTER TABLE ODELJENJE ALTER COLUMN ime_od CHAR(50) Promena definicije atributa ne sme biti u koliziji sa već prisutnim vrednostima u tabeli!

39 ALTER TABLE <ime_tabele> ADD CONSTRAINT <ime_ograničenja>
Sintaksa naredbe ALTER TABLE za postavljanje ograničenja primarnog ključa: ALTER TABLE <ime_tabele> ADD CONSTRAINT <ime_ograničenja> PRIMARY KEY (<ime_atributa> {, <ime_atributa>}) Primer: Neka je tabela ODELJENJE kreirana sledećom naredbom: CREATE TABLE ODELJENJE ( br_od# TINYINT , ime_od CHAR(15), mesto CHAR(20) ) Sledeća naredba dodaje primarni ključ nad atributom br_od# u tabelu ODELJENJE: ALTER TABLE ODELJENJE ADD CONSTRAINT pk_odeljenje PRIMARY KEY (br_od#)

40 ALTER TABLE <ime_tabele> ALTER COLUMN
Sintaksa naredbe ALTER TABLE za postavljanje NOT NULL ograničenja nad atributom: ALTER TABLE <ime_tabele> ALTER COLUMN <ime_atributa> <tip_atributa> NOT NULL Primer: Neka je tabela ODELJENJE kreirana sledećom naredbom: CREATE TABLE ODELJENJE ( br_od# TINYINT , ime_od CHAR(15), mesto CHAR(20) ) Sledeća naredba dodaje NOT NULL ograničenje nad atributom ime_od i menja mu tip: ALTER TABLE ODELJENJE ALTER COLUMN ime_od CHAR(50) NOT NULL

41 ALTER TABLE <ime_tabele> ADD CONSTRAINT <ime_ograničenja>
Sintaksa naredbe ALTER TABLE za postavljanje ograničenja jedinstevenosti nad atributom: ALTER TABLE <ime_tabele> ADD CONSTRAINT <ime_ograničenja> UNIQUE (<ime_atributa> {, <ime_atributa>}) Primer: Neka je tabela ODELJENJE kreirana sledećom naredbom: CREATE TABLE ODELJENJE ( br_od# TINYINT, ime_od CHAR(15), mesto CHAR(20) ) Sledeća naredba dodaje ograničenje UNIQUE nad atributom ime_od: ALTER TABLE ODELJENJE ADD CONSTRAINT jedinstvenost_ime_od UNIQUE (ime_od)

42 Sintaksa naredbe ALTER TABLE za proveru specificiranog uslova:
ALTER TABLE <ime_tabele> ADD CONSTRAINT <ime_ograničenja> CHECK <uslov> Primer: Neka je tabela RADNIK dopunjena atributima kvalif tipa CHAR(3) i datum_zap tipa SMALLDATETIME. Sledeća naredba dodaje ograničenje da datum zaposlenja mora biti manji ili jednak tekućem datumu. ALTER TABLE RADNIK ADD CONSTRAINT provera_datum_zap CHECK (datum_zap<=GETDATE()) Sledeća naredba dodaje ograničenje da oznaka kvalifikacija može biti samo jedna od vrednosti: KV, VKV, SSS, VSS i VS. ADD CONSTRAINT provera_kvalif CHECK (kvalif IN ('KV','VKV', 'SSS','VSS','VS'))

43 Sintaksa naredbe ALTER TABLE za postavljanje DEFAULT (podrazumevane) vrednosti:
ALTER TABLE <ime_tabele> ADD <ime_atributa> <tip_atributa> [DEFAULT <vrednost>] [NOT NULL] {, <ime_atributa> <tip_atributa> [DEFAULT <vrednost>] [NOT NULL] } Primer: Neka je tabela RADNIK i ODELJENJE kreirana sledećom naredbom: CREATE TABLE ODELJENJE ( br_od# TINYINT , ime_od CHAR(15), mesto CHAR(20) ) Sledeća naredba uvodi atribut drzava za koji je podrazumevana vrednost 'Srbija' i atribut datum_formiranja koji ne sme imati nultu vrednost: ALTER TABLE ODELJENJE ADD drzava CHAR(15) DEFAULT 'Srbija' datum_formiranja SMALLDATETIME NOT NULL

44 ADD CONSTRAINT <ime_ograničenja>
Sintaksa naredbe ALTER TABLE za postavljanje uslova referencijalnog integriteta (ograničenja spoljnjeg ključa): ALTER TABLE <ime_referencirajuće_tabele> ADD CONSTRAINT <ime_ograničenja> FOREIGN KEY ( <ime_atributa> {, <ime_atributa> }) REFERENCES <ime_referencirane_tabele> (<ime_atributa> {, <ime_atributa> }) Primer: Neka je tabela ODELJENJE kreirana sledećom naredbom: CREATE TABLE ODELJENJE ( br_od# TINYINT PRIMARY KEY CONSTRAINT br_od#_provera CHECK (br_od# BETWEEN 1 AND 5), ime_od CHAR(15) NOT NULL UNIQUE, mesto CHAR(20) DEFAULT 'Beograd‘ CONSTRAINT mesto_provera CHECK (mesto in ('Beograd', 'Zemun')) )

45 Neka je tabela RADNIK kreirana sledećom naredbom:
CREATE TABLE RADNIK ( id_br# INT PRIMARY KEY CONSTRAINT id_br#_provera CHECK (id_br#>=1 AND id_br#<=99999), ime CHAR(15) NOT NULL, prezime CHAR(20) NOT NULL, br_od$ TINYINT ) Sledeća naredba u tabeli RADNIK postavlja strani ključ nad atributom br_od$ koji je povezan sa atributom br_od# koji je primarni ključ u tabeli ODELJENJE: ALTER TABLE RADNIK ADD CONSTRAINT sk_radnik_odeljenje FOREIGN KEY (br_od$ ) REFERENCES ODELJENJE (br_od# )

46 ALTER TABLE <ime_tabele> DROP CONSTRAINT <ime_ograničenja>
Svako imenovano ograničenje može biti ukinuto. Sintaksa naredbe ALTER TABLE za ukidanje ograničenja: ALTER TABLE <ime_tabele> DROP CONSTRAINT <ime_ograničenja> Primer: Neka je nad atributom kvalif tabele RADNIK uvedeno ograničenje: ALTER TABLE RADNIK ADD CONSTRAINT provera_kvalif CHECK (kvalif IN ('KV','VKV', 'SSS','VSS','VS')) Sledeća naredba ukida ograničenje provera_kvalif: DROP CONSTRAINT provera_kvalif

47 Sledeća naredba izbacuje tabelu RADNIK iz tekuće baze podataka:
Svi kreirani objekti baze podataka mogu biti i ukinuti. Do sada smo videli kako se ukidaju atributi i ograničenja. Sintaksa naredbe DROP TABLE za izbacivanje definicije tabele iz baze podataka je: DROP TABLE <ime_tabele> Ovom naredbom se izbacuje iz baze podataka ne samo definicija tabele, već i svi podaci koje ona sadrži, nad njom kreirani indeksi i ograničenja. SQL Server, za razliku od Access-a, podržava i naredbu za izbacivanje cele baze podataka: DROP DATABASE <ime_baze_podataka> Primeri: Sledeća naredba izbacuje tabelu RADNIK iz tekuće baze podataka: DROP TABLE RADNIK Sledeća naredba briše sve objekte baze podataka PREDUZECE: DROP DATABASE PREDUZECE

48 Metode pretraživanja:
PRETRAŽIVANJE je jedna od osnovnih operacija pri manipulisanju podacima i podrazumeva dobijanje novih informacija na osnovu određenog broja prethodno poznatih atributa. Kod velikih baza podataka pretraživanje može biti vremenski zahtevan postupak čak i na najsavremenijim računarima. Metode pretraživanja: Sekvencijalna metoda (Sequental Access Method) zahteva da se pročitaju svi slogovi jedne tabele. Metoda je neefikasna, ali jedino moguća da bi bili sigurni u tačnost dobijenog odgovora. Direktna metoda (Direct Access Method) zahteva da podaci budu indeksirani po određenom atributu (atributima) i u tom slučaju je moguće direktno pristupiti podatku bez pretraživanja čitave tabele.

49 INDEKS (INDEKSNA TABELA) je objekat šeme, definisan nad jednim ili više atributa neke tabele radi bržeg pristupa. Indeks je tabela koja sadrži po jednu vrstu za svaku različitu vrednost indeksirane kolone i pamti se fizička adresa slogova u osnovnoj tabeli koji imaju tu vrednost indeksirane kolone. Podaci u indeksu se čuvaju u obliku jedne strukture podataka, nalik izokrenutom drvetu, tzv. balansiranog binarnog stabla. Balansirano binarno stablo je takva struktura podataka gde svaki čvor- roditelj ukazuje na dva podstabla: levo gde se nalaze čvorovi koji imaju vrednost manju od čvora roditelja, i desno gde se nalaze čvorovi koji imaju vrednost veću od čvora roditelja. Jedinstveni indeks se može kreirati nad kandidatima za primarni ključ. Dakle, kreiranje jedinstvenog indeksa nad atributom sprečava unošenje dupliranih vrednosti u kolonu. SQL Server automatski kreira indeks nad primarnim ključem i nad atributom nad kojim je opstavljeno ogrančenje jedinstvenosti (UNIQUE). U indeksima koji nisu primarni klučevi dozvoljene su i NUUL vrednosti.

50 Sintaksa naredbe CREATE INDEX za kreiranje indeksa:
CREATE [UNIQUE] INDEX <ime_indeksa> ON <ime_tabele> (<ime_atributa> [ASC | DESC] {, <ime_atributa> [ASC | DESC] }) Primer: Sledeća naredba kreira jedinstveni indeks nad atributom ime_od u tabeli ODELJENJE: CREATE UNIQUE INDEX ind_ime_od ON ODELJENJE (ime_od) Indeks je kreiran prema rastućem redosledu vrednosti u koloni ime_od, tj. u abecednom poretku. Rastući poredak (opcija ASC) je podrazumevan, a opadajući (opcija DESC) se mora naglasiti.

51 PRAVILA ZA INDEKSIRANJE
Indekse nije moguće praviti nad atributima tipa bit-map, tekst ili slika. Nije dozvoljeno postavljati indekse nad velikim kolonama tipa CHAR, VARCHAR, BINARY i sl. Kandidati za indeks su atributi po kojima se najčešće vrši pretraživanje, grupisanje, sortiranje i selekcija, a to su: spoljni kljucevi, atributi koji učestvuju u klauzulama GROUP BY i ORDER BY. Kada se kreira indeks nad više atributa treba ići od atributa sa najvećim brojem mogućih vrednosti do atributa sa najmanjim brojem mogućih vrednosti, jer to obezbeđuje najveću brzinu pretraživanja. Primer: Sledeća naredba kreira indeks nad atributima id_br# i br_od$ u tabeli RADNIK: CREATE UNIQUE INDEX ind_id_br#_br_od$ ON ODELJENJE (id_br# ASC, br_od$ DESC) Atribut id_br# je naveden prvo jer broj njegovih različitih vrednosti mnogo veći od broja različitih vrednosti atributa br_od$ .

52 Svako ažuriranje (dodavanje ili brisanje) podataka u osnovnoj tabeli zahteva ponovno indeksiranje za šta se troši računarsko vreme. Stoga se preporučuje racionalan pristup pri kreiranju indeksa: tabele sa malim brojem slogova se po pravilu ne indesiraju, za tabele sa velikim brojem slogova kreira se mali broj (do 3) indeksa indekse je bolje kreirati naknadno, nakon punjenja (a poželjno i nakon sortiranja) tabele. Dakle, indeksi ubrzavaju pristup slogovima tabele ali usporavaju naredbe za ažuriranje (INSERT, UPDATE i DELETE).

53 Sintaksa naredbe DROP INDEX za izbacivanje indeksa:
DROP INDEX <ime_indeksa> ON <ime_tabele> Primer: Sledeća naredba uklanja indeks ind_ime_od kreiran nad atributom ime_od : DROP INDEX ind_ime_od ON RADNIK

54 Neka je sledećom naredbom kreiran indeks nad atributom prezime:
Primer: Neka je tabela RADNIK kreirana sledećom naredbom i popunjena na sledeći način: CREATE TABLE RADNIK ( id_br# INT PRIMARY KEY CONSTRAINT id_br#_provera CHECK (id_br#>=1 AND id_br#<=99999), ime CHAR(15) NOT NULL, prezime CHAR(20) NOT NULL, br_od$ TINYINT REFERENCES ODELJENJE(br_od#) ) Neka je sledećom naredbom kreiran indeks nad atributom prezime: CREATE INDEX ind_prezime ON RADNIK (prezime ASC) RADNIK id_br# ime prezime br_od$ 1 Marko Marković 2 Petar Petrović 4 Mira 3 5 Zoran Ilić

55 ind_prezime Indeksa tabela ima oblik:
Prezimena u indeksnoj tabeli su složena po abecedi (ASC poredak). Indeks je redni broj sloga koji ima datu vrednost u indekiranoj koloni osnovne tabele. Nalaženje radnika sa zadatim prezimenom je olakšano jer znamo redne brojeve vrsta u kojima se nalaze podaci o njemu. ind_prezime index prezime 5 Ilić 1 Marković 4 2 Petrović

56 Naredbe za rad sa pogledima (View) biće razmatrane u posebnoj nastavnoj temi koja je njima posvećena!


Download ppt "BAZA PODATAKA (Database) je skup međusobno povezanih podataka koji se čuvaju zajedno, tokom dužeg vremenskog perioda, i među kojima ima samo onoliko ponavljanja."

Similar presentations


Ads by Google