Foreign key
Ushbu qo'llanmada siz PostgreSQL foreign keyi va foreign key cheklovlaridan foydalangan holda jadvallarning foreign keylarini qanday qo'shish mumkinligi haqida bilib olasiz.
PostgreSQL-da foreign key boshqa jadvaldagi qatorni noyob tarzda identifikatsiya qiluvchi jadvaldagi ustun yoki ustunlar guruhidir.
Foreign key primary keyga yoki havola qilingan jadvalning unique chekloviga murojaat qilish orqali ikkita jadvaldagi ma'lumotlar o'rtasida bog'lanishni o'rnatadi.
Foreign keyni o'z ichiga olgan jadval havolalar jadvali yoki bolalar jadvali deb ataladi. Aksincha, foreign key bilan havola qilingan jadval havola qilingan jadval yoki ota-jadval deb nomlanadi.
Foreign keylarning asosiy maqsadi relyatsion ma'lumotlar bazasida havolalar yaxlitligini ta'minlash, ota-ona va pastki jadvallar o'rtasidagi munosabatlarning haqiqiyligini ta'minlashdir.
Masalan, foreign key havola qilingan jadvalga mos qiymatlarga ega bo'lmagan qiymatlarni kiritishni oldini oladi.
Bundan tashqari, foreign key asosiy jadvalda o'zgarishlar sodir bo'lganda, bolalar jadvalidagi tegishli qatorlarni avtomatik ravishda yangilash yoki o'chirish orqali barqarorlikni saqlaydi.
Jadval boshqa jadvallar bilan aloqasiga qarab bir nechta foreign keylarga ega bo'lishi mumkin.
Foreign keyini aniqlash uchun siz foreign key cheklovidan foydalanishingiz mumkin.
PostgreSQL foreign keyni cheklash sintaksisi
foreign keyni cheklash sintaksisiQuyida foreign key cheklovi sintaksisi tasvirlangan:
[CONSTRAINT fk_name]
FOREIGN KEY(fk_columns)
REFERENCES parent_table(parent_key_columns)
[ON DELETE delete_action]
[ON UPDATE update_action]Ushbu sintaksisda:
Birinchidan,
CONSTRAINTkalit so'zidan keyinforeign keycheklovi nomini belgilang.CONSTRAINTbandi ixtiyoriy. Agar siz uni o'tkazib yuborsangiz, PostgreSQL avtomatik yaratilgan nomni tayinlaydi.Ikkinchidan,
FOREIGN KEYkalit so'zlaridan keyin qavslar ichida bir yoki bir nechtaforeign keyustunlarini belgilang.Uchinchidan,
REFERENCESbandidagiforeign keyustunlari tomonidan havola qilingan asosiy jadval va asosiy kalit ustunlarini belgilang.Nihoyat,
ON DELETEvaON UPDATEbandlarida kerakli o'chirish va yangilash amallarini belgilang.
Yo'q qilish va yangilash harakatlari ota-ona jadvalidagi asosiy kalit o'chirilganda va yangilanganda xatti-harakatlarni aniqlaydi.
Asosiy kalit kamdan-kam yangilanganligi sababli, ON UPDATE action amalda kamdan-kam qo'llaniladi. Biz e'tiborni ON DELETE amaliga qaratamiz.
PostgreSQL quyidagi amallarni qo'llab-quvvatlaydi:
SET NULLSET DEFAULTRESTRICTNO ACTIONCASCADE
PostgreSQL foreign key constraint examples
foreign key constraint examplesQuyidagi bayonotlar customers va contacts jadvallarini yaratadi:
Bu misolda customers jadvali ota-ona jadvali, contacts jadvali esa bolalar jadvalidir.
Har bir mijoz nol yoki ko'p kontaktga ega va har bir kontakt nol yoki bitta mijozga tegishli.
contacts jadvalidagi customer_id ustuni customers jadvalidagi bir xil nomdagi asosiy kalit ustuniga havola qiluvchi foreign key ustunidir.
contacts jadvalidagi fk_customer foreign key cheklovi customer_id ni foreign key sifatida belgilaydi:
Foreign key cheklovida ON DELETE va ON UPDATE amallari mavjud emasligi sababli ular sukut bo'yicha NO ACTION ga o'rnatiladi.
NO ACTION
Quyidagilar customers va contacts jadvallariga ma'lumotlarni kiritadi:
Quyidagi bayonot customers jadvalidan mijoz identifikatori 1ni o'chiradi:
ON DELETE NO ACTION tufayli PostgreSQL cheklovni buzadi, chunki mijoz identifikatori 1 ning havola qatorlari hali ham contacts jadvalida mavjud:
RESRICT amali NO ACTIONga o'xshaydi. Farq faqat foreign key cheklovi INITIALLY DEFERRED yoki INITIALLY IMMEDIATE DEFERRABLE rejimi bilan foreign key cheklovi belgilaganingizdagina yuzaga keladi. Kelgusi darsda bu haqda ko'proq gaplashamiz.
SET NULL
SET NULL, ota-jadvaldagi havola qilingan satrlar o'chirilganda, avtomatik ravishda NULLni pastki jadvalning havola qiluvchi satrlaridagi foreign key ustunlariga o'rnatadi.
Birinchidan, namunaviy jadvallarni tashlang va ularni ON DELETE bandidagi SET NULL amalidan foydalanadigan foreign key yordamida qayta yarating:
Ikkinchidan, customers va contacts jadvallariga ma'lumotlarni kiriting:
Uchinchidan, customers jadvalidan 1 identifikatorli mijozni o'chirib tashlang:
ON DELETE SET NULL amali tufayli contacts jadvalidagi havola satrlari NULLga o'rnatiladi.
Nihoyat, contacts jadvalidagi ma'lumotlarni ko'rsating:
Chiqish:
Chiqish shuni ko'rsatadiki, mijoz identifikatori 1 qiymatlari NULLga o'zgargan.
CASCADE
ON DELETE CASCADE ota-jadvaldagi havola qilingan satrlar o'chirilganda, bolalar jadvalidagi barcha havola qiluvchi qatorlarni avtomatik ravishda o'chiradi. Amalda, ON DELETE CASCADE eng ko'p ishlatiladigan variant hisoblanadi.
Quyidagi bayonotlar fk_customerning CASCADE ga o'zgartirishlarini o'chirish amali bilan namunaviy jadvallarni qayta yaratadi:
Quyidagi bayonot mijoz identifikatori 1ni o'chirib tashlaydi:
ON DELETE CASCADE amali tufayli contacts jadvalidagi barcha havola qatorlari avtomatik ravishda oʻchiriladi:
Chiqish:
SET DEFAULT
ON DELETE SET DEFAULT ota-jadvaldagi havola qilingan satrlar o'chirilganda, ichki jadvaldagi havola qiluvchi qatorlarning foreign key ustuniga standart qiymatni o'rnatadi.
Mavjud jadvalga foreign key cheklovini qo'shing
foreign key cheklovini qo'shingMavjud jadvalga foreign key cheklovini qo'shish uchun siz ALTER TABLE bayonotining quyidagi shaklidan foydalanasiz:
Mavjud jadvalga ON DELETE CASCADE opsiyasi bilan foreign key cheklovini qo'shganda, siz quyidagi amallarni bajarishingiz kerak:
Birinchidan, mavjud Foreign keyi cheklanishini bekor qiling:
Ikkinchidan, ON DELETE CASCADE amali bilan yangi foreign key cheklovini qoʻshing:
Xulosa
Ikki jadval o'rtasidagi ma'lumotlarning yaxlitligi va izchilligini ta'minlash uchun tashqi kalitlardan foydalaning.
Jadval yaratishda tashqi kalit cheklovini aniqlash uchun
FOREIGN KEYcheklovidan foydalaning.Mavjud jadvalga tashqi kalit cheklovini qo'shish uchun
ALTER TABLE ... ADD CONSTRAINT ... FOREIGN KEYdan foydalaning.
Last updated
Was this helpful?