Кіріспе

SQL-дегі тұтастық шектеуінің түрі
Тексеру шектеуі – SQL-дегі тұтастық шектеуінің түрі, ол деректер қорының кестесіндегі әрбір қатарда орындалуы тиіс талапты анықтайды. Шектеу предикат түрінде болуы керек. Ол кестедегі бір немесе бірнеше бағандарға сілтеме жасай алады. Предикаттың нәтижесі NULL мәндердің болуына байланысты TRUE, FALSE немесе UNKNOWN болуы мүмкін. Егер предикат UNKNOWN деп бағаланса, онда шектеу бұзылмайды және қатарды кестеге қосуға немесе жаңартуға болады. Бұл SELECT немесе UPDATE операторларындағы WHERE шарттарындағы предикаттардан өзгеше. Мысалы, өнімдерді сақтау кестесінде өнімнің бағасы мен саны теріс емес болуын қамтамасыз ететін тексеру шектеуін қосуға болады:

баға >= 0

саны >= 0

Егер бұл шектеулер болмаса, теріс баға (мысалы, -$30) немесе сан (мысалы, -3 дана) болуы мүмкін. Тексеру шектеулері деректер базасындағы деректердің дұрыстығын қамтамасыз ету және деректердің тұтастығын сақтау үшін қолданылады. Егер олар деректер базасы деңгейінде қолданылса, деректер базасын пайдаланатын қосымшалар жарамсыз деректерді қоса алмайды немесе жарамды деректерді жарамсыз күйге өзгерте алмайды, тіпті қосымшаның өзі жарамсыз деректерді қабылдаса да.

Ортақ шектеулер

Көптеген деректерді басқару жүйелері тексеру шектеулерін бір қатармен шектейді, тұрақты мәндерге және детерминистік функцияларға қол жеткізіліммен, бірақ басқа кестелердегі деректерге немесе транзакциялардың оқшаулануына байланысты ағымдағы транзакцияға көрінбейтін деректерге қол жеткізілім жоқ. Мұндай шектеулер нақты кестелік тексеру шектеулері емес, қатарлық тексеру шектеулері болып табылады. Бұл шектеулер әдетте тек қатар тікелей жаңартылған кезде (тиімділік үшін) тексеріледі және көбінесе INSERT немесе UPDATE триггерлері ретінде жүзеге асырылады, сондықтан осы шектеулер болмаса, тұтастық шектеулері жанама әрекеттер арқылы бұзылуы мүмкін. Сонымен қатар, CHECK шектеуі осы жазбаларға жарамды өзгерістер енгізуге кедері келтіруі мүмкін. Қауіпті шектеулердің мысалдары:

Пайдаланушы анықтаған триггерлер осы шектеулерді айналып өту үшін қолданылуы мүмкін. Іске асыруда ұқсас болғанымен, триггерлер тек кесте тікелей өзгертілген кезде ғана орындалатыны семантикалық тұрғыдан анық, ал дизайнердің басқа кестелердегі жанама, маңызды өзгерістерді басқару жауапкершілігінде екені белгілі; ал шектеулер, керісінше, пайдаланушының әрекеттеріне немесе дизайнердің алдын ала ескере алмауына қарамастан, "әрқашан дұрыс" болуға тиіс.