You are on page 1of 5

148-150 Kreiranje tabela i postavljanje ograničenja nad tabelama

Ciljevi lekcije
 Naučiti osnovne SQL naredbe za kreiranje tabela, ograničenja

Podsetnik:
SQL naredba za kreiranje baze podataka je: CREATE DATABASE naziv_baze;

Kreiranje tabela i ograničenja


(Više detalja u skripti: MySQL skripta.pdf poglavlje 6.4)

Prilikom kreiranja tabele (definicija njene strukture i osobina) neophodno je navesti:


– Ime tabele, mora biti unikatno u BP
– Ime svake kolone, mora biti unikatno unutar tabele
– Tip svake kolone
– Jedno ili više ograničenja za kolone, koje ih imaju
– Jedno ili više ograničenja za svaku tabelu, ako postoje

Za kreiranje tabele koristi se SQL naredba CREATE TABLE.

Neophodno je navesti ime tabele, kao i imena atributa (kolona) i odgovarajući tip podataka za svaki
atribut.

Osnovni format CREATE TABLE dat je u nastavku:

CREATE TABLE <ime_tabele>


(<lista_deklaracija_kolona>
[,<lista_deklaracija_organičenja_tabele>]);

Za deklaraciju kolona se koristi format koji je dat u nastavku:

<ime_kolone><tip_podatka>[(<dužina>)] [<ograničenje_kolone>],

Deklaracija kolone sadrži: ime kolone, tip podatka kolone, opciono dužinu (ako je neophodna, u zavisnosti
od tipa podatka) i opciono, ograničenja za kolonu. Deklaracije kolona se razdvajaju zarezima.

Ograničenja za kolonu su opciona i mogu da sadrže specifikaciju predefinisane vrednosti i niz specifikacija
ograničenja, što je detaljnije opisano u odeljku Ograničenja kolona.

Nakon deklaracije svih kolona navode se ograničenja koja važe za celu tabelu. Specifikacije
ograničenja za tabelu su navedena u odeljku Ograničenja tabele.

Navedena sintaksa naredbe CREATE TABLE nije kompletna. SQL standard obezbeđuje korišćenje velikog
broja dodatnih klauzula, koje korisnicima omogućavaju preciznu kontrolu procesa kreiranja tabele.
Osim toga, proizvođači RDBMS-ova prošuruju CREATE TABLE naredbu klauzulama koje su posledica
specifičnih osobina njihovih proizvoda.
Ograničenje kolone
Ograničenja (CONSTRAIT) koja možete da definišete za kolonu prilikom kreiranja tabela (ograničenje integriteta) su:

 NULL ili NOT NULL - definiše da kolona može ili ne može imatu NULL vrednosti.
 UNIQUE - definiše da kolona ima jedinstvene vrednosti (kandidati za ključeve).
 PRIMARY KEY - definiše da kolona predstavlja primarni ključ tabele (može da se primeni na samo jednu
kolonu u tabeli).
 CHECK - definiše ograničenje za proveru vrednosti kolone (koristi se kod upisa ili ažuriranja vrednosti).
 DEFAULT - definiše podrazumevanu vrednost za kolonu (kolona uzima ovu vrednost, ako vrednost kolone nije
navedena).
 REFERENCES - definiše da kolona predstavlja spoljni ključ tabele.
 AUTO INCREMENT - indikator kolone sa automatski generisanim vrednostima
 načinon organizovanja indeksa nad tom kolonom ...

Primer : Ako kolona treba da predstavlja autoinkrementirajuću vrednost celobrojnog tipa i ako ta kolona
predstavlja primarni ključ, tada se to piše:
autoid int NOT NULL AUTOINCREMENT, PRIMARY KEY(autoid)

Za vrednost kolone se mogu specificirati ograničenja NULL ili NOT NULL čime se dozvoljava ili zabranjuje
NULL vrednost kolone. Strože ograničenje je UNIQUE, koje ne dozvoljava ponavljanje vrednosti u koloni.

