【问题标题】:Core Data model Design - Inverse relationship核心数据模型设计 - 反向关系
【发布时间】:2012-04-22 22:52:03
【问题描述】:

在为我的应用程序建模实体之间的关系时,我有一个基本的设计问题。 Apple doc 指出反向关系对数据库完整性非常重要。我有三个实体,Team,Player,Match 有以下关系

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

上面的关系很简单,一个Team可以有很多玩家,一个Player可以属于多个团队。

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

在我的 Match 实体中,我有两个属性 homeTeam 和 awayTeam。目前,他们的目的地设置为没有反向关系的团队。尽管应用程序有效,但我不喜欢与团队比赛没有反向关系的事实。 因此,我试图弄清楚为 Team 实体设置反向关系的最佳方法是什么。另外,我不能在球队之间建立一对一的反向关系,因为一个球队可以打很多场比赛。所以,我最初的想法是我可以在 Team 中有一个属性匹配,并使它们与 Match 成反比关系。这种情况会奏效吗?还是我需要在 Team 中创建两个反向关系属性,例如 homeMatches、awayMatches?

感谢您的任何想法。

贾维德

【问题讨论】:

    标签: ios core-data


    【解决方案1】:

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

    是的。反向关系需要反映原始关系。

    要了解原因,请考虑如果您在 Team 上有一个 matches 关系会发生什么情况,该关系被设置为 homeTeamMatch 上的 awayTeam 的倒数:对于一个方向看起来没问题关系——调用allStarGame.awayTeam = redTeam 应该将aMatch 添加到redTeammatches 关系中。但是当你反过来做时会发生什么?也就是说,如果你打电话给[redTeam addMatchesObject:allStarGame],allStarGame 的哪个关系会被使用?它是未定义的......这就是为什么每个关系都需要一个不同的逆。

    【讨论】:

    • 感谢您的评论。这是有道理的。
    【解决方案2】:

    我认为你的 homeMatches, awayMatches 想法应该很有效。

    让我感到震惊的另一件事是你的关系,其中一名球员属于多个球队。我认为这不应该同时适用于多支球队,这表明您可能想要在中间放置一张桌子(可能称为 RosterEntry)来描述一名球员在一支球队的时间。然后,团队和玩家将通过 RosterEntry 一对多。

    【讨论】:

    • 其实你刚刚提出了一个很好的观点。我刚刚意识到我并没有处理这种混淆,即一个球员最终可能会在两支球队中相互竞争。但是,我认为如果一个球员存在于两支球队中,只要他们不互相对抗,这应该不是问题。感谢您的 cmets。
    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    相关资源
    最近更新 更多