Ограничење референтног интегритета је такође познато као ограничење страног кључа . Спољни кључ је кључ чије су вредности изведене из примарног кључа друге табеле.
Табела из које се изводе вредности је позната као Мастер или Референтни Табела и табела у коју су вредности уметнуте на одговарајући начин су познате као Дете или референца Табела, Другим речима, можемо рећи да табела која садржи страни кључ се зове дечији сто , и табела која садржи Примарни кључ/кандидат кључ се зове референтна или надређена табела . Када говоримо о релационом моделу базе података, кључ кандидата се може дефинисати као скуп атрибута који може имати нула или више атрибута.
Синтакса главне табеле или референциране табеле је:
питхон сачувати јсон у датотеку
CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) );
Овде се колона Ролл понаша као Примарни кључ, што ће помоћи у извођењу вредности страног кључа у подређеној табели.
Синтакса подређене табеле или референтне табеле је:
CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) );
У горњој табели, колона Ролл се понаша као Страни кључ, чије су вредности изведене коришћењем Ролл вредности примарног кључа из главне табеле.
Ограничење страног кључа ИЛИ ограничење референтног интегритета.
Постоје два ограничења референтног интегритета:
Уметни ограничење: Вредност се не може уметнути у ДЕТЕТА табелу ако вредност не лежи у МАСТЕР табели
Избриши ограничење: Вредност не може да се избрише из МАСТЕР табеле ако вредност лежи у ЦХИЛД табели
Претпоставимо да желите да уметнете Ролл = 05 са другим вредностима колона у табели СУБЈЕЦТ, тада ћете одмах видети грешку ' Ограничење страног кључа је прекршено ' тј. при покретању команде за уметање као:
Убаци у вредности СУБЈЕЦТ(5, 786, ОС); СКЛ неће забављати због ограничења уметања (Пошто не можете да убаците вредност у подређену табелу ако вредност не лежи у главној табели, пошто Ролл = 5 није присутно у главној табели, стога неће бити дозвољено да унесе Ролл = 5 у подређену табелу)
вебдривер
Слично томе, ако желите да избришете Ролл = 4 из СТУДЕНТ Табле, тада ћете одмах видети грешку ' Ограничење страног кључа је прекршено ' тј. при покретању команде за брисање као:
Избриши из СТУДЕНТ где Ролл = 4; СКЛ неће забављати због ограничења брисања. ( Пошто не можете да избришете вредност из главне табеле ако вредност лежи у подређеној табели, пошто је Ролл = 5 присутно у подређеној табели, стога неће бити дозвољено брисање Ролл = 5 из матичне табеле, допушта ако некако смо успели да избришемо Ролл = 5, тада ће Ролл = 5 бити доступан у подређеној табели што ће на крају прекршити ограничење уметања.
ОН ДЕЛЕТЕ ЦАСЦАДЕ.
Према ограничењу брисања: вредност се не може избрисати из МАСТЕР табеле ако вредност лежи у ДЕТЕТА табели. Следеће питање долази да ли можемо да избришемо вредност из главне табеле ако вредност лежи у подређеној табели без кршења ограничења брисања? тј. У тренутку када избришемо вредност из главне табеле, вредност која јој одговара такође треба да буде избрисана из подређене табеле.
конверзија јава типова и кастинг
Одговор на горње питање је ДА, можемо да избришемо вредност из главне табеле ако вредност лежи у подређеној табели без кршења ограничења брисања, морамо да урадимо мале измене док креирамо подређену табелу, тј. на каскади брисања .
СИНТАКСА ТАБЕЛЕ
CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) );
У горњој синтакси, одмах након кључне речи референце (која се користи за креирање страног кључа), додали смо каскаду брисања, додавањем таквог сада можемо избрисати вредност из главне табеле ако вредност лежи у подређеној табели без кршења брисања ограничење. Сада ако желите да избришете Ролл = 5 из главне табеле иако Ролл = 5 лежи у подређеној табели, то је могуће јер у тренутку када дате команду за брисање Ролл = 5 из главне табеле, ред има Ролл = 5 из подређене табеле ће се такође избрисати.
Приказане су горње две табеле СТУДЕНТ и СУБЈЕЦТ које имају по четири вредности, сада претпоставимо да желите да избришете Ролл = 4 из СТУДЕНТ( Мастер ) табеле писањем СКЛ команде: избрисати из СТУДЕНТ где Ролл = 4;
У тренутку када СКЛ изврши горњу команду, ред са Ролл = 4 из табеле СУБЈЕЦТ( Цхилд ) ће такође бити обрисан. УЧЕНИК и ПРЕДМЕТ табела ће изгледати овако:
Из горње две табеле СТУДЕНТ и СУБЈЕЦТ, можете видети да се у обе табеле Ролл = 4 брише одједном без кршења ограничења брисања.
Понекад се у интервјуима поставља веома важно питање: Може ли страни кључ имати НУЛЛ вредности?
Одговор на горње питање је ДА, може имати НУЛЛ вредности, док примарни кључ не може бити НУЛЛ ни по коју цену. Да бисмо практично разумели горње питање, хајде да разумемо испод концепт брисања нуле.
ОН ДЕЛЕТЕ НУЛЛ.
Према ограничењу брисања: вредност се не може избрисати из МАСТЕР табеле ако вредност лежи у ДЕТЕТА табели. Следеће питање долази да ли можемо да избришемо вредност из главне табеле ако вредност лежи у подређеној табели без кршења ограничења брисања? тј. У тренутку када избришемо вредност из главне табеле, вредност која јој одговара такође треба да буде избрисана из подређене табеле или се може заменити вредношћу НУЛЛ.
Одговор на горње питање је ДА, можемо обрисати вредност из главне табеле ако вредност лежи у подређеној табели без кршења ограничења брисања уметањем НУЛЛ у страни кључ, морамо да урадимо благу модификацију док креирамо подређену табелу, тј. додавањем на брисање нул .
скл изаберите као
СИНТАКСА ТАБЕЛЕ:
CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) );
У горњој синтакси, одмах након кључне речи референце (која се користи за креирање страног кључа), додали смо на делете нулл, додавањем таквог сада, можемо избрисати вредност из главне табеле ако вредност лежи у подређеној табели без кршења брисања ограничење. Сада, ако желите да избришете Ролл = 4 из главне табеле иако Ролл = 4 лежи у подређеној табели, то је могуће јер у тренутку када дате команду за брисање Ролл = 4 из главне табеле, ред има Ролл = 4 из подређене табеле биће замењен НУЛЛ вредношћу.
Приказане су горње две табеле СТУДЕНТ и СУБЈЕЦТ које имају по четири вредности, сада претпоставимо да желите да избришете Ролл = 4 из СТУДЕНТ( Мастер ) табеле писањем СКЛ команде: избрисати из СТУДЕНТ где Ролл = 4;
У тренутку када СКЛ изврши горњу команду, ред са Ролл = 4 из табеле СУБЈЕЦТ( Цхилд ) ће бити замењен вредношћу НУЛЛ, резултат УЧЕНИК и ПРЕДМЕТ табела ће изгледати овако:
Из горње две табеле СТУДЕНТ и СУБЈЕЦТ, можете видети да се у табели СТУДЕНТ Ролл = 4 брише док је вредност Ролл = 4 у табели СУБЈЕЦТ замењена са НУЛЛ. Ово доказује да страни кључ може имати нулте вредности. Ако је у случају у табели СУБЈЕЦТ, колона Ролл примарни кључ заједно са страним кључем, онда у том случају не бисмо могли да направимо да страни кључ има НУЛЛ вредности.