Ios 如何在核心数据中建立二对多关系模型?

Ios 如何在核心数据中建立二对多关系模型?,ios,core-data,Ios,Core Data,我正在使用一种商业模式,包括航班、乘客和服务请求 航班有乘客。乘客有零到多个服务请求 我需要显示一个视图,显示航班上有服务请求的所有乘客,按服务请求类型分组。乘客将在其有服务请求的每个组中出现一次 视图的数据需要来自核心数据 我的问题是如何对核心数据中的关系进行建模,使其能够高效地检索视图中的数据,以及如何编写高效的获取请求 我正在继续创建如下核心数据实体: 航班到多-->乘客到多-->服务请求 但我想知道这是否有效。不同的非规范化模型是否更有意义: 航班到多个-->服务请求 其中每个服务请求将

我正在使用一种商业模式,包括航班、乘客和服务请求

航班有乘客。乘客有零到多个服务请求

我需要显示一个视图,显示航班上有服务请求的所有乘客,按服务请求类型分组。乘客将在其有服务请求的每个组中出现一次

视图的数据需要来自核心数据

我的问题是如何对核心数据中的关系进行建模,使其能够高效地检索视图中的数据,以及如何编写高效的获取请求

我正在继续创建如下核心数据实体:

航班到多-->乘客到多-->服务请求

但我想知道这是否有效。不同的非规范化模型是否更有意义:

航班到多个-->服务请求

其中每个服务请求将包括乘客姓名。谢谢你的建议。

我认为使用非规范化模型来检索数据会有更好的性能。 您可以使用谓词来决定是否在Service Request include乘客姓名列表中添加新对象。

首先,我要澄清航班和乘客之间的关系:一个航班有很多乘客,但是一个乘客可以乘坐很多航班吗?如果这种关系确实是多-多的,那么我认为你应该在旅程中添加一个中间实体,比如:

每个旅程代表一个航班上的一个乘客,实际上可能有一些属性,例如SeatNumber。然后,ServiceRequest将与单个旅程相关,但单个旅程可能有许多ServiceRequests:

Journey <---->> ServiceRequest
如果计划使用NSFetchedResultsController构建表视图,则可以使用ServiceRequest作为获取的实体,并使用基于ServiceRequest.Travely.Flight的谓词筛选特定航班的结果,使用ServiceRequestType作为sectionNameKeyPath分组。然后,您必须使用ServiceRequest.Travely.Passenger访问乘客的详细信息以进行显示。在遍历这些关系以获取航班和乘客详细信息时会有一些开销,但您可以使用预取来最小化影响


关于你的第二个选择,你将如何为那些没有服务请求的乘客建模?

根据我的经验,我认为这些模型在性能问题上是相同的。 因为在这两种情况下,连接到航班的数据量相对相等

模式1:

最小乘客数=0空航班 最大乘客=最大飞机容量 让它成为2000年吧 模型0

最小服务请求=0人 最大服务请求= 乘客x 2幸运航班 如果您有疑问,可以将第二个模型中的关系添加到第一个模型中

Flight ---to many---> Passenger ---to many---> Service Request --to one-> Flight

谢谢你的建议。我会考虑这一点,谢谢你的详细回答。在此应用程序中,乘客仅与一个航班关联。为了显示服务请求,视图只需要显示有请求的乘客。当我们需要在其他视图上显示其他乘客信息时,问题就复杂了;这会建议使用标准化模型,但我想知道性能。我现在正在做这件事,看看会怎么样。
Flight ---to many---> Passenger ---to many---> Service Request --to one-> Flight