如何为多对多关系添加附加属性
How to add additional attribute to many-to-many relationship
我有一个数据库可以跟踪我的(注册)用户。每个用户都可以(默认情况下)是团队的一部分。一个团队将多个用户组合在一起。
由于用户可以属于多个团队,我希望他们能够打开和关闭某些团队。关闭后,团队的数据将不会在前端显示给该用户。开启多个组织时,所有数据同时显示。
所以我的问题是:我应该如何从架构上着手?有没有“正确”的做事方式?我将 Prisma 与 Planetscale (MySQL) 数据库一起使用,但我也非常感谢任何理论答案。
在 Prisma 中,我的(简化的)架构目前看起来像这样:
model User {
id String @id @default(cuid())
name String?
teams Team[]
}
model Organization {
id String @id @default(cuid())
name String
users User[]
}
从技术上讲,我认为我只想将团队标记为“活跃”或“不活跃”,但我不知道如何准确地做到这一点。简单地向团队添加一个 active Boolean
属性是行不通的,因为我无法分辨适用于哪个用户,对吗?
据我所知,唯一可行的方法是在我的用户 table 上同时拥有 ActiveTeam 参考和 InactiveTeam 参考,而不仅仅是团队参考。虽然这看起来确实不必要地复杂,但我希望有一种更简单的方法。
正如 @Barmar
所说,您可以使用联结 table 来完成此操作。
架构将如下所示:
model User {
id String @id @default(cuid())
name String?
userTeams User_Team[]
}
model Team {
id String @id @default(cuid())
name String?
userTeams User_Team[]
}
model User_Team {
userId String
user User @relation(fields: [userId], references: [id])
teamId String
team Team @relation(fields: [teamId], references: [id])
isActive Boolean
@@id([userId, teamId])
}
// Your other models ...
我有一个数据库可以跟踪我的(注册)用户。每个用户都可以(默认情况下)是团队的一部分。一个团队将多个用户组合在一起。
由于用户可以属于多个团队,我希望他们能够打开和关闭某些团队。关闭后,团队的数据将不会在前端显示给该用户。开启多个组织时,所有数据同时显示。
所以我的问题是:我应该如何从架构上着手?有没有“正确”的做事方式?我将 Prisma 与 Planetscale (MySQL) 数据库一起使用,但我也非常感谢任何理论答案。
在 Prisma 中,我的(简化的)架构目前看起来像这样:
model User {
id String @id @default(cuid())
name String?
teams Team[]
}
model Organization {
id String @id @default(cuid())
name String
users User[]
}
从技术上讲,我认为我只想将团队标记为“活跃”或“不活跃”,但我不知道如何准确地做到这一点。简单地向团队添加一个 active Boolean
属性是行不通的,因为我无法分辨适用于哪个用户,对吗?
据我所知,唯一可行的方法是在我的用户 table 上同时拥有 ActiveTeam 参考和 InactiveTeam 参考,而不仅仅是团队参考。虽然这看起来确实不必要地复杂,但我希望有一种更简单的方法。
正如 @Barmar
所说,您可以使用联结 table 来完成此操作。
架构将如下所示:
model User {
id String @id @default(cuid())
name String?
userTeams User_Team[]
}
model Team {
id String @id @default(cuid())
name String?
userTeams User_Team[]
}
model User_Team {
userId String
user User @relation(fields: [userId], references: [id])
teamId String
team Team @relation(fields: [teamId], references: [id])
isActive Boolean
@@id([userId, teamId])
}
// Your other models ...