【问题标题】:Core data relationship pointing to myself?核心数据关系指向我自己?
【发布时间】:2013-02-04 07:46:14
【问题描述】:

我需要创建一个与其自身具有一对多关系的核心数据实体(想想一个包含子文件夹的文件夹:我需要访问某个文件夹的所有子文件夹以及任何子文件夹的父文件夹)。

  1. 有没有使用标准核心数据关系的简单方法来做到这一点,而无需辅助的一对多实体?

  2. 我想我可以通过使用我自己的关键字段轻松地以“旧方式”完成此任务 - 但是有没有一种简单的方法可以在 Core Data 中定义一个自动递增字段? (我可以使用基于时间的值而不是自动递增的值,但出于多种原因我不喜欢这种解决方案)。

【问题讨论】:

  • 为什么不想使用一对多?

标签: xcode core-data entity-relationship


【解决方案1】:

Core Data 没有字段。不要试图认为 Core Data 是像 SQL 这样的过程性、非对象 API 的术语。你只会把自己弄糊涂。

在 Core Data 中创建嵌套关系很简单。要使实体对目录结构进行建模,您只需要:

Folder{
  name:string
  parent<<-->Folder.children
  children<-->>Folder.parent
}

任何特定文件夹都有一个父级和多个子级。

不要将数据模型中的实体误认为是活动对象图。数据模型中的实体只是定义了同样抽象的实体的抽象属性和关系,可以非常简单。实际的实时图表与其建模的现象一样复杂。

例如在这种情况下,数据模型将像上面那样简单,一个实体,一个属性和两个关系都与它自己有关。实时图将与它建模的文件系统一样复杂,其中包含数千个独特的Folder 对象和数百万个关系。

【讨论】:

  • 我在提问之前尝试了这种方法。问题是,如果我在定义这两个关系后查看实体图,我会看到一个从实体指向自身的箭头,一侧是双箭头,另一侧什么也没有,这让我感到奇怪。
  • 这就是它应该的样子。请记住,实体类似于类而不是实例/对象。它们是抽象的。指向实体本身的箭头正确地传达了数据模型的设计,即Folder 对象将与其他Folder 对象而不是另一类对象有关系。有时,根据实体图形的相对位置,可以在线条绘制时隐藏箭头。它只是显示的视觉工件。
猜你喜欢
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
相关资源
最近更新 更多