2017-02-15 59 views
0

我有2个实体,其中总共12个属性存在3种变体的最小值,最大值和某些特定类型的字段的平均值。因此,我将这两个实体重构为三个实体,使第三个实体成为“值”,其中包含3个属性,即最小值,最大值和平均值。并将12个属性降为4个关系。下面是我的模型副本,作为示例。核心数据一对一单向关系

enter image description here

正如你可以看到我有一个到一个与第三个实体单向关系。然而,Xcode不断抱怨'逆向'关系。

enter image description here

按照我,我可以在“价值”加4间的关系,并更新所有成为“反”,但是这似乎并没有要当第二个实体被绑定到作为正确的解决方案'价值观',它会有额外的3个零关系,而在第一个情况下它会有1个额外的零关系。这两个都是不必要的。我认为,重构“价值”并将其分解成两个相似的实体也不是一个好的解决方案。

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

回答

2

根据您的描述,我会撤消重构并返回使用属性而不是关系。如果没有真正的好处,你会增加复杂性,并且Values实体(正如你所发现的)太泛化,不能真正有用或有意义。这种重构没有任何有用的目的;不要修复它,恢复它。

+0

是的,我同意它太通用了。让我在明天之前等待更好的解决方案,否则不得不以更好的方式恢复或重构。 –

+0

Downvoted,这不是OP的问题的解决方案或真正的答案,这是一个意见的评论。请使用评论部分来达到这些目的。 – 2017-02-15 17:06:11

+0

@隐晦的问题是“解决这个问题的正确方法或最佳实践”,这个答案提供了这个问题。你可能不同意这个答案,但它是一个答案。 – Martin

0

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

大多数对象关系本质上是双向的。如果 部门与在 部门工作的员工有多对多关系,则员工与 部门之间存在反向关系。 主要的例外是提取的属性, 表示弱单向关系 - 从目的地到源之间没有关系 。

另外,如果你想使事情变得简单,你应该考虑(如果可能)避免3个对象,有一个单独的对象,或两个对象,在考虑到NSFetchRequestpropertiesToFetch。通过这种方式,您可以获取Entity,将属性保存在一个单独的Entity,中,但只能获取您想要的属性,并避免获取您不打算使用的属性的开销和内存消耗。

无论您的需求是什么,您都可以选择。 GL