13 / 100

PRIMARY KEY

Asosiy kalit

Kirish: Ushbu darsda siz ma'lumotlar bazasida asosiy kalit (primary key) nima ekanligini, nima uchun kerakligini va PostgreSQLda PRIMARY KEY cheklovi yordamida avto-inkrementli hamda murakkab (kompozit) kalitlarni qanday yaratishni o'rganasiz.


Asosiy kalit (Primary Key) nima?

Asosiy kalit (Primary Key) — bu jadvaldagi har bir qatorni bir-biridan yagona va betakror qilib ajratib turuvchi bitta ustun yoki ustunlar guruhidir. U jadvalda hech qachon bir xil qiymatga ega ikkita qator bo'lmasligini kafolatlaydi.

Masalan, quyidagi brands jadvalini ko'rib chiqaylik:

brand_idname
1Apple
2Samsung
3Google

Bu jadvalda brand_id ustuni asosiy kalit vazifasini bajaradi: 1 raqami Apple brendini, 2 raqami Samsungni, 3 raqami esa Googleni bir ma'noli ifodalaydi. brand_id ustunida hech qachon takrorlanuvchi raqamlar bo'lishi mumkin emas.

PostgreSQLda asosiy kalitni belgilash uchun PRIMARY KEY cheklovidan (constraint) foydalaniladi.


Asosiy kalitni e'lon qilish usullari

1. Bitta ustunli asosiy kalit (Ustun darajasida)

Agar asosiy kalit bitta ustundan iborat bo'lsa, uni to'g'ridan-to'g'ri ustun turidan keyin PRIMARY KEY kalit so'zlari bilan yozish mumkin:

query.sql
CREATE TABLE jadval_nomi (
   ustun1 data_type PRIMARY KEY,
   ustun2 data_type,
   ustun3 data_type,
   ...
);

Bu yerda ustun1 jadvalning asosiy kaliti hisoblanadi.

2. Murakkab (Kompozit) asosiy kalit (Jadval darajasida)

Agar asosiy kalit ikki yoki undan ortiq ustunlar birikmasidan tashkil topsa, u jadval darajasidagi cheklov sifatida quyidagicha e'lon qilinadi:

query.sql
CREATE TABLE jadval_nomi (
   ustun1 data_type,
   ustun2 data_type,
   ustun3 data_type,
   ...
   PRIMARY KEY (ustun1, ustun2)
);

Bunday kalit kompozit asosiy kalit (composite primary key) deyiladi. Bu holatda jadvaldagi hech qaysi ikki qatorda ustun1 va ustun2 juftligi bir xil bo'lishi mumkin emas.


Mavjud jadvalga asosiy kalit qo'shish

Agar jadval avval yaratilgan bo'lsa va unda asosiy kalit belgilanmagan bo'lsa, ALTER TABLE buyrug'i orqali asosiy kalitni qo'shish mumkin:

query.sql
ALTER TABLE jadval_nomi
ADD PRIMARY KEY (ustun1, ustun2, ...);

Avtomatik o'suvchi (Auto-increment) asosiy kalitlar

Amaliyotda asosiy kalitlar uchun ko'pincha avtomatik o'suvchi butun sonlar (1, 2, 3...) ishlatiladi. Bu ma'lumot kiritishda ID raqamini qo'lda yozish zaruratini yo'qotadi va betakrorlikni ta'minlaydi.

PostgreSQL zamonaviy SQL standartiga muvofiq avto-inkrement ustun yaratish uchun GENERATED ALWAYS AS IDENTITY atributidan foydalanadi:

query.sql
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY

[!TIP] Eskirgan qo'llanmalarda id SERIAL PRIMARY KEY sintaksisini ko'rishingiz mumkin. Ammo zamonaviy PostgreSQLda GENERATED ALWAYS AS IDENTITY tavsiya etiladi, chunki u xavfsizroq, standartga mos va ruxsatlar bilan bog'liq noqulayliklarni keltirib chiqarmaydi.


Amaliy misollar

1. Avto-inkrement asosiy kalitli jadval yaratish

brands jadvalini yaratamiz, unda brand_id avtomatik o'suvchi asosiy kalit bo'ladi:

query.sql
CREATE TABLE brands (
  brand_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  name VARCHAR(50)
);

brand_id avtomatik hosil bo'lishi sababli INSERT buyrug'ida unga qiymat berish shart emas, faqat name ni kiritamiz:

query.sql
INSERT INTO brands (name)
VALUES ('Apple')
RETURNING *;

Natija:

brand_idname
1Apple

Endi yana yangi brend qo'shamiz:

query.sql
INSERT INTO brands (name)
VALUES ('Samsung')
RETURNING *;

Natija:

brand_idname
2Samsung

PostgreSQL avtomatik ravishda keyingi betakror ID ni (2) taqdim etdi!

2. Kompozit asosiy kalit yaratish

Ko'pga-ko'p munosabatini ifodalovchi product_tags jadvalini yaratamiz. Unda bitta mahsulotga bir xil tegni ikki marta berib bo'lmasligi uchun product_id va tag_id birgalikda asosiy kalit bo'ladi:

query.sql
CREATE TABLE product_tags (
  product_id INT,
  tag_id INT,
  PRIMARY KEY (product_id, tag_id)
);

Endi jadvalda bir xil product_id va bir xil tag_id ga ega qator faqat bir marta saqlanishi mumkin.


Xulosa

  • Asosiy kalit (Primary Key) jadvaldagi har bir qatorni yagona tarzda aniqlaydi.
  • Asosiy kalit ustunlari hech qachon bo'sh (NULL) yoki takroriy qiymat qabul qilmaydi.
  • Avto-inkrementli kalitlar uchun INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY tavsiya etiladi.
  • Bir nechta ustunlardan iborat kalitlar kompozit asosiy kalit deb ataladi.
QBilimingizni sinab ko'ring
1 / 5

1. PostgreSQLda asosiy kalitning (Primary Key) asosiy vazifasi nima?