首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >核心数据模型-实体和逆

核心数据模型-实体和逆
EN

Stack Overflow用户
提问于 2015-01-27 01:56:17
回答 1查看 117关注 0票数 0

我是核心数据的新手,我正在尝试将它实现到我现有的项目中。这是我的模型:

现在,有些事情对我来说没有意义,很可能是因为我没有正确地建模。

CMAJournal是我的顶层对象,具有一组有序的CMAEntry对象和一组有序的CMAUserDefine对象。

,这是我的问题:

每个CMAUserDefine对象都有一组有序的对象。例如,"Baits“CMAUserDefine将有一组有序的CMABait对象,”物种“CMAUserDefine将有一组有序的CMASpecies对象,等等。

每个CMAEntry对象都具有baitUsed、fishSpecies等属性,这些属性指向相应的CMAUserDefine对象中的一个对象。如果进行了更改,引用该对象的每个CMAEntry也会发生更改。

现在,根据我所读到的,我应该对我的每一段关系都有相反的解释。这在我的模型里是没有意义的。例如,我可以有5个CMAEntry对象,其baitUsed属性指向同一个CMABait对象。如果有5个CMAEntry对象引用该CMABait,CMABait的entry属性指向哪个CMABait?我觉得它不应该指向任何东西。

我希望将所有CMAUserDefine对象(即所有CMABait、CMASpecies、CMALocation等对象)存储在CMAJournal userDefines集合中,并在每个CMAEntry中引用这些对象。

最初,我在NSArchiving中做得很好,但是存档文件的大小很大。我的意思是,18+ MB用于16条左右的条目(其中包括大约20张图片)。据我所知,核心数据是我无论如何都应该学习的东西。

,所以我想知道,我的模型错了吗?我走错路了吗?是否有更有效的方法来使用NSArchiver来更好地满足我的需要?

我希望这是有意义的。如果需要更好的解释,请告诉我。

谢谢!

E:导致我提出这个问题的是在尝试保存时得到一堆“对无效对象的悬空引用”= "“错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-27 04:24:37

A.一些基本知识

核心数据需要一个反向关系来模拟这种关系。长话短说:

在由Core Data建模的对象图中,从源对象到目标对象的语义引用点。因此,您可以使用单个引用作为CMASpeciesfishSpecies来建模一对一的关系,使用集合作为NSSet来模拟一对多的关系。您不关心逆关系的类型。在许多情况下,您根本没有这种关系。

在关系数据库中,关系的建模方式不同:如果您有1:N (一对多)关系,则关系存储在目标端。原因是,在rDB中,每个实体都有固定的大小,因此不能引用可变数量的目的地。如果您有一个多到多的关系(N:M),则需要一个额外的表。

正如你所看到的,在一个对象图中,关系的类型是一对一的,很多的关系只取决于源,而在rDB中,关系的类型是一对一的、一对多的、多到多的,取决于源和目的地。

要选择正确的rDB建模类型,核心数据需要知道逆关系的类型。

代码语言:javascript
复制
Type Object graph Inverse    | rDB
1:1  to-one id    to-one id  | source or destination attribute
1:N  collection   to-one id  | destination attribute
N:M  collection   collection | additional table with two attributes

B.问你的问题

在您的示例中,如果CMAEntry对象引用的正是一个CMASpecies对象,但是CMASpecies对象可以由许多CMAEntry对象引用,这就意味着逆关系是一个到多的关系。

是的,对于OOP开发人员来说,拥有这样的反向关系是很奇怪的。对于SQL开发人员来说,这是通常的情况。开发一个ORM (对象关系映射器)这是问题之一。(我知道,因为我现在是为了目标云而这么做的。但我做了,如果不一样,更多的是OOP的观点。)每一种解决方案都是一种不寻常的一面。有人称ORM为“软件开发的越南”。

要有一个更简单的例子:建模一个体育联盟,您将发现自己拥有一个带有属性Match和属性homeTeamguestTeam的实体guestTeam。您希望有一个逆关系,不是homeMatchesguestMatches,而是简单的matches。这显然不是逆的。只要添加逆关系,如果核心数据想要而不关心它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28161987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档