SQL primary key va foreign key
JOIN darsida jadvallar id va mijoz_id orqali bog’lanishini
ko’rgandik. Bu bog’lanish tasodifiy emas — uning ortida ikkita muhim
tushuncha turadi: primary key (asosiy kalit) va foreign key (chet
kalit). Ular ma’lumotning ishonchli va tartibli bo’lishini ta’minlaydi.
Primary key — har qatorni noyob qiladi
Primary key — jadvaldagi har qatorni noyob ajratib turadigan ustun.
Namuna bazadagi har jadvalning id ustuni aynan shunday:
CREATE TABLE mijozlar (
id INTEGER PRIMARY KEY,
ism TEXT NOT NULL,
shahar TEXT,
yosh INTEGER
);
O’zingiz ishga tushirib ko’ring — so’rovni tahrirlashingiz ham mumkin:
id INTEGER PRIMARY KEY ikki narsani kafolatlaydi:
- Takrorlanmaydi — ikki mijozda bir xil
idbo’lolmaydi. - Bo’sh bo’lmaydi —
idhech qachonNULLbo’lmaydi.
Shu sababli id = 4 deganda aniq bitta mijoz — Malika — tushuniladi. Agar
id takrorlanadigan bo’lsa, “4-mijoz” degani ma’nosini yo’qotardi.
Foreign key — jadvallarni bog’laydi
Foreign key — bir jadvaldagi ustun boshqa jadvalning primary key’iga
ishora qilsa, u chet kalit deyiladi. buyurtmalar.mijoz_id —
mijozlar.id ga foreign key:
CREATE TABLE buyurtmalar (
id INTEGER PRIMARY KEY,
mijoz_id INTEGER,
mahsulot_id INTEGER,
soni INTEGER NOT NULL,
sana TEXT,
FOREIGN KEY (mijoz_id) REFERENCES mijozlar(id),
FOREIGN KEY (mahsulot_id) REFERENCES mahsulotlar(id)
);
FOREIGN KEY (mijoz_id) REFERENCES mijozlar(id) bazaga aytadi: “mijoz_id
qiymati albatta mijozlar jadvalidagi mavjud id bo’lishi kerak”.
Foreign key nimadan himoya qiladi
Foreign key butunlikni saqlaydi. Uning yordamida baza ikki xatoga yo’l qo’ymaydi:
- Mavjud bo’lmagan mijozga buyurtma qo’shib bo’lmaydi (masalan
mijoz_id = 99, bunday mijoz yo’q). - Buyurtmasi bor mijozni o’chirib bo’lmaydi — avval buyurtma hal qilinishi kerak. Aks holda “egasiz” buyurtmalar qolib ketardi.
Amaliy mashq
Kalitlarni tekshiring:
buyurtmalardagimijoz_idqaysi jadvalga ishora qilishini toping;JOINbilan uch jadvalni bog’lang;- mavjud bo’lmagan
mijoz_idbilan buyurtma qo’shishga urining; - bir xil
idbilan ikkita mijoz qo’shishga urining; PRAGMA foreign_keys = ON;yozib, 3-qadamni takrorlang.
4-qadamdagi xato PRIMARY KEY nima uchun kerakligini ko’rsatadi.
Qisqacha xulosa
- Primary key — har qatorni noyob belgilaydigan ustun (odatda
id); takrorlanmaydi vaNULLbo’lmaydi. - Foreign key — boshqa jadvalning primary key’iga ishora qiluvchi ustun.
- Foreign key butunlikni saqlaydi: mavjud bo’lmagan yozuvga ishora qilib yoki bog’liq yozuvni o’chirib bo’lmaydi.
- SQLite’da foreign key’ni
PRAGMA foreign_keys = ON;bilan yoqing.
Keyingi darsda INDEX — jadval kattalashganda so’rovni qanday tezlashtirishni ko’ramiz.