2-mavzu. Ma’lumotlar bazasida tashqi bog’lanish va birlashmalar
Download 440.01 Kb. Pdf ko'rish
|
2-maruza
Cheklovlarning ta'siri
Bunday cheklovlar DML modifikatsiyalash buyruqlaridan foydalanish qobiliyatiga va qobiliyatsizligingizga qanday ta'sir qiladi? Chet tugmachalar deb belgilangan maydonlar uchun javob juda oddiy: INSERT yoki UPDATE buyrug'i bilan ushbu maydonlarga kiritgan har qanday qiymat ularning ota-ona kalitlarida mavjud bo'lishi kerak. Ushbu maydonlarga NULL qiymatlarini qo'yishingiz mumkin, garchi ota-ona kalitlarida NULL qiymatlariga ruxsat berilmagan bo'lsa ham, NOT NULL cheklovi mavjud. Siz chet el tugmachalari bilan har qanday qatorlarni umuman ota-tugmalarni ishlatmasdan o'chirishingiz mumkin. Asosiy kalit qadriyatlarini o'zgartirish masalasiga taalluqli bo'lgani uchun, ANSI ta'rifi bo'yicha javob yanada sodda, ammo ehtimol biroz cheklangan: har qanday asosiy kalit qiymati o'chirilishi yoki o'zgartirilishi mumkin emas. Bu shuni anglatadiki, masalan, Buyurtmachilar jadvalida buyurtmalarni saqlab turganda mijozni xaridorlar jadvalidan olib tashlay olmaysiz. Ushbu jadvallardan qanday foydalanishingizga qarab, bu kerakli yoki muammoli bo'lishi mumkin. Biroq, mijozni joriy buyurtmalar bilan o'chirib tashlashga va mavjud bo'lmagan mijozlarga havola qilingan Buyurtma jadvalidan chiqib ketishga imkon beradigan tizimga ega bo'lishdan yaxshiroqdir. Ushbu cheklash tizimining ma'nosi shundaki, Buyurtma jadvali yaratuvchisi, mijozlar jadvali va Sotuvchilar jadvalidan ota-ona kalitlari sifatida foydalanib,
ushbu jadvallardagi harakatlarga sezilarli cheklovlar qo'yishi mumkin. Shu sababli, ushbu jadval egasi (yaratuvchisi) sizga buni amalga oshirish huquqini maxsus berguniga qadar siz boshqarmaydigan jadvaldan foydalana olmaysiz (ya'ni siz uni yaratmadingiz va siz unga egalik qilmaysiz) 22-bob). ANSI tarkibiga kirmaydigan, lekin ba'zi tijorat dasturlarida mavjud bo'lgan asosiy kalitni o'zgartirish uchun ba'zi boshqa harakatlar mavjud. Agar siz ota-ona kalitining joriy mos yozuvlar qiymatini o'zgartirmoqchi yoki olib tashlamoqchi bo'lsangiz, aslida uchta imkoniyat mavjud: O'zgartirishni (ANSI modasi) ota-tugmachada o'zgartirishlar cheklanganligini belgilash orqali cheklashingiz yoki rad qilishingiz mumkin. Siz ota-tugmachani o'zgartirishingiz mumkin va shu bilan tashqi kalitni avtomatik ravishda o'zgartirishingiz mumkin, bu kaskadli o'zgarish deb ataladi. Siz ota-tugmachani o'zgartirishingiz mumkin va tashqi kalitni avtomatik ravishda NULL-ga o'rnatishingiz mumkin (tashqi kalitda NULLS ruxsat berilgan deb), bu bo'sh tashqi kalitning o'zgarishi deb nomlanadi. Hatto ushbu uchta toifada ham barcha o'zgartirish buyruqlarini shu tarzda boshqarishni xohlamasligingiz mumkin. INSERT, albatta, nuqta yonida. Hozirgi vaqtda ushbu qiymatlarning hech birini chaqirish mumkin bo'lmasligi uchun u ota-ona kalitining yangi qiymatlarini jadvalga qo'yadi. Biroq, siz modifikatsiyani o'chirilmasdan kaskadga o'tishiga ruxsat berishni xohlashingiz mumkin va aksincha. UPDATE va DELETE buyruqlaridan qat'i nazar, uchta toifadan birini belgilashga imkon beradigan vaziyat yaxshiroq bo'lishi mumkin. Shuning uchun biz ota-ona kalitida UPDATE yoki DELETE-ni chiqarganingizda nima bo'lishini aniqlaydigan yangilanish effektlariga murojaat qilamiz. Biz aytgan ushbu effektlar CHEKLANGAN o'zgarishlar, CASCADES o'zgarishi va NULL o'zgarishlar deb nomlanadi. Yuqorida tavsiflangan eng maqbul vaziyat uchun tizimingizning haqiqiy imkoniyatlari qat'iy ANSI standartida bo'lishi kerak - o'zgartirish va o'chirish effektlari, ikkalasi ham avtomatik ravishda cheklangan. Illyustratsiya orqali biz o'zgartirish va olib tashlash effektlarining to'liq to'plamida nima qilishingiz mumkinligi haqida bir nechta misollarni keltiramiz. Albatta, nostandart vositalar bo'lgan modifikatsiya va o'chirish effektlari standart holat sintaksisidan mahrum. Bu erda biz foydalanadigan sintaksisni yozish oson va keyinchalik ushbu effektlarning funktsiyalarini tasvirlashga xizmat qiladi. Eksperimentning to'liqligi uchun, bizning sotuvchilar jadvalimiz bo'limlarni o'zgartirgan taqdirda, sotuvchilar jadvalining snum maydonini o'zgartirish uchun sizda sabab bor deb taxmin qilaylik. (Odatda birlamchi kalitlarni o'zgartirish biz amalda qilishni tavsiya etadigan narsa emas. Mavjud asosiy kalitlarning asosiy kalitlarga o'xshab harakat qilishidan boshqa narsa yo'q: ular o'zgarmasligi kerak.) Sotuvchi raqamini o'zgartirganda, uning barcha mijozlari saqlanib qolishini xohlaysiz. Ammo, agar bu sotuvchi o'z firmasi yoki kompaniyasini tark etsa, siz mijozlarini ma'lumotlar bazasidan o'chirib tashlamoqchi bo'lmasligingiz mumkin. Buning o'rniga, mijozlar boshqalarga tayinlanganligiga ishonch hosil qilishni xohlaysiz. Buning uchun kaskadli effektli UPDATE ni, cheklangan effektli O'chirishni belgilashingiz kerak. JADVAL Mijozlarini yarating (cnum integer NULL PRIMARY KEY, cname char (10) NOT NULL, city char (10), rating integer, snum integer ADABIYOTLAR Sotuvchilar, Yangilangan SAVDO KASKADALARI, SAVDOCHILARNING MA'LUMOTI cheklangan); Agar siz hozirda Vendors jadvalidan Peelni olib tashlashga harakat qilsangiz, Hoffman va Clemens mijozlarining snum maydonlarini boshqa belgilangan sotuvchi uchun o'zgartirmaguningizcha buyruq kuchga ega bo'lmaydi. Shu bilan bir qatorda, siz Peelning snum pol qiymatini 1009 ga o'zgartirishingiz mumkin, Xofman va Klemens ham avtomatik ravishda o'zgaradi. Uchinchi effekt - NULL o'zgarishlar. Shunday bo'ladiki, sotuvchilar kompaniyani tark etganda, ularning hozirgi buyurtmalari boshqa sotuvchiga o'tkazilmaydi. Boshqa tomondan, siz hisob-fakturalarini o'chirib tashlagan mijozlar uchun barcha buyurtmalarni avtomatik ravishda
bekor qilishni xohlaysiz. Sotuvchi yoki mijozning raqamlarini o'zgartirib, ularni shunchaki unga o'tkazishingiz mumkin. Quyidagi misol ushbu effektlardan foydalanib qanday qilib Buyurtma jadvalini yaratishingiz mumkinligini ko'rsatadi. Jadval buyurtmalarini yaratish (onum integer NULL PRIMARY KEY, amt decimal, odate date NULL cnum integer NOT NULL MEDIALLAR Mijozlar snum integer
ADABIYoTLAR Sotuvchilar, Mijozlar KASKADALARINING YANGILASHI, Sotuvchilarning yangilanishi; Albatta, Sotuvchi jadvalidagi Null o'zgarishi ta'siri bilan DELETE buyrug'ida, NUML cheklovi snum maydonidan olib tashlanishi kerak. Download 440.01 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling