logo

Ограничения за референтна цялост в СУБД

Ограничението за референтна цялост е известно също като ограничение за външен ключ . Външен ключ е ключ, чиито стойности са извлечени от първичния ключ на друга таблица.

Таблицата, от която се извличат стойностите, е известна като Главен или препоръчан Таблица и таблицата, в която съответно се вмъкват стойности, е известна като Дете или препращане Таблица, С други думи, можем да кажем, че таблицата, съдържаща външен ключ се нарича детска маса , и таблицата, съдържаща Първичен ключ/кандидат ключ се нарича реферирана или родителска таблица . Когато говорим за релационния модел на базата данни, кандидат ключът може да се дефинира като набор от атрибути, които могат да имат нула или повече атрибути.

Синтаксисът на главната таблица или референтната таблица е:

оператор за остатък на python
 CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) ); 

Тук колоната Roll действа като първичен ключ, което ще помогне при извличането на стойността на външния ключ в дъщерната таблица.

Ограничение за референтна цялост

Синтаксисът на Child Table или Referencing table е:

 CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) ); 

Ограничение за референтна цялост

В горната таблица колоната Roll действа като Външен ключ, чиито стойности се извличат с помощта на Roll стойността на първичния ключ от главната таблица.

Ограничение за външен ключ ИЛИ ограничение за референтна цялост.

Има две ограничения за референтна цялост:

Вмъкване на ограничение: Стойността не може да бъде вмъкната в таблица CHILD, ако стойността не се намира в таблицата MASTER

Изтриване на ограничение: Стойността не може да бъде изтрита от таблицата MASTER, ако стойността се намира в таблицата CHILD

Да предположим, че искате да вмъкнете Roll = 05 с други стойности на колони в SUBJECT Table, тогава веднага ще видите грешка ' Ограничението за външен ключ е нарушено ' т.е. при изпълнение на команда за вмъкване като:

Вмъкване в SUBJECT values(5, 786, OS); няма да се обработва от SQL поради ограничение за вмъкване (Тъй като не можете да вмъкнете стойност в дъщерна таблица, ако стойността не се намира в главната таблица, тъй като Roll = 5 не присъства в главната таблица, следователно няма да бъде позволено да въведете Roll = 5 в дъщерната таблица)

По същия начин, ако искате да изтриете Roll = 4 от STUDENT Table, веднага ще видите грешка ' Ограничението за външен ключ е нарушено ' т.е. при изпълнение на команда за изтриване като:

Изтриване от STUDENT, където Roll = 4; няма да се обработва от SQL поради ограничение за изтриване. ( Тъй като не можете да изтриете стойността от главната таблица, ако стойността лежи в дъщерната таблица, тъй като Roll = 5 присъства в дъщерната таблица, следователно няма да бъде позволено да изтриете Roll = 5 от главната таблица, нека ако по някакъв начин успяхме да изтрием Roll = 5, след което Roll = 5 ще бъде наличен в дъщерна таблица, което в крайна сметка ще наруши ограничението за вмъкване.)

НА ИЗТРИВАНЕ НА КАСКАДА.

xd xd значение

Съгласно ограничението за изтриване: Стойността не може да бъде изтрита от таблицата MASTER, ако стойността лежи в таблицата CHILD. Следващият въпрос идва: можем ли да изтрием стойността от главната таблица, ако стойността лежи в дъщерната таблица, без да нарушаваме ограничението за изтриване? т.е. в момента, в който изтрием стойността от главната таблица, стойността, съответстваща на нея, също трябва да бъде изтрита от дъщерната таблица.

Отговорът на горния въпрос е ДА, можем да изтрием стойността от главната таблица, ако стойността лежи в дъщерната таблица, без да нарушаваме ограничението за изтриване, трябва да направим лека модификация, докато създаваме дъщерната таблица, т.е. като добавим при изтриване на каскада .

СИНТАКСИС НА ТАБЛИЦАТА

 CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) ); 

