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ışı:
onDeletekuralları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.