Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
30
Rozdział1:PodstawyzapytańiprogramowaniaT-SQL
Analogicznie,jeślichcemyograniczyćwartościobsługiwaneprzezkolumnęmgrid
wtabeliEmployeesdowartości,któreistniejąwkolumnieempidtejsamejtabeli,moż-
natozrealizowaćpoprzezdodanieponiższegokluczaobcego:
ALTERTABLEdboiEmployees
ADDCONSTRAINTFK_Employees_Employees
FOREIGNKEY(mgrid)
REFERENCESdboiEmployees(empid);
Zwróćmyuwagę,żeznacznikiNULLdopuszczonewkolumnachkluczaobcego
(mgridwostatnimprzykładzie),nawetjeślinieistniejąznacznikiNULLwkolumnach
kluczakandydującego,doktórychnastępujeodwołanie.
Poprzedniedwaprzykładypodstawowymidefinicjamikluczyobcych,które
wymuszająreferencyjnedziałanienazwanenoaction(brakakcji).Brakdziałaniaozna-
cza,żepróbyusunięciawierszyztabeliodwołanialubzaktualizowaniaatrybutów
kluczakandydującegoodwołaniazostanąodrzucone,jeślipowiązanewierszeistnieją
wtabeliodwołującejsię.Naprzykład,jeślispróbujemyusunąćwierszpracownika
ztabeliEmployees,aistniejepowiązanezamówieniewtabeliOrders,systemRDBMS
odrzucitakąpróbęiwygenerujebłąd.
Możemyzdefiniowaćkluczobcyzdziałaniem,którebędziekompensowaćtakie
próby(usunięciawierszaztabeliodwołanialubzaktualizowanieatrybutówklucza
kandydującegoodwołania,jeślipowiązanewierszeistniejąwtabeliodwołującejsię).
MożemyzdefiniowaćopcjęONDELETEiONUPDATEzapomocąakcji,takichjak
CASCADE,SETDEFAULTiSETNULL,jakoczęśćdefinicjikluczaobcego.Opcja
CASCADEoznacza,żeoperacja(usuwanielubaktualizacja)będąmiałycharakter
kaskadowydlapowiązanychwierszy
.Naprzykład,wyrażenieONDELETECASCA-
DEoznacza,żepodczasusuwaniawierszaztabeliodwołaniasystemRDBMSusunie
powiązanewierszeztabeliodwołującejsię.OpcjeSETDEFAULTiSETNULLozna-
czają,żedziałaniebędzieodpowiednioustawiaćatrybutykluczaobcegopowiązanych
wierszyzapomocądomyślnychwartościkolumnylubzapomocąwartościNULL.
Zwróćmyuwagę,żeniezależnieodwyboruakcjitabelaodwołującasiębędziemiała
„osierocone”wierszetylkowprzypadkuwyjątkuzeznacznikamiNULL,októrychbyła
mowawcześniej.Rodzicebezdziecizawszedozwoleni.
OgraniczeniaCheck
OgraniczenieCheck(sprawdzenie)pozwalazdefiniowaćpredykat,takbydowprowa-
dzeniawierszawtabelilubdozmodyfikowaniawierszawymaganebyłojegospełnie-
nie.NaprzykładponiższeograniczenieCheckzapewnia,żekolumnasalarywtabeli
Employeesbędzieobsługiwaćjedyniewartościdodatnie.
ALTERTABLEdboiEmployees
ADDCONSTRAINTCHK_Employees_salary
CHECK(salary>0i00);