Кіріспе

Деректер қоры жүйелеріндегі түсінік. Шетелдік кілт – бұл басқа кестедегі бастауыш кілтке сілтеме жасайтын, осы екі кестені байланыстыратын атрибуттар жиынтығы. Реляциялық деректер қорында шетелдік кілт кіріктіру тәуелділігі шектеуіне бағынады, яғни бір қатынастағы шетелдік кілт атрибуттарынан құралған жазбалар басқа (міндетті емес) қатынаста, S-де де болуы керек; сондай-ақ, бұл атрибуттар S-де кандидат кілт болуы тиіс.

Басқаша айтқанда, шетелдік кілт – кандидат кілтке сілтеме жасайтын атрибуттар жиынтығы. Мысалы, TEAM деп аталатын кестеде MEMBER NAME атрибуты болуы мүмкін, ол PERSON кестесіндегі PERSON NAME кандидат кілтіне сілтеме жасайтын шетелдік кілт. MEMBER NAME шетелдік кілт болғандықтан, TEAM-де мүше аты ретінде кез келген мән PERSON кестесінде адам аты ретінде де болуы керек; яғни, TEAM-нің әрбір мүшесі сонымен қатар PERSON болып табылады. Назарда ұстау керек маңызды нәрселер: Сілтеме жасалатын қатынас бұрыннан құрылған болуы керек. Сілтеме жасалатын атрибут сілтеме жасалатын қатынастың бастауыш кілтінің бөлігі болуы керек. Сілтеме жасайтын және сілтеме жасалынатын атрибуттың дерек типі мен мөлшері бірдей болуы керек.

КАСКАДА

Басты (анықтамалық) кестедегі қатарлар өшірілген (немесе жаңартылған) кезде, сәйкес келетін сыртқы кілт бағаны бар бағынышты (анықтамалық) кестедегі тиісті қатарлар да өшіріледі (немесе жаңартылады). Бұл каскадты өшіру (немесе жаңарту) деп аталады.

ШЕШІМДЕУ

Егер сілтеме жасайтын немесе бағынышты кестеде сілтеме жасайтын кестедегі мәнге сілтеме жасаған жол болса, мәнді жаңартуға немесе жоюға болмайды. Сол сияқты, егер оған сілтеме жасайтын немесе бағынышты кестеден сілтеме жасалса, жолды жоюға болмайды. RESTRICT (және CASCADE) жақсырақ түсіну үшін, бірден көзге көрінбес болатын келесі айырмашылықты ескеру пайдалы болуы мүмкін. CASCADE сілтемелік әрекеті CASCADE сөзі қолданылған (бағынышты) кестенің "құлқысын" өзгертеді. Мысалы, ON DELETE CASCADE дегеніміз – "Егер сілтеме жасалған жол басқа кестеден (негізгі кестеден) жойылса, онда мені де жой" деген сөз. Ал RESTRICT сілтемелік әрекеті негізгі кестенің "құлқысын" өзгертеді, бағынышты кестені емес, RESTRICT сөзі бағынышты кестеде болса да, негізгі кестеде емес! Сондықтан, ON DELETE RESTRICT дегеніміз: "Егер біреу басқа кестеден (негізгі кестеден) жолды жоюға тырысса, сол басқа кестеден жоюға тыйым салыңыз (әрине, мені де жоюға болмайды, бірақ бұл жердегі басты мәселе емес)". RESTRICT Microsoft SQL 2012 және одан бұрынғы нұсқаларында қолдау көрсетілмейді.

ЕШҚАЙ іс-қимыл

ҚОЛДАНБАУ мен ШЕКТЕУ өте ұқсас. ҚОЛДАНБАУ мен ШЕКТЕУ арасындағы басты айырмашылық – ҚОЛДАНБАУ кезінде анықтамалық тұтастық тексеруі кестеге өзгерістер енгізуге тырысқаннан кейін жүзеге асырылады. ШЕКТЕУ UPDATE немесе DELETE операторын орындауға тырысу алдында тексеруді жүргізеді. Анықтамалық тұтастық тексеруі сәтсіз болған жағдайда, екі анықтамалық әрекет те бірдей әрекет етеді: UPDATE немесе DELETE операторы қатеге әкеледі. Басқаша айтқанда, сілтемеленген кестеде ҚОЛДАНБАУ анықтамалық әрекетін пайдаланып UPDATE немесе DELETE операторы орындалғанда, ДБЖЖ оператордың орындалу соңында ешқандай анықтамалық қатынастар бұзылмағанын тексереді. Бұл ШЕКТЕУден өзгеше, ол операция шектеуді бұзатынын бастапқыда қарастырады. ҚОЛДАНБАУды пайдалану арқылы триггерлер немесе оператордың өзінің семантикасы шеткі кілт қатынастары бұзылмаған соңғы күйге әкелуі мүмкін, осылайша шектеудің соңғы тексерілген уақытына дейін оператордың сәтті аяқталуына мүмкіндік береді.

SET NULL, SET DEFALT (Нолға қойыңыз, Әдетті қойыңыз)

Жалпы алғанда, SET NULL немесе SET DEFAULT үшін ДБС-нің (Деректерді басқару жүйесінің) атқаратын әрекеті ON DELETE немесе ON UPDATE үшін бірдей болады: әсер еткен сілтемелік атрибуттардың мәні SET NULL үшін NULL-ге, ал SET DEFAULT үшін көрсетілген әдепкі мәнге өзгертіледі.