T
Tural ƏhmədovMüəllif
tural.ahmadov@example.comPrisma ORM ilə Əlaqələrin (Relations) İdarəsi və Referensial Bütövlük
One-to-Many və Many-to-Many əlaqələrdə kaskad silinmələr, indekslər və SQL optimizasiyası qaydaları.
Obyekt-Əlaqəli Xəritələmə (ORM) alətləri arasında Prisma öz aydın və oxunaqlı sxem dili ilə fərqlənir. Lakin modellər arasında əlaqələr qurarkən diqqətsiz davranmaq verilənlər bazasında yetim (orphan) qeydlərin yaranmasına və ya bütöv məlumatların təsadüfən silinməsinə səbəb ola bilər.
📌 1. 'onDelete' Strategiyaları:
Məsələn, 'User' və 'Post' modeli arasındakı əlaqəni quraq:
model Post {
authorId String?
author User? @relation(fields: [authorId], references: [id], onDelete: SetNull)
}
Burada üç əsas seçim var:
- Cascade: İstifadəçi silinəndə onun yazdığı bütün məqalələr də bazadan birdəfəlik silinir. Şəxsi qeydlər üçün yaxşıdır, amma ictimai bloq üçün təhlükəlidir.
- SetNull: İstifadəçi silinsə belə, onun məqalələri bazada qalır, sadəcə 'authorId' sahəsi 'null' olur. Bloqumuzda məhz bu qayda seçilib ki, dəyərli yazılar itməsin.
- Restrict: Əgər istifadəçinin hər hansı bir məqaləsi varsa, baza həmin istifadəçini silməyə icazə vermir və xəta atır.
📌 2. N+1 Sorğu Probleminin Qarşısının Alınması
Klassik ORM-lərdə 10 məqalə gətirib hər birinin müəllifini dövrdə oxuyanda bazaya 11 dənə sorğu gedirdi.
Prisma daxili 'Query Engine' ilə bunu avtomatik optimallaşdırır: ya tək bir 'LEFT JOIN' sorğusu formalaşdırır, ya da iki sorğu ataraq məlumatları yaddaşda birləşdirir.
Həmişə 'select' istifadə edərək yalnız lazım olan əlaqəli sahələri (məsələn, 'author: { select: { name: true } }') çəkmək ən yaxşı mühəndislik vərdişidir.
←Bütün yazılara qayıtKateqoriya: Database