Za kolonu podrazumevano ograničenje je NULL vrednost. To znači da navodimo samo ograničenje NOT NULL,
ako je definisano za konkretnu kolonu.

Kod navođenja PRIMARY KEY podrazumeva se NOT NULL ograničenje za tu kolonu, tako da ga ne treba
posebno navoditi.

Uopšteno: primarni ključ - je jedno ili više polja u tabeli čija je kombinacija jedinstvena za svaki zapis.

Ako primarni ključ ima jednu kolonu (kao što je najčešće slučaj), specifikacija PRIMARY KEY se koristi kao
ograničenje kolone:

Pri kreiranju tabele u kojoj je atribut A primarni ključ, a atribut B spoljni ključ možete koristi oblik naredbe
CREATE TABLE koji je prikazan u nastavku.
CREATE TABLE <imeTabele>
(
A <tip_podatka> PRIMARY KEY,
B <tip_podatka> REFERENCES <ime_ref_tabele>(<ime_ref_kolone>),
ostali atributi
);

Uočite da kod deklaracije spoljnog ključa tabele treba navesti iza ključne reči REFERENCES ime referencirane
tabele i opciono, u maloj zagradi, ime referencirane kolone u toj tabeli. DBMS očekuje da je referencirana kolona
primarni ključ (kolona deklarisana sa PRIMARY KEY) u referenciranoj tabeli. Na taj način atribit iza koga stoji
klauzula REFERENCES definisan je kao spoljni ključ u odnosu na primarni ključ tabele čije je ime navedeno iza
klauzule REFERENCES. Redosled: spoljni ključ - REFERENCES - primarni ključ (u referenciranoj
tabeli)
Primer
SQL DDL naredba za kreiranje tabele PROJEKAT koja je preko stranog ključa Sektor vezana sa tabelom SEKTOR u kojoj je
atribut Broj primarni ključ.
CREATE TABLE PROJEKAT
(
Broj Int PRIMARY KEY,
Naziv VarChar(25) NOT NULL,
Lokacija VarChar(15) DEFAULT("Niš"),
Sektor Integer REFERENCES SEKTOR(Broj)
);

Ograničenja tabele
Za celu tabelu se mogu zadati:
– nijedno,
– jedno ili
– više ograničenja.

Za definisanje ograničenja koja važe za tabelu u celini možete koristiti:

 PRIMARY KEY - definiše koja kolona ili koje kolone čine primarni ključ tabele.
 UNIQUE - definiše koja kolona ili koje kolone imaju jedinstvene vrednosti (kandidati za ključeve) tj.
nije dozvoljeno ponavljanje istih vrednosti kombinacija, ako se ograničenje odnosi na više kolona.
 FOREIGN KEY - definiše koja kolona ili koje kolone čine spoljni ključ tabele.
 CHECK -definiše ograničenja vrednosti kolone ili kolona koje DBMS proverava kod upisa ili ažuriranja
vrednosti te ili tih kolona.

Za kreiranje tabele u kojoj je skup atributa (a,b,c) primarni ključ možete koristiti oblik CREATE
TABLE naredbe prikazan u nastavku.

CREATE TABLE < ime_tabele >


(
<atributi i njihovi tipovi podataka>,
PRIMARY KEY (a,b,c)
);
Atribute a, b i c treba deklarisati u sekciji <atributi i njihovi tipovi podataka>.

Primer
SQL DDL naredba za kreiranje tabele RADI_NA koja definiše radnike koji rade na odgovarajućim
projektima i vreme rada.
CREATE TABLE RADI_NA
(
Radnik Int NOT NULL,
Projekat Int NOT NULL,
Sati Int NOT NULL,
CONSTRAINT RadiNaPK PRIMARY KEY (Radnik, Projekat)
);

