Внедрение трехсторонних отношений в Призме - PullRequest
0 голосов
/ 28 сентября 2019

Я также задавал этот вопрос на форуме Prisma .


Я новичок в Prisma.Таким образом, у меня есть трехсторонние отношения между User, Event и Role, которые я хотел бы определить.Для каждой ассоциации User и Event существует Role для этой ассоциации.Если бы я разработал таблицу базы данных для другого ORM, я бы создал таблицу event_user с user_id, event_id и role_id в качестве столбцов, чтобы связать их.

Практически, строкаэти 3 столбца должны быть уникальными.Очевидно, было бы хорошо, если бы Prisma смогла защитить эти ограничения, но очевидное решение , которое я вижу , может даже не прийти к Prisma 1.

Мой текущий дизайн состоит из следующего:

type User {
  // ...
  eventUsers: [EventUser!]!
}

type Event {
  // ...
  eventUsers: [EventUser!]!
}

type EventUser {
  role: Role!
  event: Event!
  user: User!
}

Этот дизайн сделает рендеринг всех xxWhereUniquexx непригодным для использования, что определенно затрудняет поддержание отношений.upsert s, безусловно, будет непригодным для поддержания отношений.

Как можно создать такие отношения в Prisma?


Для некоторого контекста у каждого пользователя будет списокглобальные роли, так что уже существует связь между User и Role.Вопрос касается «локальных ролей» для каждого события.

1 Ответ

0 голосов
/ 29 сентября 2019

Если у каждого пользователя уже есть значение для его соответствующих ролей, не будет необходимости в третьей таблице (если только нет дополнительной информации, которую вы хотели бы сохранить в вашем модальном слое, в этом случае тип роли должен быть втаблица ролей).

Отношения устанавливаются с помощью директивы @relation.Вы можете применить его к одной из двух таблиц в отношении, но для ясности я применил их к таблице Event .В этом примере предполагается, что пользователи могут участвовать в нескольких событиях.

Таблицы:

enum ROLE_TYPE {
 TYPE_ONE 
 TYPE_TWO
}

User {
 user_id: ID! @id
 events: [Event!]!

}

Event {
 event_id: ID! @id
 users: [User!]! @relation(link: INLINE)
}

Role {
 role_id: ID! @id
 type: ROLE_TYPE
 event: Event! @relation(link: INLINE)
 user: User! @relation(link: INLINE)
}

Подробнее об отношениях можно узнать на сайте Prisma

...