【问题标题】:Core Data Inheritance and Relationships核心数据继承和关系
【发布时间】:2013-07-09 00:34:27
【问题描述】:

我对核心数据中的继承和关系有点困惑,我希望有人能走上正确的道路。在我的应用程序中,我创建了 3 个实体,它们都没有(并且不应该有)公共属性,但是对于用户所做的所有工作,都会有一个保存和一个加载按钮。据我了解,我需要将所有“工作”实体“包装”到一个用于保存和加载的对象中,我的问题是,我是否需要在实体之间创建关系?因为我必须以某种方式将它们联系起来,这对我来说很有意义。我的逻辑对吗?

我正在实现一个预算计算器,为了让大家了解我的问题,我将给出一个实际示例,如果我的逻辑不正确,请纠正我:

假设您是水果销售商,因此拥有客户数据库以及包含您销售的水果种类的水果数据库是很正常的。据我了解,我在这里找到了两个实体:

客户端,其属性名为:nameaddressphoneemail 等。

库存,属性名为:nameweightstockcostsupplier 等。

TheBudget,属性名为:nameamounttypecostdelivery 等。

我没有列出所有属性,因为我认为你明白了。我的意思是如你所见,我只能继承两个属性;其余的不一样。所以,如果我为一个客户做预算,我可以拥有尽可能多的客户以及库存数量,但实际预算呢?

如果我的解释不是很清楚,我很抱歉,但如果是……我应该建立什么样的关系?我认为ClientTheBudget 有联系。你有什么建议?

【问题讨论】:

  • 我认为您应该考虑添加一个“收据”实体。这样您就可以跟踪客户的购买情况,并根据过去的购买情况生成预算。

标签: core-data


【解决方案1】:

这并不完全正确,但有些部分是在正确的轨道上。我将您的问题分为三个部分:关系、继承和托管对象上下文,希望能帮助您分别理解每个部分:

关系

关系通常用于表示一个实体可以“属于”另一个实体(即员工可以属于一家公司)。您可以设置多个一对多关系(即员工属于公司和老板),您可以设置反向关系(最好用“拥有”或“拥有”来描述,例如“一家公司”有很多员工)。

根据您的需要,还有许多更复杂的关系以及一整套删除规则,您可以告诉系统在删除关系中的实体时遵循这些规则。刚开始时,我发现像上面描述的那样坚持一对一和一对多的关系是最容易的。

继承

最好将继承描述为一种用于其他更具体实体的基本模板。您说得对,您可以使用继承作为一种协议来定义一些在许多实体中通用的基本属性。一个很好的例子是有一个基类“Employee”,它具有“name”、“address”和“start date”属性。然后,您可以创建从该 Employee 实体继承的其他实体,例如“Marketing Rep”、“HR”、“Sales Rep”等,它们都具有通用属性“name”、“address”和“start date”,而没有在每个单独的实体上创建这些属性。然后,如果您想更新模型并添加、删除或修改公共属性,您可以在父实体上执行此操作,其所有子实体将自动继承这些更改。

托管对象上下文(即保存)

现在,进入问题/陈述的另一部分:将所有实体包装到一个对象中,该对象将用于保存和加载。你不需要创建这个对象,核心数据专门为此目的使用了 NSManagedObjectContext(简称 MOC)。 MOC 的任务是跟踪您创建、删除和修改的对象。为了保存您的更改,您只需在 MOC 上调用 save: 方法即可。

如果您发布您的实体及其所做的事情,我也许可以帮助就如何在核心数据中设置它提出建议。在初始开发过程中,您希望尽最大努力设置尽可能健壮的核心数据模型。操作系统需要能够“升级”后备存储以合并您在核心数据模型修订版之间所做的任何更改。如果您在最初设置核心数据模型并以这种方式发布代码方面做得不好,那么当应用程序在野外时尝试进行复杂的模型更新可能会非常困难(您可能已经猜到了,这是从痛苦的经历中产生的建议:)

【讨论】:

  • +1 努力回答不清楚的问题。不过,我认为前两个部分有点偏离目标。关系不一定表示所有权——它们只表示两条数据之间的某种联系。另外,您对继承的描述非常笼统;很难看出它是如何回答 OP 的问题的。
  • @Caleb,感谢您的建议。我觉得继承的概念并没有真正说明 OP 需要什么,所以为了完整起见,我只是对其进行了一般性描述。我想确保我解决了问题中包含的所有主题。商定的关系不一定表示所有权,但由于这与问题更相关,我不想给出过于笼统的答案。似乎是一个很好的答案应该是“通用”的。
猜你喜欢
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 2013-05-03
相关资源
最近更新 更多