在核心数据中存储上下文属性的最佳方式?

Best Way to Store Contextual Attributes in Core Data?

我正在使用 Core Data 来存储 objects。对我来说,根据上下文为每个 object 存储不同属性值的最有效可能性是什么(即最佳执行效率、所需代码最少、最简单以及与现有 functions/libraries/frameworks 的最大兼容性),知道上下文不能是 pre-defined,会是大量的并且经常被用户编辑吗?

示例:

一个 Object 是一个人(潜在的 =Employer / =Employee)

每个人都为其他几个人工作,并且在他们的工作关系中拥有不同的头衔,并且他们的头衔可能会从一年更改为另一年(如果这个细节很重要:每个人也可以同时雇用一个或几个其他人人,这就是为什么一个人是雇员但也可能是雇主的原因)

所以我的 object 的一个属性是“职位 vs 雇主 vs 结束年份”

根据我目前的知识,我能做的最好的事情就是将所有三个元素一起保存为一个字符串,这将是分配给每个 object 的属性值,并不断解析该字符串以便能够使用它,但这有以下(巨大的)缺点:

(1) 执行速度过慢且能耗增加。使用此上下文属性是我未来应用程序核心功能的核心(因此它每分钟会被使用 10-100 次)。必须不断地解析这些信息才能使用它会增加我非常想避免的不当处理 (2) 不适当的编码开销。将此上下文属性保存为字符串会使我每次使用此中心信息(即非常频繁)时都需要额外编码。 (3) 过度的复杂性和潜在的不兼容性。它还会增加不必要的复杂性,并且通过偏离预期的做法,它将失去 Core Data 的优势。

在没有上述缺点的情况下实现我的预期目的的最有效方法是什么?

以您的示例为例,一种选择是创建一个 Employment 实体,具有 titleyearEnded 的属性以及与 [=13= 的两个(对一)关系].一种关系表示 employer,另一种表示 employee.

在这两种情况下,反向关系都是一对多。一个代表人是雇员的就业(所以你可以将其命名为 employmentsTaken),而另一种关系代表人是雇主的就业(因此你可以将其命名为 employmentsGiven)。

归纳,这是 Apple 为具有属性的多对多关系推荐的解决方案(参见 their documentation 中的 "Modelling a relationship based on its semantics")。

这是否会解决您问题中列出的所有问题,我留给您进行实验:如果事情每分钟更改 10-100 次,获取请求的开销和 creating/updating/deleting 中间(Employment) 实体可能比你的字符串表示更糟糕。