Ograničenja

Pomoću ograničenja se kontrolišu tipovi podataka koje korisnik može da unese u tabelu. Postoji sedam osnovnih kategorija ograničenja:

  • ograničenja primarnog ključa
  • ograničenja stranog ključa
  • unapred definisana ograničenja
  • ograničenja kojim se ne dozvoljava zapisivanje vrednosti Null
  • ograničenja provere
  • pravila 
  • ograničenja jedinstvenosti

 

Ograničenja primarnog ključa

Primarni ključ je kolona ili skup kolona pomoću kojih se jedinstveno identifikuje red tabele. Iako primarni ključ možete da definišete nad više polja, svaka tabela može imati samo jedan primarni ključ.

Svaka tabela baze podataka treba da ima primarni ključ. Osim toga, najbolje bi bilo da primarni ključ bude:

  • Kratak (što manje mogućeg polja i da tip podataka bude što manji)
  • Optimalan primarni ključ se sastoji od jednog polja tipa podataka int.
  • Stabilan (podaci u polju nikada ne menjaju)
  • Jednostavan (podatak terba da se lako pamti)

 

Definisanje primarnog ključa

U tabeli se na sledeći način definiše primarni kjuč:

  • Pomoću sivih selektora na levoj strani Table Designera odaberite polja koja čine primarni ključ slika 5.12.1.
  • Na paleti alatki kliknite Set Primary Key. Kolone će biti označene ključem  slika 5.12.1.

 

Napomena: Ako se Primary key sastoji od dve kolone iz tabele, neophodno je selektovati obe kolone, i tek onda klikniti na Set Primary Key.

Slika 5.12.1 - Kreiranje primarnog ključa

 

Ograničenja stranog ključa

Strani ključ se sastoji od kolone ili skupa kolona koje učestvuju u zavisnosti sa primarnim ključem tabele. Primarni kjluč se nalazi „jedan“ zavisnosti, dok se strani ključ nalazi na strani „više“ zavisnosti. Tabela može imati samo jedan primarni kluč, ali zato može imati više stranih ključeva. Strani ključ se odnosi na različite primarne ključeve drugih tabela. SQL Server traži vrednost stranog ključa u primarnom ključu tabele kako bi u tabelu dozvolio unošenje samo validnih podataka.

Primer kreiranja stranog ključa:

CREATE TABLE NazivSTRANOG_KLJUCA
(
  ProductID     int IDENTITY NOT NULL
         PRIMARY KEY,
  ProductCategoryID   int NOT NULL
  FOREIGN KEY REFERENCES SalesLT.ProductCategory(ProductCategoryID),
  ProduktDate  smalldatetime NOT NULL,
  ProduktName nvarchar(50) NOT NULL
)

 

Naredba za informacije o ograničenjima:

exec sp_helpconstraint NazivSTRANOG_KLJUCA

 

Unapred definisana ograničenja

Unapred definisana ograničenja su vrednosti koje SQL Server automatski upisuje u neka polja tabele. Unapred definisana vrednost može biti konstanta, vrednost Null ili funkcija. Sva polja, osim polja identiteta i polja sa oznakom vremena, mogu sadržati unapred definisane vrednosti, svaka kolona može imati jedno unapred definisano ograničenje. Unapred definisano ograničenje zadaje pomoću atributa polja slika 5.12.2.

Primeri: Izraz getdate(), Null, 6, ’ok’

 

Slika 5.12.2. - Unapred definisana ograničenje

 

Ograničenje kojim se ne dozvoljava vrednost Null

U nekim situacijama ćete od korisnika zahtevati da u polje unese podatak. Ograničenje Not Null vam omogućava da zahtevate unošenje podataka. Da biste mogli da zadate ograničenje Not Null, morate ukloniti znak potvrde iz polja Allow Nulls slika 5.12.3.

 

Slika 5.12.3. - Tip polja imaju Null vrednost

 

Ograničenja provere

Ograničenja provere limitiraju opseg vrednosti koje korisnik može da unese u kolonu. Za kolonu možete da zadate koliko god želite ovakvih ograničenja. SQL Server proverava ograničenja u redosledu u kojem ste ih zadali. Da biste zadali ograničenja ovakvog tipa, treba da uradite sledeće:

  1. Na paleti alatki kliknite Manage Check Constraints. Prikazaće se okvir za dijalog Check Constraints (slika 5.12.4), dijalog za zadavanje ograničenja.
  2. Da biste zadali ograničenje, kliknite Add.
  3. Zadajte ime ograničenja i izraz kojim definišete ograničenje.
  4. Ukoliko je neophodno, zadajte druge opcije. Konačan okvir za dijalog izgleda kao okvir za dijalog koji se vidi na slici.

 

Slika 5.12.4 - Dijalog za zadavanje ograničenja

 

Kolone identiteta

Kolone identiteta u tabeli obezbeđuju vrednost koja se automatski uvećava. Ovakvu kolonu koristite kao polje primarnog ključa u kojoj ne postoji kratak, stabilan i jednostavan prirodan primarni ključ. Kolone identiteta su najčešće tipa podatak int. Pomoću atributa polja kolonu označavate kao kolonu identiteta, za kolonu možete zadati početnu vrednost i način uvećavanja vrednosti. Početna vrednost (Identity Seed) je vrednost koja se prva upisuje u polje. Način uvećavanja vrednosti (identity increment) je vrednost koja se automatski dodaje vrednosti koja se uvećava. Na primer, polje identiteta za koje je zadata početna vrednost 100, a vrednost uvećavanja 5, ima vrednosti 100, 105, 110 itd.

 

Korišćenje kolona čije vrednosti se izračunavaju

