2010-06-04 4 views
4

Possible en double:
Does every Core Data Relationship have to have an Inverse?Ai-je vraiment besoin d'une relation bidirectionnelle dans Core Data?

Exemple: Si j'avais deux entités personne et de voitures, et chacun d'eux doit être lié à une entité d'image - comment cela aurait ressembler ?

En ce moment, je ne ferais que trois entités: Personne, Voiture, Image. Les personnes et les voitures peuvent ainsi être liées à une entité Image. Ils ont une relation 1: 1 avec l'entité Image. Mais maintenant, un mec du Core Data a déclaré que les relations doivent être modélisées dans les deux sens. C'est stupide ou pas? J'ai besoin de deux entités Image alors. CarImage et PersonImage. Ou une entité Image bizarre qui a deux relations: une à une entité Car, et une à une entité Personne.

Comment modéliseriez-vous cela?

Répondre

5

La version brève ..

Oui les relations doivent être modélisés dans les deux sens. Non, cela ne signifie pas que vous avez besoin de deux entités Image. Si une personne a une relation à sens unique avec une image et que vous avez supprimé l'image (qui n'a pas de relation inverse, donc ne sait rien de la personne), votre graphique est maintenant corrompu.

Vous avez donc besoin de relations bidirectionnelles, mais cela ne signifie pas que vous avez besoin de deux entités image. Votre image a juste besoin d'une relation - 'conteneur', disons, qui pourrait être une personne ou une voiture (une entité parent partagée aidera).

La version plus .. https://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html#//apple_ref/doc/uid/TP40001857-SW6

+1

Ou, si '' Person' et Car' sont si différents qu'une entité mère n'a pas de sens, vous pouvez ajouter à la fois un '' Person' et voiture 'relation avec l'entité' Image' pour servir d'inverse - en particulier si 'Person' et' Car' peuvent avoir des relations avec la même 'Image'. Mais l'utilisation d'une seule relation 'container' avec une entité parente devrait être votre approche préférée. – Alex

+0

S'il vous plaît, pouvez-vous expliquer ce que vous entendez par relation de conteneur unique? Qu'est-ce qu'une relation conteneur? Je suppose que vous ne parlez pas d'une sorte de table de jointure ou d'entité de jointure. – dontWatchMyProfile

+0

@mystify Je veux simplement dire que vous avez besoin d'une relation dans votre entité image. Cette entité unique peut servir de relation inverse à l'image de la personne et à l'image de la voiture. Pour ce faire, Person et Car auraient besoin de la même entité parent - disons 'DisplayableItem' (Vous pouvez penser si un meilleur nom - Container était un mauvais choix dans ma réponse). Comme le dit @Alex, cette approche pourrait ne pas vous convenir - il ne serait peut-être pas approprié de donner à Car and Person la même entité parente. Vous pouvez donc donner des relations Image 2, une personne et une voiture, et n'en définir qu'une seule. De toute façon .. vous n'avez pas besoin de 2 entités d'image. – hooleyhoop