Кіріспе
SQL-дегі тұтастық шектеуінің түрі
Тексеру шектеуі – SQL-дегі тұтастық шектеуінің түрі, ол деректер қорының кестесіндегі әрбір қатарда орындалуы тиіс талапты анықтайды. Шектеу предикат түрінде болуы керек. Ол кестедегі бір немесе бірнеше бағандарға сілтеме жасай алады. Предикаттың нәтижесі NULL мәндердің болуына байланысты TRUE, FALSE немесе UNKNOWN болуы мүмкін. Егер предикат UNKNOWN деп бағаланса, онда шектеу бұзылмайды және қатарды кестеге қосуға немесе жаңартуға болады. Бұл SELECT немесе UPDATE операторларындағы WHERE шарттарындағы предикаттардан өзгеше. Мысалы, өнімдерді сақтау кестесінде өнімнің бағасы мен саны теріс емес болуын қамтамасыз ететін тексеру шектеуін қосуға болады:
A check constraint is a type of integrity constraint in SQL which specifies a requirement that must be met by each row in a database table. The constraint must be a predicate. It can refer to a single column, or multiple columns of the table. The result of the predicate can be either TRUE, FALSE, or UNKNOWN, depending on the presence of NULLs. If the predicate evaluates to UNKNOWN, then the constraint is not violated and the row can be inserted or updated in the table. This is contrary to predicates in WHERE clauses in SELECT or UPDATE statements. For example, in a table containing products, one could add a check constraint such that the price of a product and quantity of a product is a non negative value:
баға >= 0
саны >= 0
Егер бұл шектеулер болмаса, теріс баға (мысалы, -$30) немесе сан (мысалы, -3 дана) болуы мүмкін. Тексеру шектеулері деректер базасындағы деректердің дұрыстығын қамтамасыз ету және деректердің тұтастығын сақтау үшін қолданылады. Егер олар деректер базасы деңгейінде қолданылса, деректер базасын пайдаланатын қосымшалар жарамсыз деректерді қоса алмайды немесе жарамды деректерді жарамсыз күйге өзгерте алмайды, тіпті қосымшаның өзі жарамсыз деректерді қабылдаса да.
Ортақ шектеулер
Көптеген деректерді басқару жүйелері тексеру шектеулерін бір қатармен шектейді, тұрақты мәндерге және детерминистік функцияларға қол жеткізіліммен, бірақ басқа кестелердегі деректерге немесе транзакциялардың оқшаулануына байланысты ағымдағы транзакцияға көрінбейтін деректерге қол жеткізілім жоқ. Мұндай шектеулер нақты кестелік тексеру шектеулері емес, қатарлық тексеру шектеулері болып табылады. Бұл шектеулер әдетте тек қатар тікелей жаңартылған кезде (тиімділік үшін) тексеріледі және көбінесе INSERT немесе UPDATE триггерлері ретінде жүзеге асырылады, сондықтан осы шектеулер болмаса, тұтастық шектеулері жанама әрекеттер арқылы бұзылуы мүмкін. Сонымен қатар, CHECK шектеуі осы жазбаларға жарамды өзгерістер енгізуге кедері келтіруі мүмкін. Қауіпті шектеулердің мысалдары:
Пайдаланушы анықтаған триггерлер осы шектеулерді айналып өту үшін қолданылуы мүмкін. Іске асыруда ұқсас болғанымен, триггерлер тек кесте тікелей өзгертілген кезде ғана орындалатыны семантикалық тұрғыдан анық, ал дизайнердің басқа кестелердегі жанама, маңызды өзгерістерді басқару жауапкершілігінде екені белгілі; ал шектеулер, керісінше, пайдаланушының әрекеттеріне немесе дизайнердің алдын ала ескере алмауына қарамастан, "әрқашан дұрыс" болуға тиіс.