ceturtdiena, 2011. gada 20. janvāris

Ierobežojumi (Constraints)

Aprakstīti ierobežojumi (constraints) SQL Server datu bāzēs- primārās atslēgas, ārējās atslēgas, unikalitātes, pārbaudes (check), noklusētās vērtības, Null vērtības. Ierobežojumi tiek izmantoti datu integritātes nodrošināšanai.

Datu bāzes jēdzieni glīti aprakstīti šeit. Šajā rakstā visa uzmanība ierobežojumiem.

Primārā atslēga (PRIMARY KEY Constraints)
Svarīgākais: Nodrošina ieraksta unikālu identifikāciju tabulā.
Vairāk:
Primārā atslēga tiek veidota uz vienas vai vairākām kolonnām. Kolonnas nedrīkst atļaut Null vērtības. Primārā atslēga vienmēr unikāli identificē tieši vienu ierakstu, tātad- primārās atslēgas kolonnā(s) katrā rindā vērtības ir unikālas. Tas tiek panākts veidojot indeksu ar unikālām vērtībām.
Īpatnības:
* Lai arī vienai tabulai var būt vairāki indeksi ar unikālām vērtībām (unique indexes), katrai tabulai var būt tikai viena primārā atslēga.
* Veidojot primāro atslēgu uz tabulas bez klasterētā indeksa, pēc noklusējuma tiek izveidots arī klasterētais indekss.
* Kamēr kolonna ir daļa no primārās atslēgas, tai nevar mainīt garumu,piemēram, mainīt char(5) uz char(6). Lai to izdarītu, no sākuma jādzēš primārā atslēga, tad jāveic izmaiņas un tad var atkal izveidot primāro atslēgu.
* Ja primārā atslēga tiek izmantota citas tabulas ārējā atslēgā, tad primāro atslēgu nevar dzēst.

Ārējā atslēga (FOREIGN KEY Constraints)
Svarīgākais: Nodrošina kolonnas(u) vērtību kopas ierobežošanu ar citas tabulas kolonnas(u) vērtību kopu. Ārējās atslēgas izveide nenozīmē automātisku indeksa izveidi.
Vairāk:
Ārējā atslēga tiek veidota uz vienas vai vairākām kolonām. To veidojot jānorāda vērtību kopas ierobežojošās tabulas primārā atslēga vai unikāla atslēga. Ārējā atslēga var tikt veidota arī uz tās pašas tabulas primāro atslēgu vai unikālo atslēgu, piemēram, gadījumos, kad tabulā tiek glabāti hierarhiski dati. Vērtību kopas ierobežojošai tabulai jāatrodas tajā pašā datu bāzē.
Īpatnības:
* Ārējā atslēga iespaido tabulu, uz kuru tā atsaucas. Tātad:
- Insert komanda detaļu tabulā (kurā ir ārējā atslēga) nozīmē, ka tiks meklēta vērtība unikālajā indeksā galvas (primārās atslēgas/unikālas atslēgas indekss vērtības ierobežotajā tabulā).
- Update komanda galvas tabulas attiecīgajām kolonnām nozīmē, ka jāatrod, vai ir atbilstoša vērtība detaļu tabulā. No tā seko, ka ja detaļu tabulai nav indeksa uz ārējās atslēgas kolonnu, tad tas var izsaukt visas tabulas pārlasīšanu. Labā ziņa gan ir tāda, ka parasti primārās atslēgas vērtības nemaina vai maina reti.
- Delete komanda galvas tabulas attiecīgajām kolonnām nozīmē, ka jāatrod, vai ir atbilstoša vērtība detaļu tabulā (potenciāli- tabulas pārlasīšana).
* Veidojot ārējo atslēgu uz attiecīgās kolonnas(ām) netiek veidots indekss. Iespējams, ka indeksu tomēr vajadzētu izveidot, ja šī kolonna tiek izmantota vaicājumos sasaistot abu kolonnu datus vai gadījumos, kad atslēgas vērtības tiek mainītas.
* Ar ārējās atslēgas palīdzību tiek nodrošināts ne tikai pieļaujamo vērtību apgabals, bet arī nodrošināts, ka mainoties datiem, tiek uzturēta datu integritāte (On Delete, On Update, skatīt MSDN Create Table). Piemēram, dzēšot "galvas" tabulas datus, tiek dzēsti arī "detaļas" tabulas dati, tas arī skaitās ātrākais un vienkāršākais veids.
* Ja ārējā atslēga veidota uz vairākām kolonnām, tad lai nodrošinātu datu integritāti visām kolonām jābūt "Not Null". Pretējā gadījumā- ja kaut viena no kolonnām būs ar Null vērtību, tad datu integritātes pārbaude tiks izlaista.
* Ārējo atslēgu var veidot izmantojot komandu "With NoCheck". Tādā veidā var panākt, ka netiek pārbaudīts, vai tabulā jau ievietotie dati atbilst veidojamajam ierobežojumam.
* Jau eksistējošu ierobežojumu dzēšanai un izveidei no jauna, var izmantot skripta ģenerēšanu: Ierobežojumu dzēšanas un izveides skripta ģenerācija

