核心数据多模型规划

时间:2013-12-04 16:19:47

标签: ios objective-c core-data nsmanagedobject

我正在设计一个日志记录应用程序,目前正在研究如何构建代码。 我计划使用Core Data作为数据存储,并且在开始之前我正在尝试决定构建数据的最佳方法。

我将记录如下内容:

电影 - 名称,查看位置,查看方式,评级,时间戳 视频游戏 - 名称,启动时,完成时,评级,播放方式, 专辑 - 名称,艺术家,时间戳,如何倾听,评级 书 - 名称,作者,开始时间戳,完成时间戳,评级 等

有一些共享属性(时间戳和评级),但其他一切都非常具体。目前在上面还有超过10个项目,有些没有我们认为的“名称”。

我最初的计划是将每个NSManagedObject设为NSDate并使用CLLocationNSManagedObject创建某种InfoStamp属性,并使用另一个可能具有的评级对象。

15个或更多NSManagedObject是否会疯狂,有更好的方法吗? 我不想让它们在数据模型中共享一个基础{{1}}实体,因为Core Data会将所有实体存储在同一个表中,从而降低性能。显然,我可以手动创建与实体层次结构分开的类层次结构,并且可能会这样做。

我还希望能够通过某个NSDate的每个单个对象进行集体搜索。有没有办法做到这一点?

如有需要,请让我澄清。

1 个答案:

答案 0 :(得分:1)

我认为这里的方法是使用继承来建模公共属性。

在界面构建器的模型编辑器中,您可以将实体定义为“抽象实体”。这意味着它只存在于创建其他更具体的所谓子实体。您的抽象实体可以具有通用名称,例如Item,或者更好(因为更具体),MediaItem

创建子实体时,只需从列表中选择此抽象实体作为“父实体”。它现在将包含相同的通用属性。我仍然建议您为所有这些项目添加一个字符串,例如title,即使它们没有明显的“名称”。

在图形模型编辑器中,您现在将看到与箭头链接到子实体的父实体。

此设计优于仅存在属性的附加实体(例如信息戳)。通过关系搜索和过滤比简单属性更麻烦(在某些情况下)。此外,我认为从概念角度来看,这样的属性集合是不正确的,因为它不能真正被解释为核心数据对象图中的有意义的“对象”。

还有一个想法:您可能会发现设计父实体以包含type属性以方便搜索和排序很有用。