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:

SQL · namuna baza

id INTEGER PRIMARY KEY ikki narsani kafolatlaydi:

  • Takrorlanmaydi — ikki mijozda bir xil id bo’lolmaydi.
  • Bo’sh bo’lmaydiid hech qachon NULL bo’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_idmijozlar.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:

  1. buyurtmalar dagi mijoz_id qaysi jadvalga ishora qilishini toping;
  2. JOIN bilan uch jadvalni bog’lang;
  3. mavjud bo’lmagan mijoz_id bilan buyurtma qo’shishga urining;
  4. bir xil id bilan ikkita mijoz qo’shishga urining;
  5. 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 va NULL bo’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.

Bu dars foydali bo'ldimi?

marta ko'rildi