我还在Prisma forum上问了这个问题。
**编辑**:在我提问后仅1天,该论坛就被锁定为只读状态。肯定会感到恐惧,因为没有官方宣布他们是否会在实现承诺的功能后停止开发Prisma 1。他们当然可以说些什么。而TBH,尽管回购中的星星数量众多,但不稳定的Prisma网站确实增加了我对Prisma的动摇信心。
我是Prisma的新手。因此,我想定义User
,Event
和Role
之间的三向关系。对于User
和Event
的每个关联,该关联存在一个Role
。如果要为另一个ORM设计数据库表,则应该创建一个event_user
表,其中将user_id
,event_id
和role_id
作为与它们相关联的列。
实际上,这三列中的一行必须是唯一的。显然,Prisma可以维护这些约束会很好,但是obvious solution I see甚至可能没有来到Prisma 1。
我当前的设计包括以下内容:
type User {
// ...
eventUsers: [EventUser!]!
}
type Event {
// ...
eventUsers: [EventUser!]!
}
type EventUser {
role: Role!
event: Event!
user: User!
}
此设计将使所有xxWhereUniquexx
无法使用,这无疑是维护关系的麻烦。 upsert
肯定无法用于维持关系。
如何在Prisma中建立这样的关系?
在某些情况下,每个用户也会有一个全局角色列表,因此User
和Role
之间已经存在关联。这个问题关系到每个事件的“本地角色”。
答案 0 :(得分:1)
如果每个用户已经具有各自角色的值,则不需要第三张表(除非您希望将更多信息存储在模式层中,在这种情况下,角色类型应位于角色表)。
使用@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)
}
您可以了解有关site棱镜的更多信息