【问题标题】:Implementing 3 way relationship in Prisma在 Prisma 中实现 3 向关系
【发布时间】:2020-01-28 11:48:18
【问题描述】:

我也在Prisma forum上问过这个问题。

** 编辑**:论坛在我提出问题后仅 1 天就被锁定为只读。这肯定会变得很可怕,因为没有官方宣布他们是否会在实现承诺的功能后停止开发 Prisma 1。他们当然可以说些什么。 TBH,不稳定的 Prisma 网站确实增加了我对 Prisma 的信心,尽管他们的 repo 中有很多明星。


我是 Prisma 的新手。所以我想定义UserEventRole 之间的三向关系。对于UserEvent 的每个关联,都存在该关联的Role。如果我要为另一个 ORM 设计一个数据库表,我会创建一个 event_user 表,其中 user_idevent_idrole_id 作为列来关联它们。

实际上,这 3 列中的一行必须是唯一的。显然,如果 Prisma 能够保护这些约束,那就太好了,但 obvious solution I see 甚至可能不会出现在 Prisma 1 中。

我目前的设计包括以下内容:

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

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

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

这样的设计会让所有xxWhereUniquexx的渲染都无法使用,这绝对是维护关系的麻烦。 upserts 肯定无法维持关系。

如何在 Prisma 中建立这样的关系?


在某些情况下,每个用户也会有一个全局角色列表,因此UserRole 之间已经存在关联。问题涉及每个事件的“本地角色”。

【问题讨论】:

    标签: prisma


    【解决方案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)
    }
    

    您可以在 Prisma site 上阅读有关关系的更多信息

    【讨论】:

    • 好的,所以我看到此设置的唯一缺点是我需要手动管理Roles,否则,用户与事件的关系可能没有作用。老实说,我在等github.com/prisma/prisma/issues/3060。但似乎 Prisma 回购的开发已经放缓。
    • 老实说,我个人目前正在考虑这样的事情。
    • 你试过了吗?如果这回答了您的问题,请考虑投票。
    • 很抱歉,在目前的限制下,我想我还在探索更多的解决方案。我不确定 Prisma 2 何时发布,或者阻碍更好实施的问题是否会在 Prisma 1 中得到解决。但我离题了。
    • 我正在寻找是否存在用户和事件关系的约束必须具有角色的解决方案。并且用户只能与具有特定角色的 1 个事件唯一地连接。
    猜你喜欢
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 2023-03-31
    • 2021-07-06
    相关资源
    最近更新 更多