核心数据模型设计 - 反向关系

时间:2012-04-10 16:05:33

标签: ios core-data

我在为应用程序实体之间的关系建模时遇到了一个基本的设计问题。 Apple doc声明反向关系对数据库完整性非常重要。我有三个实体,团队,玩家,匹配以下关系

Team <--->> Player
Player <--->> Team

上述关系很简单,团队可以有很多玩家,玩家可以属于多个团队。

Match:
homeTeam <---> Team
awayTeam <---> Team

在我的Match实体中,我有两个属性homeTeam和awayTeam。目前,他们的目的地设置为没有反向关系的团队。尽管应用程序有效但我不喜欢与团队匹配没有反向关系的事实。 所以,我试图找出为Team实体设置反向关系的最佳方法。此外,我无法在团队之间建立一对一的反向关系,因为团队可以进行多场比赛。所以,我最初的想法是我可以在Team中拥有属性匹配并使它们与Match匹配。这种情况会起作用吗?或者我是否需要创建两个反向关系属性,例如homeMatches,在Team中使用awayMatches?

感谢您的任何想法。

Javid

2 个答案:

答案 0 :(得分:1)

  

我是否需要创建两个反向关系属性,例如homeMatches,Team中的awayMatches?

烨。反向关系需要反映原始关系。

要了解原因,请考虑如果matches上的Team关系被设置为homeTeamawayTeam {{1}的倒数,会发生什么情况对于关系的一个方向看起来没问题 - 调用Match应该将allStarGame.awayTeam = redTeam添加到aMatch的{​​{1}}关系。但是当你以相反的方式做到这一点时会发生什么?也就是说,如果你打电话给redTeam,那么所有StarGame的关系都会被使用?这是未定义的...这就是为什么每个关系都需要一个明显的反转。

答案 1 :(得分:0)

我认为你的主页,远离匹配的想法应该运作良好。

跳出来的另一件事是你的球员属于不止一支球队的关系。我认为对于多个团队来说,这不应该是真的,这表明你可能想要一些中间的表(可能称为RosterEntry)来描述一个玩家与一个团队的时间。然后团队和玩家将与RosterEntry一对多。