Il existe au moins un scénario dans lequel un bon cas peut être fait pour une relation de données de base sans inverse: lorsqu'il existe déjà une autre relation de données de base entre les deux objets, qui gérera la maintenance du graphe d'objets.
Par exemple, un livre contient plusieurs pages, tandis qu'une page est dans un livre. Il s'agit d'une relation plusieurs à un bidirectionnelle. La suppression d'une page annule simplement la relation, tandis que la suppression d'un livre supprimera également la page.
Cependant, vous pouvez également souhaiter suivre la page en cours de lecture pour chaque livre. Cela peut être fait avec une propriété "currentPage" sur Page , mais vous avez besoin d'une autre logique pour vous assurer qu'une seule page du livre est marquée comme la page actuelle à tout moment. Au lieu de cela, établir une relation currentPage entre Book et une seule page garantira qu'il n'y aura toujours qu'une seule page en cours marquée, et en outre, cette page sera facilement accessible avec une référence au livre avec simplement book.currentPage.
Quelle serait la relation réciproque dans ce cas? Quelque chose de largement absurde. «myBook» ou similaire pourrait être rajouté dans l'autre sens, mais il ne contient que les informations déjà contenues dans la relation «livre» pour la page, et crée ainsi ses propres risques. Peut-être qu'à l'avenir, la façon dont vous utilisez l'une de ces relations sera modifiée, ce qui entraînera des changements dans la configuration de vos données de base. Si page.myBook a été utilisé dans certains endroits où page.book aurait dû être utilisé dans le code, il peut y avoir des problèmes. Une autre façon d'éviter cela de manière proactive serait également de ne pas exposer myBook dans la sous-classe NSManagedObject utilisée pour accéder à la page. Cependant, on peut soutenir qu'il est plus simple de ne pas modéliser l'inverse en premier lieu.
Dans l'exemple décrit, la règle de suppression pour la relation currentPage doit être définie sur "Aucune action" ou "Cascade", car il n'y a pas de relation réciproque avec "Nullify". (Cascade implique que vous extrayez chaque page du livre au fur et à mesure que vous le lisez, mais cela peut être vrai si vous avez particulièrement froid et avez besoin de carburant.)
Lorsqu'il peut être démontré que l'intégrité du graphe d'objets n'est pas menacée, comme dans cet exemple, et que la complexité et la maintenabilité du code sont améliorées, on peut affirmer qu'une relation sans inverse peut être la bonne décision.