Bosh sahifa Wiki Primary key

Primary key

Primary key — relatsion jadvaldagi har bir qatorni yagona aniqlaydigan ustun yoki ustunlar majmuasidir. Uning qiymati takrorlanmaydi va NULL bo‘la olmaydi. Database primary key orqali aniq yozuvga murojaat qiladi, boshqa jadvallar esa foreign key yordamida shu yozuv bilan bog‘lanadi.

Yagonalik xususiyati

Jadvalda bir nechta unique constraint bo‘lishi mumkin, ammo primary key bittagina bo‘ladi. U bitta ustundan yoki composite key deb ataladigan bir nechta ustundan tuziladi. Masalan, talaba va kurs juftligini saqlaydigan ro‘yxatda (student_id, course_id) kombinatsiyasi primary key bo‘lishi mumkin.

CREATE TABLE enrollments (
    student_id BIGINT NOT NULL,
    course_id BIGINT NOT NULL,
    enrolled_at TIMESTAMP NOT NULL,
    PRIMARY KEY (student_id, course_id)
);

Bu yerda bitta talaba ayni kursga ikki marta bir xil bog‘lanish sifatida kiritilmaydi. Ustunlarning har biri alohida takrorlanishi mumkin, kombinatsiya esa yagona qoladi.

Natural va surrogate key

Natural key domen ichida avvaldan mavjud ma’noli qiymatga tayanadi: davlat kodi, inventar raqami yoki rasmiy identifikator. Bunday qiymat haqiqatan barqaror va yagona bo‘lsa, primary key bo‘lishi mumkin. Ammo email, telefon yoki nom vaqt o‘tishi bilan o‘zgaradi va ko‘pincha primary key uchun noqulay.

Surrogate key database uchun maxsus yaratilgan identifikatordir. Auto-increment son yoki UUID keng tarqalgan. U domen ma’nosini ifodalamaydi, lekin qatorga barqaror havola beradi. Domen yagonaligi kerak bo‘lsa, masalan email takrorlanmasligi, alohida unique constraint baribir qo‘yiladi.

Indeks va fizik saqlash

Database odatda primary key uchun unique index yaratadi. InnoDB kabi ayrim engine primary keyni clustered index sifatida ishlatadi: qator ma’lumoti primary key B-tree leaflari bilan bog‘liq saqlanadi. Secondary indexlar ham qator manzili sifatida primary key qiymatini saqlashi mumkin.

Shu sababli juda uzun composite key secondary indekslarni kattalashtiradi. Tasodifiy UUIDlar B-tree sahifalarida tarqoq insert va page splitga sabab bo‘lishi mumkin. Ketma-ket son yozishni lokal qiladi, biroq tashqi tomonga ochilsa yozuvlar sonini taxmin qilish va enumeration xavfini yuzaga keltiradi.

O‘zgarmaslik

Primary key qiymatini o‘zgartirish barcha bog‘liq foreign keylarga ta’sir qiladi. ON UPDATE CASCADE buni avtomatik tarqatishi mumkin, lekin katta bog‘lanishlarda qimmat va murakkab amal bo‘ladi. Amaliy model primary keyni qator hayoti davomida o‘zgarmas identifikator sifatida saqlaydi.

Primary key biznes obyektning butun dunyo bo‘yicha mutlaq identifikatori bo‘lishi shart emas. U jadval yoki database doirasida yagona. Taqsimlangan tizimda turli tugunlar to‘qnashmaydigan ID yaratish uchun UUID, vaqtga asoslangan yoki markazlashtirilgan generator ishlatilishi mumkin.

ID yaratish va import

Auto-increment keyni database transaction ichida yaratadi. Import qilingan yozuvlarda ID to‘qnashmasligi uchun sequence yoki auto-increment counter mavjud maksimal qiymatdan keyinga moslanadi. UUID client tomonda oldindan yaratilishi mumkin va offline yoki bir nechta writer orasida markaziy counter talab qilmaydi. Biroq UUIDni matn ko‘rinishida saqlash binary shaklga qaraganda ko‘proq joy oladi. ID formatini APIga ochish keyinchalik almashtirishni qiyinlashtiradi; tashqi public identifier bilan ichki primary key alohida bo‘lishi mumkin. Primary key qiymatini foydalanuvchi kiritmasiga to‘liq ishonib qabul qilishdan oldin format, egalik va to‘qnashuv tekshiriladi.

Bog‘liq tushunchalar

foreign key, unique constraint, composite key, surrogate key, UUID, index, relational database