多媒体类型的核心数据模型?

时间:2015-12-31 18:47:04

标签: ios core-data

我对核心数据世界很陌生。我的应用程序通过api获取电影和电视节目数据。 Movie和TvShow托管对象都具有类似的属性。我对设置模型的最佳方法仍然感到困惑。这是我目前所实现的,我想知道如何才能制作出更高效的模型。

最好是拥有一个具有相似属性的整体mediaObject,然后将movie和tvshow作为一种子类吗? (如果是这样我怎么能实现它)

Current Core Data Model

1 个答案:

答案 0 :(得分:2)

当你有两个具有相似属性的实体时,它(有时)可以使用“父实体”来保存它们共有的属性(或关系)。为此,请创建一个实体(例如您建议的MediaObject)并为其定义所有常用属性。然后从“子”实体(TVSeriesMovie)中删除这些属性,而将MediaObject设置为父实体 - 这是在右侧的数据模型检查器中设置的。你应该有这样的东西:

Data Model Editor image

我怀疑还有待进一步改进 - 例如。 name上的TVSeries属性可能等同于title上的Movie,因此可以重命名并移至父MediaObject等。

其他一些想法:您原来的genre关系只有一个:一个Movie可能有很多Genres,但每个Genre只能有一个Movie }}。我想您可能想要撤消这一点,因此每个Movie只属于一个Genre,但每个Genre可以有多个Movies,或者可能有多个tvShows关系。另请注意,通常的做法是为多对多关系使用复数名称,例如。 tvShow而不是id。这只是使意图更清晰。另外,我会避免mediaId作为属性名称;它泛型:genreIdTVSeries等会更好。

如果使用“Create NSManagedObject Subclasses”菜单选项,Xcode将为所有实体创建单独的类,MovieMediaObject类均为dplyr的子类(而这又是NSManagedObject的子类。每个子类的属性定义反映了相应实体的属性和关系。

我从一个附带条件开始:有时有意义使用父实体。谨慎的原因是,在实践中,Core Data将父/子实体实现为单个SQL表 - 包含父和所有子项的所有属性/关系。 CoreData会隐藏这个实现细节 - 但是可能会对性能产生影响:表格会“宽” - 很多列 - 其中很多列都是空的,因为它们与不同的子实体有关。你会在Stack Overflow上发现关于这个问题的大量问答,有些人选择不使用父实体,因为性能受到太大影响。您需要根据可能的数据量,查询的复杂性等对自己进行评估。