Правила за външен ключ

За да наложи референтна цялост или както понякога се казва, за да поддържа външни ключове, потребителят на базата данни трябва да може да дефинира набор от операции върху връзката между първичния ключ и външния ключ, които му е позволено и които не му е позволено. На първо място, тази ситуация възниква, когато е необходимо да се извърши операцията Изтриване (какво да направите, ако родителският запис е изтрит в главната таблица).

Като цяло може да има следните операции: 1.Ограничаване – забранява премахването от главния, ако има подчинени. 2.Каскадно - каскадно изтриване на всички подчинени записи. 3.Set Null – задаване на стойност на външни ключове на подчинени записи на null (Null – стойност). 4.Задаване по подразбиране – задайте стойността на външните ключове на предварително зададена първоначална стойност. 5.Без действие – не правете нищо.

На работния плот по подразбиране еНяма действие. Ако разгледаме проста таблица - родители и деца - "Ако родител умре, това не означава, че децата също трябва да бъдат убити ... Също така е невъзможно да се забрани умирането." Каква стойност да се зададе в подчинени записи - "деца" - във всеки контекст се решава от потребителя (Set Null и т.н.). В този случай не могат да се използват операциитеRestrict иCascade.

Втората операция тук еАктуализиране (какво ще стане, ако актуализираме, променим първичния ключ в главната таблица). Възниква въпросът какво да правим с Foreign Key в този случай. В общия случай тук могат да бъдат и всички именувани преди това операции за Изтриване. Всичко зависи и от контекста – напр. при промяна на името на улицата е необходимо да се актуализират имената в паспорти, табели и др. Но най-често се използва операциятаRestrict - за забрана на актуализирането.

Всяка една от операциитеедин или друг начин изисква някакъв код, за да го изпълни. Единствените изключения саБез действие. Във всички останали случаи се изисква код. На практика това се решава условно по един начин, но в две реализации. Използват се тригери, тъй като е процедура, тя се изпълнява на сървъра на базата данни, т.е. потребителят не може изрично да стартира такъв тригер. Такива тригери могат да бъдат създадени за три операции -Вмъкване (добавяне),Изтриване,Актуализиране. Две реализации на тригери:

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

2. В най-простия случай, без да се вземат предвид всички тънкости, самата СУБД може да създаде стандартен тригер, който изпълнява проста каскадна актуализация или изтриване и т.н. По правило той е компилиран и е невъзможно да видите кода на такъв тригер.