Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Tworzenietabelidefiniowanieintegralnościdanych
29
możemyużyćunikatowegofiltrowanegoindeksu,któryuwzględni(odfiltruje)tylko
wartościnie-NULL.Dlaprzykładuzałóżmy
,żekolumnassnzezwalanaNULLichcemy
utworzyćtakiindekszamiastograniczeniaunikatowości.Możemywtymceluużyć
następującegokodu:
CREATEUNIQUEINDEXidx_ssn_notnull
ONdboiEmployees(ssn)
WHEREssnISNOTNULL;
Indeksjestzdefiniowanyjakounikatowy
,zaśfiltrwykluczazniegoznacznikiNULL,
zatemduplikującesięznacznikiNULLbędądozwolone,alewartościfaktyczne(nie-
-NULL)niemogąbyćpowielane.
Ograniczeniakluczaobcego
Kluczobcywymuszaintegralnośćreferencyjną.Ograniczenietojestzdefiniowanedla
jednegolubwieluatrybutówzapomocąkonstrukcjinazywanejtabeląodwołującąsię
(referencing)iwskazujeatrybutykluczakandydującego(kluczgłównylubograniczenie
unikatowe)wczymś,conazywanejesttabeląodwołania(referenced).Zwróćmyuwagę,
żeobietabelemogąbyćjednąisamątabelą.Celemkluczaobcegojestogranicze-
niewartościwkolumnachkluczaobcegodotych,którejużistniejąwkolumnach
odwołania.
PoniższykodtworzytabelęnazwanąOrderswrazzkluczemgłównymzdefiniowa-
nymwoparciuokolumnęorderid.
DROPTABLEIFEXISTSdboiOrders;
CREATETABLEdboiOrders
(
orderid
INT
NOTNULL,
empid
INT
NOTNULL,
custid
VARCHAR(10)NOTNULL,
orderts
DATETIME2
NOTNULL,
qty
INT
NOTNULL,
CONSTRAINTPK_Orders
PRIMARYKEY(orderid)
);
Załóżmy
,żechcemywymusićregułęintegralności,któraograniczawartościobsłu-
giwaneprzezkolumnęempidtabeliOrdersdowartości,któreistniejąwkolumnie
empidwtabeliEmployees.Zadanietomożemyosiągnąć,definiującograniczenieklucza
obcegodlakolumnyempidtabeliOrders,wskazująckolumnęempidtabeliEmployees,
jakwponiższymprzykładzie:
ALTERTABLEdboiOrders
ADDCONSTRAINTFK_Orders_Employees
FOREIGNKEY(empid)
REFERENCESdboiEmployees(empid);