Неявные или явные отношения «многие ко многим» в prisma
Когда вы должны использовать неявную связь «многие ко многим» в prisma и когда явную связь «многие ко многим»?
Есть ли у них компромисс или что-то, что следует отметить
1 ответ
Краткий ответ: предпочитайте неявные отношения, если вам не нужно хранить дополнительную метаинформацию о самом отношении.
Например, простое отношение nm между и будет выглядеть так в неявной версии:
model Post {
id Int @id @default(autoincrement())
title String
categories Category[]
}
model Category {
id Int @id @default(autoincrement())
name String
posts Post[]
}
Теперь, если вам нужно сохранить метаданные об этом отношении, например, информацию , когдаPost
был добавлен вCategory
, вы должны создать явную версию:
model Post {
id Int @id @default(autoincrement())
title String
categories CategoriesOnPosts[]
}
model Category {
id Int @id @default(autoincrement())
name String
posts CategoriesOnPosts[]
}
model CategoriesOnPosts {
post Post @relation(fields: [postId], references: [id])
postId Int
category Category @relation(fields: [categoryId], references: [id])
categoryId Int
assignedAt DateTime @default(now())
@@id([postId, categoryId])
}
Главным компромиссом действительно является удобство . Работать с неявной связью намного проще, потому что таблица отношений поддерживается для вас «под капотом». Кроме того, с реляционными запросами в клиентском API Prisma легче работать, потому что вы сохраняете «один прыжок» вconnect
API (с явной таблицей отношений вам всегда нужно «проходить» таблицу отношений в ваших запросах Prisma Client).
Кроме того, вы можете позже преобразовать неявное отношение в явное. Таким образом, вы всегда можете начать с неявного отношения и превратить его в явное отношение позже, когда это необходимо.