通过许多传入的一对多关系维护核心数据实体的完整性

时间:2010-06-04 02:20:10

标签: iphone database-design core-data one-to-many data-integrity

我有一个Core Data商店,其中包含许多描述媒体项目的MediaItem实体。我也有NewsItems,它与许多MediaItems有一对多的关系。到目前为止一切都很好。

但是,我还有PlayerItems和GalleryItems,它们与MediaItems之间也有一对多的关系。因此,MediaItems是跨实体共享的。

鉴于许多实体可能具有一对多关系,我如何设置从MediaItem到与其有关系的所有(一个或多个)实体的互惠关系,此外,我如何实现规则当这些互惠关系的数量下降到0时删除MediaItem?


对于记录(如果它对其他人有用),我通过创建一个与MediaLinkedEntity具有一对多关系的抽象MediaItems类来解决这个问题(名为{{ 1}}位于MediaItems端,MediaLinkedEntity位于LinkedEntities端。然后,我为MediaItemNewsItems创建了此实体的子类,并在GalleryItems中实现了以下-prepareForDeletion方法:

MediaLinkedEntity

基本上,遵循马库斯的回答。

2 个答案:

答案 0 :(得分:1)

对此最好的答案是拥有一个以通用方式处理关系的抽象父实体。这样可以减少模型中的关系数量。

对于删除规则,您应该为关系的“一”侧创建一个子类,并实现他们的-prepareForDeletion方法来检查多方的孤立项,然后在它们发生时删除它们。

答案 1 :(得分:0)

  

但是,我还有PlayerItems和GalleryItems,它们与MediaItems之间也有一对多的关系。因此,MediaItems是跨实体共享的。

最简单但不那么漂亮的方法是为每个MediaItem关系创建反向关系。

另一种可能性是创建一个与MediaItem有关系的抽象父实体,并从该通用实体继承GalleryItem,NewsItems,PlayerItem。

  

鉴于许多实体可能具有一对多关系,我如何设置从MediaItem到与其有关系的所有(一个或多个)实体的互惠关系,此外,我如何实现规则当这些互惠关系的数量下降到0时删除MediaItem?

有几种方法可以创建此行为。 您可以使用KVO来观察MediaItem的所有反向关系