ON DELETE va ON UPDATE
ON DELETE va ON UPDATE opeatorlari yordamida birlamchi jadval qatori o'chirilganda va o`zgartirilganda amalga oshiriladigan amallarni o'rnatish mumkin. Amallarni aniqlash uchun biz quyidagi variantlardan foydalanishimiz mumkin:
CASCADE: Asosiy jadvaldagi tegishli qatorlarni o'chirishda yoki o`zgartirganda bog’liq jadvaldagi qatorlarni avtomatik ravishda o'chiradi yoki o`zgartiradi.
NO ACTION: Asosiy jadvaldagi tegishli qatorlarni o'chirish yoki o`zgartirish paytida bog'liq jadvaldagi har qanday amallarning oldini oladi. Ya'ni, aslida, amallar bajarilmaydi.
SET NULL: Asosiy jadvaldan tegishli qatorni o'chirishda tashqi kalitlarning ustunini NULL-ga o'rnatadi.
SET DEFAULT: Asosiy jadvaldan tegishli qatorni o'chirishda, tashqi kalitning ustunini DEFAULT atributlari yordamida o'rnatiladigan standart qiymatiga o'rnatadi. Agar ustun uchun standart qiymat ko`rsatilmagan bo'lsa, NULL ishlatiladi.
Kaskad o’chirish
CREATE TABLE Orders
(
Id INT PRIMARY KEY IDENTITY,
CustomerId INT,
CreatedAt Date,
FOREIGN KEY (CustomerId) REFERENCES Customers (Id) ON DELETE CASCADE
)
NULL qiymatni o’rnatish
CREATE TABLE Orders
(
Id INT PRIMARY KEY IDENTITY,
CustomerId INT,
CreatedAt Date,
FOREIGN KEY (CustomerId) REFERENCES Customers (Id) ON DELETE SET NULL
);
Standart qiymatni o’rnatish
CREATE TABLE Orders
(
Id INT PRIMARY KEY IDENTITY,
CustomerId INT,
CreatedAt Date,
FOREIGN KEY (CustomerId) REFERENCES Customers (Id) ON DELETE SET DEFAULT
)
Indekslar
Ma`lumotlar bazalarini boshqarish tizimlari odatda ma`lumotlardan foydalanishni tezlashtirish uchun indekslardan foydalanadi. Indeks - bu ma`lumotlarning bir yoki bir nechta qatorlariga tezkor murojaat qilish imkonini beradigan alohida ma`lumotlar tuzilmasi. Indeksni to'g'ri sozlash so'rovlarning tezroq ishlashining asosiy sababi hisoblanadi.
Ma`lumotlar bazasi indeksi kitobning mundarijasiga juda o'xshash. Tezda kitobdan mavzuni topishimiz kerak bo'lganda, avval ushbu mavzu kitobning qaysi sahifalarida joylashganligini mundarijadan ko`rib chiqamiz, so'ngra darhol kerakli sahifani ochamiz. Xuddi shu tarzda, jadvaldagi ma`lum bir qatorni qidirishda Database Engine komponenti indeksga qarab, uning joylashgan joyini bilib oladi.
Ammo kitob mundarijasi bilan ma`lumotlar bazasi indekslari o'rtasida ikkita sezilarli farq mavjud:
Kitob o`quvchisi har bir aniq holatda indeksni ishlatadimi yoki yo`qmi o`zi hal qiladi. Ma`lumotlar bazasi foydalanuvchisida bunday imkoniyat yo`q va so'rovni optimallashtirish deb nomlangan tizim komponenti ushbu qarorni qabul qiladi.
Muayyan kitob uchun mundarija kitob bilan birga tuziladi, undan keyin u endi o`zgartirilmaydi. Bu shuni anglatadiki, ma`lum bir mavzu bo'yicha mundarija har doim bir xil sahifa raqamiga ishora qiladi. Aksincha, ma`lumotlar bazasi indekslari esa, ularga mos keladigan ma`lumotlar o`zgarganda o`zgarishi mumkin.
Agar jadval uchun mos indeks bo'lmasa, tizim qatorlarni olish uchun jadvalni skanerlash usulidan foydalanadi. Jadvalni skanerlash degani tizim jadvalning har bir qatorini (birinchisidan oxirigacha) ketma-ket olishini va tekshirishini anglatadi, agar qator "WHERE" bandidagi qidirish shartini qanoatlantirsa, qatorni natija to'plamiga qo'yadi. Shunday qilib, barcha qatorlar xotiradagi jismoniy joylashishiga qarab olinadi. Ushbu usul indeksdan foydalanilgan holga qaraganda samarasiz.
Indekslar “indeks sahifalari” deb nomlangan qo'shimcha ma`lumotlar bazasi tuzilmalarida saqlanadi. Har bir indekslangan qator uchun indeks sahifasida saqlanadigan indeks elementi (index entry) mavjud. Har bir indeks elementi indeks kaliti va ko`rsatgichdan iborat. Shuning uchun indeks elementi u ko`rsatgan jadval qatoridan sezilarli darajada qisqaroq. Shu sababli, har bir indeks sahifasidagi indeks elementlari soni ma`lumotlar sahifasidagi qatorlar sonidan katta.
Indekslarning bu xususiyati juda muhimdir, chunki indeks sahifalarini qarab chiqish uchun zarur bo'lgan kiritish-chiqarish(I/O) operasiyalari soni mos keladigan ma`lumotlar sahifalarini qarab chiqish uchun zarur bo'lgan kiritish-chiqarish operasiyalari sonidan sezilarli darajada kam. Boshqacha qilib aytganda, jadvalni skanerlash ushbu jadvaldagi indekslarni skanerlashdan ko`ra ko'proq I/O talab qilishi mumkin.
Ikki tipdagi indekslar mavjud: klasterlangan va klasterlanmagan.
Do'stlaringiz bilan baham: |