Kolona čije se vrednosti izračunavaju je kolona koja se zasniva na podacima drugih kolona. SQL Server automatski ažurira kolonu čije vrednosti se izračunavaju kada se ažuriraju kolone na osnovu čijih podataka se izračunava vrednost kolone.


Primer:

Price * Quantity, (Price * Quantity) * (1-Discount),
FirstName ’ ’+Lastname ...

 

Pravila

  • Ograničenja tipa Check se odnose samo na tabelu za koju ste ih zadali. Pravila se odnose na više tabela.
  • Ograničenja jedinstvenosti.
  • Ograničenja jedinstvenosti zahtevaju da svaki podatak u koloni mora biti jedinstven (da se ne ponavlja). Za svaku tabelu možete da definišete najviše 249 ovakvih ograničenja. Ograničenja jedinstvenosti zadajete tako što pravite jedinstvene indekse.

 

Koriščenje tipova podataka koje definišete

Tipovi podataka koje definišete vam omogućava da preradite tipove podataka koji postoje u SQL Server-u. Tipovi podataka koje definišete su kombinacija tipa podataka, veličine, Null ograničenja, unapred definisane vrednosti i pravila. Pošto definišete tip podataka, možete ga koristiti u svakoj tabeli koju budete pravili. Tip podataka se definiše na sledeći način:

  • Otvorite čvor Programmability baze podataka.
  • Otvorite podčvor Types čvor Programmability.
  • Desnim tasterom miša kliknite čvor User-Defined Data Types i odaberite New User-Defined Data Type. Prikazaće se okvir za dijalog New User-Defined Data Type slika 5.12.5.
  • Unesite potrebne informacije, kao što su ime, tip podataka, unapred definisanu vrednost i pravilo koje će se koristiti za tip podataka koji definiišete i potom kliknite OK.

Slika 5.12.5 - Kreiranje User-a

 

Koriščenje definisanog tipa podataka

Tip podataka koji ste definisali ćete zadati kao tip podataka polja tako što ćete uraditi sledeće:

  • Prikažite strukturu tabele u kojoj se nalazi polje za koje želite da zadate tip  podataka.
  • Otvorite spisak Data Type polja za koje želite da zadate tip podataka slika 5.12.6.
  • Odaberite tip podataka koji ste definisali.

 

Slika 5.12.6. - Definisanje tipa podataka

 

Prilikom definisanja tipa podataka možete da zadate pravilo. Ukoliko prilikom definisanja tipa podataka zadate pravilo, onda ga lako možete primeniti na polja za koja taj tip podataka zadajete. Prvo morate napraviti pravilo. Pravilo zatim birate iz spiska Rule koji se nalazi u okviru za dijalog User-Defined Data Type Properties.

 

Pravljenje i menjanje indeksa

Indeksi se koriste radi poboljšavanja performansi pretraživanja polja. Iako je bolje napraviti previše indeksa, nego premalo, ipak treba da znate da indeksi imaju nedostatke. Indeksi ubrzavaju pretraživanje, sortiranje i grupisanje podataka. Nedostatak indeksa jeste to što zauzimaju prostor na hard disku i usporavaju menjanje, dodavanje i uklanjanje podataka. Iako su u većini slučajeva prednosti indeksa takve da se nedostaci mogu zanemariti, ipak ne treba da pravite indekse za svako polje svake tabele. Indekse pravite za polja ili kombinavije polja po kojima će korisnik obavljati pretraživanje, sortiranje ili grupisanje podataka. Nemojte praviti indekse za kolone u kojima se podaci često ponavljaju.

Opšte pravilo je da indekse pravite za polja koja se redovno koriste prilikom pretraživanja i sortiranja.  

Da biste napravili ili izmenili indeks, treba da uradite sledeće:

    1. Izmenite strukturu tabele.
    2. Prikažite spisak tabela baze podataka za koje želite da napravite indeks.
    3. Prikažite opcije tabele za koju želite da napravite indeks.
    4. Desnim tasterom miša kliknite Indexes i odaberite New Index.
    5. Prikazaće se okvir za dijalog New Index slika 5.12.7.



      Slika 5.12.7 - Definisanje parametara

 

  1. Unesite ime indeksa.
  2. Za indeks koji pravite, odaberite tip. Odaberite Clustered kako biste napravili indeks koji je grupisan. Za tabelu možete da napravite samo jedan indeks ovakvog tipa. Podaci se fizički zapisuju na osnovu redosleda u grupisanom indeksu.
  3. Kliknite Add. Prikazaće se okvir za dijalog Select Columns slika 5.12.8.



    Slika 5.12.8 - selektovanje kolona
     
  4. Pomoću miša selektujte polje ili polja nad kojima pravite indeks.
  5. Kliknite OK kako biste zatvorili okvir za dijalog.
  6. Za svako polje nad kojim pravite indeks zadajte da li se sadržaj polja sortira u rastućem ili opadajućem redosledu.
  7. Ukoliko želite, kliknite Create Unique kako biste indeks definisali kao jedinstveno ograničenje.
  8. Kada završite okvir za dijalog New Index, kliknite OK kako biste zatvorlili okvir za ddijalog i napravili indeks.


Važno je da se za sve tabele zadaju sva neophodna svojstva i da potom između njih uspostave zavisnosti.

Dodaj komentar Sviđa mi se - (0) Ne sviđa mi se - (0)    

  • Ograničenja i kreiranje indeksa za optimizaciju izvršavanja upita 1
  • Ograničenja i kreiranje indeksa za optimizaciju izvršavanja upita 2
  • Ograničenja i kreiranje indeksa za optimizaciju izvršavanja upita 3