核心数据与谓词的关系

时间:2011-04-30 12:43:07

标签: iphone objective-c core-data entity-relationship nspredicate

我有一个实体Car和一个实体Race。两个实体都有一个名为carClass的属性。我的问题是我希望在加入carClass时建立它们之间的关系。

基本上我想在核心数据中创建一个关系,它将代表竞赛的可能竞争对手,具体取决于carClass,换句话说,如果我创建一个具有特定carClass的竞赛并且我打电话关于那场比赛的competitors我希望获得具有相同carClass的车辆列表。

我的问题是,是否可以使用Core Data relations创建,我正在考虑只为关系添加NSPredicate

提前致谢。

更新

我想我没有清楚地解释我想要实现的目标。

Car{
  carClass:string
}

Race{
 carClass:string
 competitors<-->>cars.carClass == carClass
}

competitors应该自动获取,所以我不必手动添加竞争对手,他应该从汽车模型中检索所有匹配的汽车。

2 个答案:

答案 0 :(得分:3)

最简单的模型看起来像这样:

CarClass{
    name:string
    race<-->Race.carClass
    cars<-->>Car.carClass
}

Car{
    name:string
    carClass<<-->CarClass.cars
}

Race{
    name:string
    carClass<-->>CarClass.race
}

不要认为这是SQL术语,用对象术语来思考它。每个实体应代表您要模拟的真实世界对象,事件或条件。对象之间的关系应该模仿现实世界的关系。如果RaceCar现实世界的事物都与CarClass条件存在共同关系,那么您只需将其放入模型中即可。

与SQL不同,对象模型可以是任意复杂的,它们也可以包含行为。你不只是坚持使用表格,列和行。

更新

请参阅OP中的更新以供参考

当您发现自己将相同的属性值放在两个或多个不同的实体中时,通常意味着您需要创建一个新实体来对该值进行建模。

在这种情况下,即使在数据方面,carClass值只是一个字符串 逻辑上 ,但它与Race两者完全相同。和Car个对象。因此,要准确地对其进行建模,您需要为其提供单独的实体。此外,您需要为竞争对手建模,因此您需要一个类似于:

的模型
CarClass{
    class:string
    race<-->Race.carClass
    cars<-->>Car.carClass
}

Car{
    name:string
    carClass<<-->CarClass.cars
    competitor<-->>Competitor.car
}

Race{
    name:string
    carClass<-->CarClass.race
}

Competitor{
  name:string
  car<-->Car.competitor
}

(请注意,此模型假设所有比赛均由他们的carClass定义,而不是单个车辆或司机。)

因此,要找到特定种族的所有参赛者,您可以走Race.carClass.cars.competitor

这可能不是您想要的,但您可以了解或如何使用实体和关系来模拟现实世界中的对象,事件或条件以及它们之间的联系。

答案 1 :(得分:1)

当然有可能。但是,为什么不在你开始比赛的时候检查每辆车的汽车级别,如果班级匹配的话就把汽车加入比赛?