我正在设计一个日志记录应用程序,目前正在研究如何构建代码。 我计划使用Core Data作为数据存储,并且在开始之前我正在尝试决定构建数据的最佳方法。
我将记录如下内容:
电影 - 名称,查看位置,查看方式,评级,时间戳 视频游戏 - 名称,启动时,完成时,评级,播放方式, 专辑 - 名称,艺术家,时间戳,如何倾听,评级 书 - 名称,作者,开始时间戳,完成时间戳,评级 等
有一些共享属性(时间戳和评级),但其他一切都非常具体。目前在上面还有超过10个项目,有些没有我们认为的“名称”。
我最初的计划是将每个NSManagedObject
设为NSDate
并使用CLLocation
和NSManagedObject
创建某种InfoStamp属性,并使用另一个可能具有的评级对象。
15个或更多NSManagedObject
是否会疯狂,有更好的方法吗?
我不想让它们在数据模型中共享一个基础{{1}}实体,因为Core Data会将所有实体存储在同一个表中,从而降低性能。显然,我可以手动创建与实体层次结构分开的类层次结构,并且可能会这样做。
我还希望能够通过某个NSDate的每个单个对象进行集体搜索。有没有办法做到这一点?
如有需要,请让我澄清。
答案 0 :(得分:1)
我认为这里的方法是使用继承来建模公共属性。
在界面构建器的模型编辑器中,您可以将实体定义为“抽象实体”。这意味着它只存在于创建其他更具体的所谓子实体。您的抽象实体可以具有通用名称,例如Item
,或者更好(因为更具体),MediaItem
。
创建子实体时,只需从列表中选择此抽象实体作为“父实体”。它现在将包含相同的通用属性。我仍然建议您为所有这些项目添加一个字符串,例如title
,即使它们没有明显的“名称”。
在图形模型编辑器中,您现在将看到与箭头链接到子实体的父实体。
此设计优于仅存在属性的附加实体(例如信息戳)。通过关系搜索和过滤比简单属性更麻烦(在某些情况下)。此外,我认为从概念角度来看,这样的属性集合是不正确的,因为它不能真正被解释为核心数据对象图中的有意义的“对象”。
还有一个想法:您可能会发现设计父实体以包含type
属性以方便搜索和排序很有用。