在不改变原始字段的情况下更改相关字段

change a related field without mutating the original one

我有这个架构:

type Game {
  id: ID! @id
  status: Boolean @default(value: false)
  time: DateTime!
  location: String!
  stadium: String!
  teams: [Team!]! @relation(name: "BothTeams")
}
type Team {
  id: ID! @id
  name: String!
  abbrName: String!
  teamLogo: String!
  score: Int @default(value: 0)
  games: [Game!]! @relation(name: "BothTeams")
}

游戏类型 return 通常是两支球队,每支球队都有一个得分场。

所以如果我想稍后更新游戏,特别是分数字段,

我将不得不改变换了那支球队的每场比赛的比分。

那么,有没有办法在不改变原始分数的情况下更改特定游戏的分数。

从概念上讲,score 并不是特定团队的 属性。您希望将其表示为与 团队和游戏相关联的单独实体。一种方法:

type Game {
  id: ID! @id
  status: Boolean @default(value: false)
  time: DateTime!
  location: String!
  stadium: String!
  teams: [Team!]! @relation(name: "BothTeams")
  scores: [Score!]! @relation(name: "ScoresByGame")
}
type Team {
  id: ID! @id
  name: String!
  abbrName: String!
  teamLogo: String!
  games: [Game!]! @relation(name: "BothTeams")
}
type Score {
  id: ID! @id
  value: Int @default(value: 0)
  team: Team @relation(name: "ScoreTeam")
}

或者代替 scores,您可以有一个 homeScore 字段和一个 awayScore 字段。无论哪种方式,您都会有一个 Score 节点,您可以在不影响其他游戏的情况下对其进行变异。 Team 的任何其他属性可能因每个游戏而异,应以类似方式对待(例如,如果您想包括玩家玩该特定游戏的内容)。