Prisma ve SQL İlişkilerinde Uzmanlaşmak
Prisma, bağlantıları nasıl yönettiğini anlarsanız veritabanı çalışmalarını basitleştirir. İşte şemalar, ilişkiler ve sorgular için bir rehber.
Şema ve İlişkiler
İlişkiler, verilerinizin nasıl bağlandığını tanımlar.
- Bire-Çok (One-to-Many): Bir kullanıcının birçok gönderisi vardır. Post modeli yabancı anahtarı (authorId) tutar. User modeli ise sadece bir referans tutar.
- Çoka-Çok (Many-to-Many): Bir kullanıcı birçok projeye dahildir ve bir projenin birçok kullanıcısı vardır. Araya bir ara tablo (ProjectMember) koymanız gerekir. Bu tablo her iki taraf için de yabancı anahtarları tutar.
- Kendi Kendine İlişkiler (Self-Relations): Bir kullanıcı başka bir kullanıcıyı takip eder. Prisma'nın hangi tarafın hangisi olduğunu bilmesi için "Follower" ve "Following" gibi isimlendirilmiş ilişkiler kullanırsınız.
Temel Sorgu Yöntemleri
- findUnique: @id veya @unique alanına sahip kayıtlar için bunu kullanın. Hiçbir şey bulunamazsa null döndürür.
- findMany: Bir liste almak için bunu kullanın. Filtreleme, sıralama ve sayfalama yapabilirsiniz.
- findFirst: Tek bir kayda ihtiyacınız olduğunda ancak filtre bir benzersiz (unique) alan değilse bunu kullanın.
Where ile Filtreleme
"where" ifadesi doğrudan SQL'e eşlenir.
- Karşılaştırma: gt (büyüktür), lt (küçüktür) veya gte (büyük eşittir) kullanın.
- Metin Arama: Büyük/küçük harf duyarsız aramalar için "mode: insensitive" ile birlikte "contains" kullanın.
- Mantıksal Operatörler: Koşulları birleştirmek için OR, AND veya NOT kullanın.
- İlişki Filtreleri: Bağlı verilere göre filtreleme yapmak için "some", "every" veya "none" kullanın. "some", en az bir ilişkinin eşleştiği kayıtları bulur.
Veri Kontrolü: Select ve Include Karşılaştırması
- select: Tam olarak hangi alanların döndürüleceğini seçin. Bu, verilerinizi hafif ve güvenli tutar.
- include: İlişkili verileri sonucunuza dahil edin. Bu, iç içe geçmiş (nested) nesneleri getirir.
- Not: select ve include'u aynı seviyede kullanamazsınız. Birini seçmeniz gerekir. Ancak, birleştirilen bir ilişkiden belirli alanları seçmek için include içinde select kullanabilirsiniz.
İşlemler ve Güvenlik
- createMany: Tek seferde birçok satır oluşturun. Hızlıdır ancak iç içe yazma (nested writes) işlemlerini desteklemez.
- upsert: Kayıt varsa günceller, yoksa oluşturur. Alışveriş sepetleri için harikadır.
- update: Sayıları hatasız bir şekilde değiştirmek için increment veya decrement gibi atomik işlemler kullanın.
- $transaction: Birden fazla yazma işlemini gruplandırın. Eğer bir parça başarısız olursa, tüm grup geri alınır (rollback). Bu, kısmi veri hatalarını önler.
Sayfalama
Sayfaları oluşturmak için "take" ve "skip" parametrelerini birleştirin.
- take: Kaç kaydın gösterileceği.
- skip: Kaç kaydın atlanacağı.
Kaynak: https://dev.to/chinwuba_jeffrey/understanding-prisma-and-sql-relationships-schema-and-querying-l7k