SQL da FOREIGN KEY va Referentsial Butunlik
Last updated
Last updated
SQL da FOREIGN KEY (Tashqi kalit) — bu jadvalda bir ustunni boshqa jadvalning ustuniga bog‘lash uchun ishlatiladigan cheklovdir. Tashqi kalitlar ma’lumotlar orasidagi bog‘lanishni ta’minlaydi va referentsial butunlikni (referential integrity) saqlashga yordam beradi. Referentsial butunlik ma’lumotlar bazasida ma’lumotlarning to‘g‘ri va izchil bo‘lishini ta’minlaydi.
FOREIGN KEY cheklovi bir jadvaldagi ustunni boshqa jadvaldagi ustun bilan bog‘laydi. Bu bog‘lanish ikki jadval orasidagi aloqani ta’minlaydi, masalan, bir jadvaldagi ma’lumotlar ikkinchi jadvaldagi ma’lumotlarga murojaat qilishi mumkin.
Tashqi kalit ustuni asosiy kalit (PRIMARY KEY) yoki unikal cheklovga ega ustunga murojaat qiladi.
Tashqi kalit bir nechta ustunlardan tashkil topgan bo‘lishi mumkin (composite foreign key).
Sintaksis:
Misol:
Bu misolda Orders
jadvalida CustomerID
ustuni Customers
jadvalidagi CustomerID
ustuniga tashqi kalit sifatida bog‘langan. Har bir buyurtma faqat mavjud mijozga tegishli bo‘lishi mumkin.
Referentsial butunlik — bu ma’lumotlar orasidagi bog‘lanishlarning to‘g‘ri va ishonchli bo‘lishini ta’minlash uchun qo‘yilgan qoidalardir. Tashqi kalit yordamida bir jadvalda mavjud bo‘lgan ma’lumotlar boshqa jadvaldagi mos ma’lumotlarga mos kelishini ta’minlash mumkin.
Referentsial butunlikni saqlash uchun quyidagi cheklovlar qo‘yilishi mumkin:
CASCADE: Agar ota jadvaldagi (asosiy jadval) ma’lumotlar o‘zgartirilsa yoki o‘chirilsa, bu o‘zgarishlar avtomatik ravishda bog‘langan jadvalga (bola jadval) ham tatbiq etiladi.
SET NULL: Agar ota jadvaldagi ma’lumot o‘chirilsa, unda bola jadvaldagi bog‘langan ustundagi qiymatlar NULL bo‘ladi.
SET DEFAULT: Agar ota jadvaldagi ma’lumot o‘chirilsa, bola jadvaldagi bog‘langan ustunlarga default qiymat beriladi.
NO ACTION: Agar ota jadvaldagi ma’lumot o‘zgartirilsa yoki o‘chirilsa, bola jadvaldagi bog‘langan ma’lumot o‘zgarmaydi va xatolik yuz beradi.
RESTRICT: Bu cheklov NO ACTION ga o‘xshash bo‘lib, ma’lumotlarni o‘chirish yoki yangilashda bog‘lanish mavjud bo‘lsa, amalga oshirilmaydi.
Referentsial butunlikni saqlash — bu ma’lumotlar bazasining izchilligini ta’minlaydi. Masalan:
Agar siz Orders
jadvalidan CustomerID
qiymatini o‘chirsangiz, va bu qiymatni Customers
jadvalida ishlatgan bo‘lsangiz, Orders
jadvalidagi ma’lumotlar noto‘g‘ri bo‘lishi mumkin. FOREIGN KEY yordamida, siz bu holatni oldini olish uchun ON DELETE RESTRICT
yoki ON UPDATE CASCADE
kabi parametrlar qo‘llashingiz mumkin.
CASCADE — bu referentsial butunlikni saqlashda foydalidir, chunki ota jadvaldagi ma’lumotlar o‘zgartirilganda, bola jadvaldagi tegishli ma’lumotlar ham yangilanadi yoki o‘chiriladi.
Misol 1: CASCADE – Ota jadvaldagi yozuv o‘chirilsa, bola jadvaldagi yozuvlar ham o‘chiriladi:
Bu misolda Customers
jadvalidan biron-bir mijoz o‘chirilsa, uning bilan bog‘liq barcha buyurtmalar (Orders) avtomatik ravishda o‘chiriladi.
Misol 2: SET NULL – Ota jadvaldagi yozuv o‘chirilsa, bola jadvaldagi bog‘langan ustun qiymatlari NULL bo‘ladi:
Bu misolda, agar Customers
jadvalidan mijoz o‘chirilsa, Orders
jadvalidagi CustomerID
ustunida qiymat NULL bo‘ladi.
Agar tashqi kalit yoki referentsial butunlikni o‘zgartirish zarur bo‘lsa, ALTER TABLE
operatori ishlatiladi.
Misol: Tashqi kalitni o‘zgartirish.
FOREIGN KEY va referentsial butunlik SQLda ma'lumotlar orasidagi bog'lanishlarni ta'minlaydi. FOREIGN KEY cheklovi bir jadvaldagi ustunni boshqa jadvaldagi ustun bilan bog‘lab, ma’lumotlarning yaxlitligini saqlaydi. Referentsial butunlik esa, bog‘langan ma’lumotlarning o‘zaro izchilligini va to‘g‘riligini ta’minlaydi. Tashqi kalitlar va referentsial butunlikni o‘rnatish ma’lumotlar bazasida ma’lumotlarning qat’iy va ishonchli bo‘lishini ta’minlash uchun juda muhimdir.