我有一个非常简单的核心数据模型,包含一个包含多个图像的图库。在我看来,画廊与图像具有一对多关系就足够了,但是如果我也不建立从图像到图库的反向关系,则会出现编译器警告和错误。从面向对象的角度来看,在我看来,Image不应该知道或关心它是否在Gallery或任何其他ManagedObject中,那么为什么编译器会迫使我创建这种反向关系?在图片上拥有“图库”属性似乎非常错误。为什么一个实体需要一个逆?
2
A
回答
8
核心数据使用反比关系来帮助保持参照完整性。当你改变一个关系或删除一个对象时,它会显着提高性能。如果没有相反的情况,那些相同的操作可能会导致全表扫描。
在我看来,没有反转应该是一个错误,而不是一个警告。在一些相当常见的情况下,这种差别可能会很大。
想象一下没有它们的多实体级联删除。可能花费足够的时间,操作系统认为你的应用程序崩溃了。
0
我认为你不能将oo原则应用于数据库结构 - 它们不在同一个域中。核心数据是关于表和行以及它们之间的指针。让我们看看参照完整性和您的画廊的例子。如果您没有图片与图库的关系,则当您删除图像时,系统将不知道删除图库中的参考。你可能会认为这种细节应该被照顾,但我认为你是这样的,你应该只是忍受它。也许发送一个错误报告给苹果公司..
+0
是的。我认为问题在于受管对象是对象,但它们仍受数据库结构规则的约束。我不应该关心反向引用。这是应该在幕后处理的细节。 – Undistraction
相关问题
- 1. Java实体 - 为什么我需要一个空构造函数?
- 2. 为什么我需要一个需要实例的方法?
- 3. 为什么实体有时需要一个“url”参数,有时不需要?
- 4. 为什么需要关系表从实体到同一实体
- 5. 为什么一个amazon ec2实例需要两个弹性IP?
- 6. datetime.date:TypeError:需要一个整数。为什么?
- 7. 为什么try块需要一个catch
- 8. 为什么Fortran POINTER需要一个TARGET?
- 9. 为什么需要一个会话bean?
- 10. 为什么你需要一个Hyper-V?
- 11. 为什么这里需要一个锁?
- 12. 为什么eclipse需要一个名为'main'的实际方法?
- 13. 为什么地点是一个实体?
- 14. 为什么一个类需要数据合同属性,另一个不需要
- 15. 为什么`fgets()`需要一个* str,但是`getline()`需要一个** str参数?
- 16. 为什么我需要显式实例化一个对象?
- 17. Java为什么需要实现一个接口?
- 18. 为什么需要一个变量指向一个结构
- 19. 为什么一个radiobuttonlist总是需要一个新的行?
- 20. 为什么“螃蟹”(一个实体)不像“怪物”(也是一个实体)?
- 21. 一个实体被保存,另一个不存在 - 为什么?
- 22. 为什么我需要将两个对象合并为一个?
- 23. 为什么我要为一个匿名类“需要opCmp”?
- 24. 为什么我需要在调用另一个对象上的ApplyCurrentValues之前得到一个旧实体?
- 25. 为什么用iText复制一个PDF不需要嵌入一些字体?
- 26. 一个Windows窗体需要访问另一个窗体的组件。什么是最简单的实现?
- 27. __NSX_PASTE__定义一个宏需要什么?
- 28. 为什么我们需要弱实体而不是强实体?
- 29. 为什么pandas groupby()。transform()需要一个唯一的索引?
- 30. 一个线程需要2秒,10个线程需要16-18秒。为什么?
这就是他们总是说。 “参照完整性。”这对我来说没有意义。如果一个实体有一个逆,那么我可以看到它是如何声明的。但是,如果在OP的情况下,图像没有对图库的引用,如果图库被删除,或图像从图库中删除等,图像上的任何内容都不需要改变。 – morningstar
我认为你是对的,它更多与性能有关。如果是这样的话,为什么Core Data不能提供一个自动幕后逆转?或者是否有一些情况不可能自动推断出什么是倒数? – morningstar
谢谢。我不能假装理解你的答案,因为我对这个领域没有很好的了解,但是如果它具有更高的性能,我认为这是一个足够好的理由。然而彻底破坏封装似乎是一个可怕的代价。在由User:Galleries:Gallery:Image构成的对象图中,Image可以获得对User的引用,这只是错误的。 – Undistraction