2014-03-06 140 views
0

我有玩家实体和游戏实体。在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这个价值并不好,因为它会存储最新的位置,当我获得玩家时,我将拥有最后修改位置的玩家。

我想使这是在接下来的方式:

我的球员的实体,所以做出对短号游戏中每个玩家不同的位置,我需要复制这个实体,并设置我想要的位置,但问题那就是我会重复玩家,并且它不好,因为更好的方式是为每个游戏使用相同的玩家(一个玩家),并有另一个对象来保存具体玩家的具体游戏参数。

它有道理吗?或者,也许我需要另一种方法来解决这个问题。无论如何,我认为最好的方式是不要复制玩家。

+0

您是否考虑过使用实体“玩家属性”或“玩家技巧”来保存数据,如位置和其他属性以及player.id?而你的实体游戏喜欢这个游戏 ID = 10 player.id = 7 playerSkill.position =进攻 playerSkill.idplayer = 7 playerSkill.speed = 9 .... ???? –

+0

不知道我完全理解这个设置,但也许你可以在游戏和玩家之间引入第三个实体,也许称之为PlayerPosition。它会提及游戏和玩家,以及玩家对比赛的位置。通过这种方式,玩家的原始位置将被单独保留,然后您可以查询他在防守时所扮演的角色。 –

+0

@ SonGoku68是的,我认为每个玩家应该有一对多的关系。在你的建议中,一个玩家将拥有许多技能。我对吗?我会为每个游戏参数化这个技能。正确? –

回答

1

我对这些情况的解决方案应该是这样的

Game 
id = 10 
player.id = 7 
playerSkill.position = offense 
playerSkill.idPlayer = 7 
playerSkill.speed = 9 

Player 
id 
name 
nationality 
... 

PlayerSkill 
position 
idPlayer 
speed 
.... 

所以你必须每场比赛,他的技能的球员,你可以创建同一个玩家的新游戏,并创建新的技能