Unikāla atslēga (UNIQUE Constraints) 
Svarīgākais: Nodrošina, ka kolonnā(s) ir unikālas vērtības.
Vairāk:
Unikālā Atslēga var tikt veidota uz vienas vai vairākām kolonnām. Atšķirībā no primārās atslēgas ierobežojuma, unikālās atslēgas kolonnas var būt ar vērtību Null. Tomēr, veidojot unikālās atslēgas ierobežojumu uz vienas kolonnas, attiecīgajā kolonnā var glabāties ne vairāk kā viena rinda, kuras vērtība ir Null. Vienai tabulai var būt daudzas unikālas atslēags, bet tikai viena- primārā atslēga.
Piemērs: Indeks ar unikālām vērtībām, IGNORE_DUP_KEY  
Unikāli indeksi, ignorējot Null vērtības
Dažas "īpatnības":
* Unikāla atslēga ir ļoti līdzīga primārai atslēgai, bet mazāk ierobežojoša.
* Unikāla atslēga ir indekss ar unikālām vērtībām- tātad, fiziska struktūra.

Pārbaudes ierobežojums (CHECK Constraints) 
Svarīgākais: Vienai vai vairākām kolonnām jāatbilst noteiktam kritērijam.
Vairāk:
Pārbaudes ierobežojums tiek izmantots datus ievietojot tabulā. Tas var tikt veidots gan uz vienas, gan vairākām kolonnām. Pārbaudes ierobežojumiem var tikt izmantotas arī funkcijas. Ierobežojums tiek izskaitļots kā loģiska izteiksme (jā/nē/nezināms). Gadījumā, ja izskaitļošanas rezultātā tiek iegūts rezultāts "jā" vai "nezināms", tad tiek uzskatīts, ka datus var ievietot.
Īpatnības:
* Pārbaude izmantojot funkciju, var pārbaudīt datus arī no citas datu bāzes. Jāņem vērā, ka izpildes plānā SSMS, vai arī izmantojot statistics IO funkcijas patērētie resursi netiks uzrādīti. Jāizmanto SQL Server Profiler.
* Līdzīgi kā ārējai atslēgai, pārbaudes ierobežojumu var uzlikt nepārbaudot esošos datus.

Noklusētās vērtības ierobežojums (DEFAULT Definitions) 
Svarīgākais: Nodrošina kolonnu ar noklusēto vērtību.
Vairāk:
Noklusētā vērtība tiek izmantota gadījumos, kad attiecīgā kolonna nav daļa no Insert komandas un gadījumos, kad attiecīgā kolonnā ievieto noklusētās vērtības izmantojot Default atslēgvārdu. Attiecīgajā kolonnā ievietojot Null vērtību, tā netiks aizstāta ar noklusēto vērtību.
Īpatnības:
* Noklusētās vērtības ierobežojums tiek veidots uz vienas kolonas un tas nevar izmantot citus ievietojamās rindas datus noklusētās vērtības iegūšanai. Izmantojot funkciju var iegūt attiecīgās tabulas citu rindu datus, tomēr tas nebūtu tas labākais, kā izmantot noklusēto vērtību.
* Tabulai pievienojot kolonnu, kurā nedrīkst būt Null vērtības un norādot noklusēto vērtību, attiecīgajā kolonnā visos jau ievietotajos datos tiek ievietota kolonnas noklusētā vērtība.
* Kolonnai nevar būt vairāk kā viena noklusētā vērtība. Tomēr to var mainīt, mainoties prasībām. Mainot noklusēto vērtību, jau ievietotie dati netiek mainīti.
* Līdzīgi ka pārbaudes ierobežojums, arī šim var izmantot funkciju noklusētās vērtības iegūšanai. Tāpat līdzīgas ir īpatnības vērojot izpildes plānu un statistiku

Null vērtības ierobežojums (Allowing Null Values) 
Svarīgākais: Nodrošina, ka kolonnā nevar būt Null vērtības.
Vairāk:
Tiek ieteikts kolonnas, kurās var būt Null vērtība pēc iespējas retāk. Kolonnas kurās var būt Null vērtība nozīmē arī papildus apstrādi. Tāpat arī vaicājumus veidojot, Null vērtību apstrāde prasa papildus piepūli. Piemēram, ja ir bit kolonna, kurā glabājas vērtības "Pasūtījums izpildīts", to veidot ar noklusēto vērtību 0.
Īpatnības:
* Tabulai nevar pievienot Not Null kolonnu, ja tabulā jau eksistē dati un nav norādīta noklusētā vērtība.

Nav komentāru:

Ierakstīt komentāru