我正在使用包含航班,乘客和服务请求的商业模式。
航班有乘客。乘客有零到多个服务请求。
我需要显示一个视图,显示所有在航班上有服务请求的乘客,按服务请求类型分组。乘客将在他们有服务请求的每个组中出现一次。
视图的数据需要来自Core Data。
我的问题是如何以一种方式对Core Data中的关系进行建模,以便有效地为我的视图检索数据,以及如何编写有效的获取请求。
我正在创建像这样的核心数据实体:
飞行---对很多人来说--->乘客---到很多--->服务请求
但我想知道这是否有效。一个不同的(非规范化)模型会更有意义吗?
飞行---对很多人来说--->服务请求
每个服务请求都包含乘客姓名。感谢您提供任何建议。
答案 0 :(得分:0)
我认为使用非规范化模型检索数据会有更好的表现。
您可以使用谓词来决定是否在服务请求(包括乘客姓名)列表中添加新对象。
答案 1 :(得分:0)
首先澄清Flights
和Passengers
之间的关系:Flight
有很多Passengers
,但Passenger
可能会有很多Flights
Journey
1}?如果这种关系确实很多,那么我认为你应该添加一个中间实体(例如Flight <---->> Journey <<----> Passenger
):
Journey <---->> ServiceRequest
每个旅程代表单个航班上的单个乘客(实际上可能有一些属性,例如SeatNumber)。然后,ServiceRequest将与单个Journey相关,但单个Journey可能会有许多ServiceRequests:
NSFetchedResultsController
如果您打算使用ServiceRequest
来构建表格视图,那么您可以使用ServiceRequest.Journey.Flight
作为获取的实体,并使用基于ServiceRequestType
的谓词来过滤使用sectionNameKeyPath
作为ServiceRequest.Journey.Passenger
对特定航班的结果进行分组。然后,您必须使用{{1}}来访问乘客的详细信息以供显示。遍历这些关系以获取Flight和Passenger细节会有一些开销,但您可以使用预取来最小化影响。
关于您的第二个选择,您如何为没有服务请求的乘客建模?
答案 2 :(得分:0)
根据我的经验,我认为这些模型在性能问题上是平等的。 由于在两种情况下将与航班相连的数据量相对相等。
模型1:
模型0
如果您有疑问,可以将第二个模型的关系添加到第一个模型
Flight ---to many---> Passenger ---to many---> Service Request --to one-> Flight