我有一个实体Car
和一个实体Race
。两个实体都有一个名为carClass
的属性。我的问题是我希望在加入carClass
时建立它们之间的关系。
基本上我想在核心数据中创建一个关系,它将代表竞赛的可能竞争对手,具体取决于carClass
,换句话说,如果我创建一个具有特定carClass
的竞赛并且我打电话关于那场比赛的competitors
我希望获得具有相同carClass
的车辆列表。
我的问题是,是否可以使用Core Data relations
创建,我正在考虑只为关系添加NSPredicate
。
提前致谢。
更新
我想我没有清楚地解释我想要实现的目标。
Car{
carClass:string
}
Race{
carClass:string
competitors<-->>cars.carClass == carClass
}
competitors
应该自动获取,所以我不必手动添加竞争对手,他应该从汽车模型中检索所有匹配的汽车。
答案 0 :(得分:3)
最简单的模型看起来像这样:
CarClass{
name:string
race<-->Race.carClass
cars<-->>Car.carClass
}
Car{
name:string
carClass<<-->CarClass.cars
}
Race{
name:string
carClass<-->>CarClass.race
}
不要认为这是SQL术语,用对象术语来思考它。每个实体应代表您要模拟的真实世界对象,事件或条件。对象之间的关系应该模仿现实世界的关系。如果Race
和Car
现实世界的事物都与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)
当然有可能。但是,为什么不在你开始比赛的时候检查每辆车的汽车级别,如果班级匹配的话就把汽车加入比赛?