在为『掌拍』iOS 客户端设计数据库的时候,大幅度使用了 CoreData 中的『Entity Inheritance』这个特性,由此很好地解决了多个实体有共同 property 的问题,而特别借助实体类化(由实体生成对应的类)后的动态性,解决了数据动态传递的问题。这之后,对『Entity Inheritance』算是有了经验,但是还没有归纳总结,现在总结如下:
在 CoreData 中,『实体的继承』(entity inheritance)类似于『类的继承』(class inheritance),如果你有若干个相似的实体,就可以抽离出它们共同的 property (注意:property 包括了Attributes 和Relationships 两方面) 作为一个『父实体』,然后继承该『父实体』,而不是在让多个实体去重复描述共同的property,导致性能的下降。例如,有如下两个实体:
如图,Teacher实体和 Student 实体具有相同的attribute,我们可以抽离出来作为一个父实体,再让它们继承父实体,结果如下:
这样 Teacher 实体和 Student 实体都继承了 name 和 sex 这两个attribute。
那么该如何设置父实体呢?
使用Xcode的可视化建模工具来创建:
使用 code 来创建。但这需要自顶向下来执行,即一个实体不能直接设置父实体,而只能让父实体去设置子实体。具体操作是:把 Teacher 实体 和 Student 实体添加到子实体数组中,然后让目标父实体 Person 调用
setSubentities:
来进行设置。