pas_ser CHAR(2) NOT NULL,
pas_nom CHAR(8) NOT NULL,
UNIQUE (pas_ser, pas_nom);
Bu konstruksiyani bitta jadval uchun bir nechta marta ishlatish mumkin.
Havola butunligi
Ma’lumki, tashqi kalitlar avlod jadvalning satrlarini ajdod jadvalni satrlari bilan bog’lash uchun ishlatiladi. Havola butunligining ma’nosi shundaki, agarda tashqi kalit qiymatga ega bo’lsa, u albatta ajdod jadvaldagi mavjud bo’lgan satrga havola qilishi kerak. Masalan, student jadvalining id_fak ustuni fakultet jadvalining mos bo’lgan qiymatiga havola qilishi kerak. Agar bu ustun student jadvalida bo’sh bo’lmasa, u albatta biror bir fakultet jadvalidagi satrga havola qilishi shart. SQL tilining namunasida tashqi kalit so’zlarni ko’rsatish uchun CREATE TABLE yoki ALTER TABLE operatorlarning FOREIGN KEY konstruksiyasi ishlatiladi, uning formati quyidagicha:
<tashqi kalit qismi> ::= FOREIGN KEY (<ustunlar ro’yxati>)
REFERENSES <ajdod jadval nomi>
{(<tashqi ustunlar ro’yxati>)] [MATCH {PARTIAL | FULL}]
<tashqi ustunlar ro’yxati>::= <ustunlar ro’yxati> bunda <ustunlar ro’yxati> – avlod jadvalning tashqi kalit sifatidagi ustunlar nomidir, <tashqi ustunlar ro’yxati> – ajdod jadvalning birlamchi kalit sifatidagi ustunlar nomi. Agar bu ustunlar ko’rsatilmasa, tashqi kalit ajdod jadvalning birlamchi kalitiga mos kelishi kerak. Aks holda, tashqi kalit ro’yxatidagi ustunlarni hamma qiymatlari NULL bo’lishi kerak yoki hammasi qiymatga ega bo’lishi kerak. Agar MATCH PARTIAL berilsa, unda barchasi bo’sh bo’lishi kerak yoki qisman bo’sh bo’lishi mumkin. Bu holda ajdod jadvaldagi bo’shmas ustun uchun mos satr mavjud bo’lishi kerak, ya’ni bir avlod satriga bir nechta ajdod satrlari to’g’ri kelib qoladi, ya’ni havola butunligi buziladi. Bunday vaziyatlarda asosan MATH FULL qo’llanadi.
Masalan:
FOREIGN KEY (id_fak) REFERENSES fakultet
Endi, talaba jadvalining id_fak ustuniga yangi qiymat kiritsak yoki uni o’zgartirsak va bu qiymat fakultet jadvalida mavjud bo’lmasa, u holda tizim amalni bajarishga ruxsat bermaydi. Agar ajdod jadvalda tashqi kalitga mos kelgan nomzod kalitni o’zgartirish yoki o’chirish harakatini qilsak, unda natija kiritilgan havola butunligini saqlash qoidasiga bog’liq bo’ladi.
Bu qoidalar FOREIGN KEY konstruksiyasida quyidagicha beriladi:
<tashqi kalit>::= <tashqi kalit qismi> [ON UPDATE<saqlash qoidasi>] [ON DELETE <saqlash qoidasi >]
Do'stlaringiz bilan baham: |