2010-12-04 39 views
0

Disons que j'ai une table appelée "Event" qui a une relation to-many avec la table "Group" qui a une relation to-many avec la table "Person".Comment puis-je gérer une table CoreData qui peut être modifiée en dehors de sa relation avec une autre table?

De nombreux groupes peuvent être créés pour référencer la même personne.

Je n'ai pas encore ajouté une relation inverse de "Personne" à "Groupe" car si un "Groupe" est supprimé, je ne souhaite pas que la "Personne" associée soit supprimée car elle peut être référencée ailleurs. Dois-je laisser de côté la relation inverse? Les docs conseillent fortement contre cela mais je pense que ce soit un exemple où c'est la bonne voie à suivre.

Toute aide est appréciée.

+0

De même, la règle de suppression pour Groupe doit-elle être définie sur "Aucune action"? De cette façon, la table "Personne" n'est pas modifiée lorsqu'un groupe est supprimé. – Christopher

+0

Je pense que je peux l'avoir maintenant ... Le groupe a trop de relations avec la personne. La personne a une relation inverse à plusieurs avec le groupe. Maintenant, j'ai besoin de déterminer les règles de suppression. J'ai Group-Person comme "No Action" et Person-Group comme "Deny". Je pense que peut-être que Group-Person devrait être "Nullify" et que CoreData est assez intelligent pour laisser "Player" seul s'il est référencé par un autre groupe? Je pense que c'est la question de base que je demande :-) Merci ... – Christopher

+1

Christopher, vous voulez normalement la valeur par défaut de "Nullify". "Aucune action" est destiné à lorsque vous allez implémenter un comportement personnalisé dans le code. –

Répondre

2

Sauf si vous avez une très bonne raison de faire autrement, vous devez toujours avoir une relation inverse. Il aide CoreData à maintenir l'intégrité du graphe d'objets. La règle de suppression par défaut pour une relation est "Nullify", ce qui ressemble à ce que vous voulez. "Nullify" signifie que si vous supprimez cet objet, l'attribut de relation à l'autre extrémité de cette relation sera supprimé (pour une relation "un à un") ou la valeur sera supprimée de l'ensemble (pour une relation à plusieurs). Le seul moyen pour que l'autre extrémité de la relation soit réellement supprimée est si vous modifiez la règle de suppression pour spécifier cela.

tl; dr: Utilisez les relations inverses, laissez la règle de suppression à la valeur par défaut "Nullify".