基于图像的核心数据模型关系是不是正确?

Posted

技术标签:

【中文标题】基于图像的核心数据模型关系是不是正确?【英文标题】:Is Core Data model relationship correct based on image?基于图像的核心数据模型关系是否正确? 【发布时间】:2014-01-25 16:37:28 【问题描述】:

一个Order 可以包含许多OrderLines - 与该订单相关联的购买项目。

当用户想要在我的应用程序中查看Order history view controller 时,我希望能够选择所有订单及其关联的订单行。

我有这个设置ATM,这是正确的吗?请注意右侧的信息窗格,以便您可以看到该关系属性的设置。

问题 1。 我的关系是否正确,以便我能够在选择订单时检索所有订单行,或者我是否需要执行两个查询,一个检索所有orders,另一个检索所有orderLines,然后根据哪个@ 组合它们987654327@ 具有与之关联的 order。这就是我在后端的 SQL 设置中所做的,但我希望核心数据能够以更好的方式抓取行。

问题 2. 除了更新Order'sorderTotalAmountproperty. But my question being, I dont want anOrderto be deleted when I delete a specificorderLine@987654334 之外,用户应该能够删除任何OrderLine 而不会影响Orders 实体@No Action`?

问题 3. 如果我想拥有这样的关系,我的关系是否良好,以便 1 order 可以有许多 OrderLines 与之关联?

【问题讨论】:

【参考方案1】:

根据 Apple 的建议,您也应该设置反向关系。

OrderLines 的Orders 是对多的,而OrderLines 是您正确设置的Orders - 但是它不应该是可选的。 对于订单,您还应该有删除规则:级联 - 因此,如果您删除订单,它将删除所有相关的订单行

    CoreData 会为您执行此操作 - 更重要的是,它会在惰性模式下执行此操作 - 只有当您访问关系对象时才会加载它们。您可以更改它并预加载所有内容,但只有在您真正需要时才可以。

    您应该为此保留无效操作 - 它会在删除订单时正确更新订单并断开相关对象。

    在开始时就知道了——你应该也有从 Orders 到 OrderLines 的反比关系。这还将为您生成用于自动创建关系的方法。

    - (void) addOrderLinesObject:(OrderLines*)value;
    - (void) removeOrderLinesObject:(OrderLines*)value;
    

正确设置后,您还将拥有 Order 类:

   @property (nonatomic, retain) NSSet* orderLines;

你可以访问相关的对象。

【讨论】:

您能否看看我的 3 个折叠问题,并解释您的答案如何旨在回答这些问题。谢谢老哥 谢谢。关于您在第 2 点中所说的,订单将以何种方式“更新”? 是的 - 这就是你应该设置反向关系的原因,因此 SQLLite 可以设置返回订单的链接并对其进行优化,因此当你检测 OrderLines 时,他们引用了 Contact 并可以从 Order 中删除自己。跨度> 关于第 3 点,没办法 :O ?!我从来不知道会创建这样的自动方法!这太棒了,而且会很有帮助! 那么设置为no action 而不是nullify 有什么区别?我想要的是,当我删除一个订单行时,它不应该删除任何订单,因为与已删除订单行关联的订单仍然可能有与该订单关联的其他订单行。我不希望空对象到处乱放,否则我必须检查空对象。

以上是关于基于图像的核心数据模型关系是不是正确?的主要内容,如果未能解决你的问题,请参考以下文章

具有关系的核心数据模型

简单理解ORM

创建核心数据模型设计的最佳方法是啥?

在这种情况下,我如何建立核心数据模型以及与啥关系?

44 MySQL & orm对象关系映射

iCloud 中基于 SQLite 的核心数据中的有序关系