在CoreData中建立关系
问题描述:
我有玩家实体和游戏实体。在CoreData中建立关系
一个玩家到很多游戏关系。
所以玩家有位置属性
- 进攻
- 防御
当我创建的球员,该球员加入到我设置的位置进攻还是防守球队。
但是对于不同的游戏,玩家可以拥有进攻位置或防守位置,并且该位置不能被球队中的球员覆盖。所以如果我创造了位置进攻的第10号球员,它不能被修改,因为球队中的每个球员都占据了位置。但是对于游戏,如果我们想要的话,我们可以为玩家设置新的位置。因此,假设对于id = 10的游戏,我拥有id = 7的球员,其位置=进攻,但是我希望这个球员id = 7的球员对于id = 12的游戏拥有阵地防守。
对于游戏ID为10,我们有位置的进攻球员
Game
id = 10
player.id = 7
player.position = offense
ID为12的比赛,我们有相同的玩家
Game
id = 12
player.id = 7
player.position = defense
所以阵地防御正如你可以看到我用不同的游戏,但使用相同的播放器,如果我将设置新的参数player.position我会覆盖previ这个价值并不好,因为它会存储最新的位置,当我获得玩家时,我将拥有最后修改位置的玩家。
我想使这是在接下来的方式:
我的球员的实体,所以做出对短号游戏中每个玩家不同的位置,我需要复制这个实体,并设置我想要的位置,但问题那就是我会重复玩家,并且它不好,因为更好的方式是为每个游戏使用相同的玩家(一个玩家),并有另一个对象来保存具体玩家的具体游戏参数。
它有道理吗?或者,也许我需要另一种方法来解决这个问题。无论如何,我认为最好的方式是不要复制玩家。
答
我对这些情况的解决方案应该是这样的
Game
id = 10
player.id = 7
playerSkill.position = offense
playerSkill.idPlayer = 7
playerSkill.speed = 9
Player
id
name
nationality
...
PlayerSkill
position
idPlayer
speed
....
所以你必须每场比赛,他的技能的球员,你可以创建同一个玩家的新游戏,并创建新的技能
您是否考虑过使用实体“玩家属性”或“玩家技巧”来保存数据,如位置和其他属性以及player.id?而你的实体游戏喜欢这个游戏 ID = 10 player.id = 7 playerSkill.position =进攻 playerSkill.idplayer = 7 playerSkill.speed = 9 .... ???? –
不知道我完全理解这个设置,但也许你可以在游戏和玩家之间引入第三个实体,也许称之为PlayerPosition。它会提及游戏和玩家,以及玩家对比赛的位置。通过这种方式,玩家的原始位置将被单独保留,然后您可以查询他在防守时所扮演的角色。 –
@ SonGoku68是的,我认为每个玩家应该有一对多的关系。在你的建议中,一个玩家将拥有许多技能。我对吗?我会为每个游戏参数化这个技能。正确? –