Tüm makaleler
Eğitim

Prisma Şemalarını Otomatik Oluşturma: Pratik Bir Kılavuz

Prisma şemalarını elle yazmayı bırakın. AI şema üretiminin nasıl çalıştığını, neyi doğru yaptığını ve edge case'leri nasıl yöneteceğinizi öğrenin.

Murat DUMLU24 Şubat 20265 dk okuma

Prisma, Node.js ve TypeScript projeleri için baskın ORM haline geldi — bunun iyi nedenleri var. Şema dili okunabilir, migration sistemi güvenilir ve Prisma Client kutunun dışında tip güvenli veritabanı erişimi sağlıyor.

Ancak birden fazla entity, ilişki ve kısıtlamaya sahip yeni bir proje için Prisma şemalarını elle yazmak sıkıcıdır. İlişki sözdizimini tam olarak doğru almanız, yabancı anahtarlar için indeks eklemeyi hatırlamanız ve alan türlerinizin hedef veritabanıyla doğru eşleştiğinden emin olmanız gerekir. AI üretimi bunların tümünü halledebilir.

Oluşturulan Şema Nasıl Görünür

Kullanıcılar, takımlar ve projeler içeren bir SaaS uygulaması için şunu tanımlayabilirsiniz:

"Kullanıcılar bir takıma aittir. Takımların çok sayıda projesi vardır. Projelerin kullanıcılara atanabilen görevleri vardır."

Oluşturulan şema:

model User {
  id        String   @id @default(cuid())
  email     String   @unique
  name      String
  teamId    String
  team      Team     @relation(fields: [teamId], references: [id])
  tasks     Task[]
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt

  @@index([teamId])
  @@map("users")
}

model Team {
  id        String    @id @default(cuid())
  name      String
  users     User[]
  projects  Project[]
  createdAt DateTime  @default(now())
  updatedAt DateTime  @updatedAt

  @@map("teams")
}

model Project {
  id        String   @id @default(cuid())
  name      String
  teamId    String
  team      Team     @relation(fields: [teamId], references: [id])
  tasks     Task[]
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt

  @@index([teamId])
  @@map("projects")
}

model Task {
  id          String   @id @default(cuid())
  title       String
  completed   Boolean  @default(false)
  projectId   String
  project     Project  @relation(fields: [projectId], references: [id], onDelete: Cascade)
  assigneeId  String?
  assignee    User?    @relation(fields: [assigneeId], references: [id])
  createdAt   DateTime @default(now())
  updatedAt   DateTime @updatedAt

  @@index([projectId])
  @@index([assigneeId])
  @@map("tasks")
}

Üreticinin otomatik olarak yönettiği ayrıntılara dikkat edin: CUID tanımlayıcılar, her modelde zaman damgaları, her yabancı anahtarda indeks, uygun yerlerde cascade silme, null olabilen isteğe bağlı ilişkiler ve tablo adı eşleme.

Üretimden Sonra Gözden Geçirilecekler

AI üretimi yapıyı güvenilir biçimde doğru yapar. Bu alanları elle gözden geçirin:

  • Cascade davranışı: onDelete kurallarının veri saklama gereksinimlerinizle örtüşüp örtüşmediğini kontrol edin.
  • Benzersiz kısıtlamalar: Belirli alan kombinasyonlarının benzersiz olması gerekiyorsa (ör. takım başına bir kullanıcı), @@unique'i elle ekleyin.
  • Enum değerleri: Oluşturulan enum'lar makul varsayılanlar kullanır; etki alanı sözlüğünüze uyması için değerleri özelleştirin.
  • İndeksler: Yoğun trafik alan tablolar için sık filtrelediğiniz alanlara indeks eklemeyi düşünün (ör. status, createdAt).

Migration Çalıştırmak

Şemadan memnun olduğunuzda, standart Prisma yöntemiyle migration'ları çalıştırın:

npx prisma migrate dev --name init

Oluşturulan Prisma şeması geçerli ve üretime hazır bir başlangıç noktasıdır. Gereksinimler geliştikçe onu genişleteceksiniz — ancak sıkıcı temeli elle yazmak zorunda kalmayacaksınız.

AI ile SaaS'ınızı oluşturmaya hazır mısınız?

Tek bir prompttan eksiksiz bir NestJS + Prisma backend oluşturun — ücretsiz deneyin.

Ücretsiz başla