【问题标题】:Core Data: Parent Entity Vs Relationships核心数据:父实体与关系
【发布时间】:2014-09-14 03:41:41
【问题描述】:

我正在开发一个数据收集应用程序,但我无法理解这些概念之间的联系?这是我的方案: 站点 > 站 > 观测事件

站点有一个属性,一个站点的名称,并且可以包含多个站点。随着时间的推移,每个站都会有多个观测值。我将这些设置为左侧的事件作为父事件,并创建了如图所示的一对多关系,因为每个观察事件都需要使用站点和站点进行标记。

我假设父实体是创建它的最佳方式,还是关系会这样做?我希望用户会提前设置站点/站点数据,然后在制作时填写观测数据。

简而言之,我无法理解关系在核心数据中的作用以及父实体是否是多余的。我只是不清楚核心数据文档。任何帮助将不胜感激!

【问题讨论】:

    标签: ios xcode core-data


    【解决方案1】:

    本质上,当您生成实体类时,您将看到的是,除了每个实体的属性之外,您还有一个用于“对多”关系的 NSSet。您可以通过集合中的值引用多对多关系中的任何“记录”。

    起初看起来很复杂,但后来它完全有意义。因此,如果您想查看站点,您可能会有一个“站点”集,其中包括该站点的每个站点实体的托管对象列表。每个站点将包含一个集合,其中包含每个相关观察的托管对象。

    因此,一旦您拥有一个站点实体,您就可以通过以下方式查看该站点的所有站点:

    Site *site = (Site *) managedObjectForSite;
    for (NSManagedObject *station in site.stations)
    {
         Station *stat = (Station *) station;
         (do what you need to with the station record)
    }
    

    通过将成员添加到给定站点记录的站点集中,您可以将站点与站点“链接”,其中每个成员都是站点的托管对象。您无需“阅读”电台记录的责任——一旦您拥有加载站点的集合成员,这些成员中的每一个实际上都是相关电台的托管对象。

    当灯亮起时,它会立刻变得晶莹剔透。你必须完成一次,然后你就会知道那里发生了什么..

    请参阅此内容,因为它可能会有所帮助:One-to-Many Relationship: CoreData

    【讨论】:

      【解决方案2】:

      在 Core Data 中,关系具有与经典关系数据库设置中的外键类似的功能。

      在数据库中,您可以使用外键“连接”站点、站点和事件实体:

      Site .id    = Station .siteID
      Station .id = Event   .stationID
      

      在核心数据中,这不是必需的。这两个实体都不需要额外的 ID 属性,您只需定义一对多关系。

      Site <--->> Station <---->> Event
      

      优点:您可以从站点访问站点,或者使用透明且高度易读的点符号从站点访问站点,正如您对对象图所期望的那样。您甚至可以方便地从事件对象等中获取站点。

      Site  *aStationsSite    = station.site;
      NSSet *aSitesStations   = site.stations;
      NSSet *aStationsEvents  = station.events;
      NSSet *sisterStations   = station.site.stations;
      Site  *siteFromEvent    = event.station.site;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-14
        相关资源
        最近更新 更多