В горния синтаксис, точно след референтната ключова дума (използвана за създаване на външен ключ), добавихме каскада за изтриване, като добавим такава сега, можем да изтрием стойността от главната таблица, ако стойността лежи в дъщерната таблица, без да нарушаваме изтриването ограничение. Сега, ако искате да изтриете Roll = 5 от главната таблица, въпреки че Roll = 5 лежи в дъщерната таблица, това е възможно, защото в момента, в който дадете команда за изтриване на Roll = 5 от главната таблица, редът с Roll = 5 от дъщерната таблица също ще бъдат изтрити.

възраст на ритик рошан
Ограничение за референтна цялост
Ограничение за референтна цялост

Показани са горните две таблици STUDENT и SUBJECT, всяка от които има по четири стойности, сега да предположим, че търсите да изтриете Roll = 4 от таблицата STUDENT( Master ), като напишете SQL команда: изтриване от STUDENT където Roll = 4;

В момента, в който SQL изпълни горната команда, редът с Roll = 4 от таблицата SUBJECT( Child ) също ще бъде изтрит, резултатът УЧЕНИК и ПРЕДМЕТ таблицата ще изглежда така:

Ограничение за референтна цялост
Ограничение за референтна цялост

От горните две таблици STUDENT и SUBJECT можете да видите, че и в двете таблици Roll = 4 се изтрива наведнъж, без да се нарушава ограничението за изтриване.

Понякога в интервютата се задава много важен въпрос: Може ли външният ключ да има стойности NULL?

конструктор в java

Отговорът на горния въпрос е ДА, той може да има NULL стойности, докато първичният ключ не може да бъде NULL на всяка цена. За да разберем практически горния въпрос, нека разберем по-долу концепцията за delete null.

ПРИ ИЗТРИВАНЕ NULL.

Съгласно ограничението за изтриване: Стойността не може да бъде изтрита от таблицата MASTER, ако стойността лежи в таблицата CHILD. Следващият въпрос идва: можем ли да изтрием стойността от главната таблица, ако стойността лежи в дъщерната таблица, без да нарушаваме ограничението за изтриване? т.е. в момента, в който изтрием стойността от главната таблица, стойността, съответстваща на нея, също трябва да бъде изтрита от дъщерната таблица или може да бъде заменена с NULL стойността.

Отговорът на горния въпрос е ДА, можем да изтрием стойността от главната таблица, ако стойността се намира в дъщерна таблица, без да нарушаваме ограничението за изтриване, като вмъкнем NULL във външния ключ, трябва да направим лека модификация, докато създаваме дъщерна таблица, т.е. добавяйки при изтриване нула .

СИНТАКСИС НА ТАБЛИЦАТА:

 CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) ); 

В горния синтаксис, точно след референтната ключова дума (използвана за създаване на външен ключ), добавихме при изтриване null, като добавим такава сега, можем да изтрием стойността от главната таблица, ако стойността лежи в дъщерната таблица, без да нарушаваме изтриването ограничение. Сега, ако искате да изтриете Roll = 4 от главната таблица, въпреки че Roll =4 лежи в дъщерната таблица, това е възможно, защото в момента, в който дадете команда за изтриване на Roll = 4 от главната таблица, редът с Roll = 4 от дъщерната таблица ще бъде заменена от NULL стойност.

Ограничение за референтна цялост
Ограничение за референтна цялост

Показани са горните две таблици STUDENT и SUBJECT, всяка от които има четири стойности, сега да предположим, че търсите да изтриете Roll = 4 от таблицата STUDENT( Master ), като напишете SQL команда: изтриване от STUDENT където Roll = 4;

В момента, в който SQL изпълни горната команда, редът с Roll = 4 от таблицата SUBJECT( Child ) ще бъде заменен от NULL стойност, резултатът УЧЕНИК и ПРЕДМЕТ таблицата ще изглежда така:

Ограничение за референтна цялост
Ограничение за референтна цялост

От горните две таблици STUDENT и SUBJECT можете да видите, че в таблица STUDENT Roll = 4 се изтрива, докато стойността на Roll = 4 в таблицата SUBJECT се заменя с NULL. Това доказва, че външният ключ може да има нулеви стойности. Ако в случая в таблицата SUBJECT, колоната Roll е първичен ключ заедно с външен ключ, тогава в този случай не можем да направим външен ключ да има NULL стойности.