Kao što možete videti iz primera, primarni ključ mora nužno imati ograničenje stupaca NOT NULL.
Ograničenje stranog ključa
Strani ključ je skup kolona (jedna ili više kolona) iz jedne tabele (sekundarna tabela ili dete tabela) čije
vrednosti moraju da se „slažu“, odnosno da odgovaraju vrednostima primarnog ključa u nekoj drugoj tabeli (primarna
tabela ili roditelj tabela).

Definisanjem stranog klju ča se, u stvari, uspostavlja relacija između tabela.

U deklaraciji kolone ili tabele, nakon klauzule REFERENCES, mogu se navesti klauzule ON DELETE ili ON
UPDATE koje specificiraju aktivnosti u slučaju narušavanja integriteta.

ON DELETE omogućava specifikaciju aktivnosti nad torkama relacije, odnosno vrstama tabele, na koju se
referencirate u REFERENCES klauzuli u slučaju brisanja torki u tabeli u kojoj je navedeno ovo ograničenje.

ON UPDATE omogućava specifikaciju aktivnosti nad torkama referencirane tabele u slučaju ažuriranja
(promene vrednosti) podataka u tabeli gde je REFERENCES ograničenje specificirano.

U oba slučaja, iza ovih klauzula se navodi jedna od klauzula koja definiše aktivnost koja će se izvršiti nad
torkama u slučaju brisanja ili ažuriranja vrednosti torke u tabeli u kojoj je ograničenje navedeno:

 NO ACTION - nema akcije (ovo je predefinisana vrednost).


 CASCADE - kaskadno izvršenje aktivnosti brisanja (brišu se torke u tabeli na koju se referencirane)
kod ON DELETE ili aktivnosti ažuriranja (ažuriraju se vrednosti referenciranih atributa) kod ON
UPDATE.
 SET DEFAULT - promena vrednosti atributa u tabeli na koju se referencirane na predefinisanu
vrednost.
 SET NULL - promena vrednosti atributa u tabeli na koju se referencirane na NULL.

Ne zaboravite da je kod deklarisanja FOREIGN KEY ograničenja na kraju deklaracije tabele,


neophodno navesti listu referentnih atributa u okviru zagrada, tako da CREATE TABLE naredba ima sledeći
oblik:

Primer:
ПС - C# - 2019 - Креирање базе података - SQL Server Management Studio [HD 720p]
https://youtu.be/pca7X8sH3mw

Rezime:

Sva ograničenja navedena u CREATE TABLE su aktivna u svakom trenutku postojanja tabele.

SUBP će odbiti svaki pokušaj rada sa tabelom, koji je u suprotnosti sa ograničenjima, što je olakšica
za projektante i programere baza podataka jer se provere se ne moraju ugrađivati u aplikativne
programe.

Deklarativna moć naredbe CREATE TABLE je od velikog značaja, naročito kod dinamičke specifikacije
referencijalnog integriteta.
Ali, jednom kreirana tabela naredbom CREATE podložna je izmenama u svojoj strukturi, a to se postiže
naknadno korišćenjem naredbe ALTER TABLE. Na taj način se neka ograničenja mogu naknadno dodati,
kada je baza već inicijalizovana.

*Tip podataka TINYINT (Transact-SQL) je celobrojna vrednost od 0 do 255. TINYINT je najmanji celobrojni
tip podataka i koristi samo 1 bajt memorije. Primer upotrebe TINYINT-a je starost osobe, jer nijedna osoba
ne navršava 255 godina.

**Transact-SQL je Microsoft-ovo proširenje SQL-a namenjeno interakciji sa relacionim bazama podataka.


Proširuje SQL standarde uključujući proceduralno programiranje, lokalne varijable, razne funckije za obradu
stringova, datuma, matematičkih funkcija itd. Transact-SQL se koristi od strane Microsoft SQL Servera

VEŽBA

Kreirati bazu podataka preduzece, koja sadrži četiri međusobno povezane tabele. Pri kreiranju tabele za
svaki atribut mora se navesti tip podatka.
Opis baze i tabela je dat u materijalu SQL u SUBP.pdf strana 27.
Koristiti administratorski nalog.

You might also like