核心数据一对一单向关系

时间:2017-02-15 15:54:21

标签: ios database core-data xcdatamodel

我有2个实体,其中共有12个属性,其中包含某些特定类型字段的最小值,最大值和平均值的3种变体。因此,我将2个实体重构为3个实体,使第3个实体成为“值”,其中包含3个属性,即min,max和average。并将12个属性简化为4个关系。以下是我的模型的复制品,如下图所示。

enter image description here

正如您所看到的,我与第三个实体有一对一的单向关系。然而,Xcode继续抱怨“反向”关系。

enter image description here

按照我的说法,我可以在'Values'中添加4个关系,并将all更新为'inverse',但这似乎不是正确的解决方案,因为当第二个实体与'Values'绑定时,它将有额外的3个零关系,而在第一个情况下它将有1个额外的零关系。这些都是不必要的。

重构'价值'并将其拆分为两个相似的实体也不是一个好的解决方案,我相信。

因此,任何人都可以建议我解决这个问题的正确方法或最佳实践。在描述我的问题时,如果我在任何地方都不清楚,请告诉我。

2 个答案:

答案 0 :(得分:2)

根据您的描述,我将撤消重构并返回使用属性而不是关系。你增加了复杂性没有真正的好处,而Values实体(正如你所发现的那样)过于通用而不是真正有用或有意义。这种重构不是用于任何有用的目的;不要修复它,还原它。

答案 1 :(得分:0)

您应该了解Weak Relationships (Fetched Properties)如何正确管理关系以及错误代码的解决方案。

  

大多数对象关系本质上是双向的。如果一个   部门与工作的员工有很多关系   部门,从员工到员工之间存在反向关系   部门是一个。 主要的例外是获取属性,   这代表了一种微弱的单向关系 - 没有任何关系   从目的地到来源。

另外,如果你想让事情变得更容易,你应该调查(如果可能的话)避免3个对象并且只有NSFetchRequest Entity的单个对象或两个对象。通过这种方式,您可以获取Entity,将属性保存在单个{{1}},中,但只获取所需的属性,并避免获取属性的开销和内存消耗不会用。

无论哪种方式满足您的需求,您都可以选择。 GL