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