Неявные или явные отношения «многие ко многим» в 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 легче работать, потому что вы сохраняете «один прыжок» вconnectAPI (с явной таблицей отношений вам всегда нужно «проходить» таблицу отношений в ваших запросах Prisma Client).

Кроме того, вы можете позже преобразовать неявное отношение в явное. Таким образом, вы всегда можете начать с неявного отношения и превратить его в явное отношение позже, когда это необходимо.

Другие вопросы по тегам