web-dev-qa-db-fra.com

Comprendre les règles de suppression de Core Data sur One to Many

Je suis un peu flou sur les règles de suppression des relations de données de base. Donc, si quelqu'un pouvait m'aider à répondre à quelques questions à leur sujet.

J'ai les entités A et B. A a une relation to-many avec B, et B a une relation to-one avec A.

A <--->> B

Maintenant, si je mets la règle de suppression en A sur Cascade, je comprends que cela supprimera tous les Bs qui lui sont liés. Mais si je le mets à Nullify, cela mettra-t-il les B à NIL ou tout simplement la clé étrangère à Nil?

Et j'ai regardé partout sur la relation de B à A, dois-je la régler sur Nullify? Est-ce que cela annulera simplement "l'objet B" en A? Ou va-t-il annuler tous les B associés à A? Et Cascade? Va-t-il supprimer tous les B associés à A, ou juste le B particulier?

Ou dois-je simplement utiliser "Aucune action" sur la relation de B à A afin que lorsque je supprime B, aucun changement ne se produise pour A, mais la référence à B n'existera pas?

Je suis TRÈS confus avec ceux-ci, alors excusez mes questions.

Merci.

46
Shamy

Si vous définissez la règle de suppression sur "nullify" et supprimez l'objet A, les références à cet objet dans les Bs seront supprimées. L'inverse fonctionne de la même manière. Si vous avez une cascade et supprimez B, cela supprimera le A pointé par B. Il suivra ensuite la règle de suppression de A aux B restants (soit en cascade soit en annulation).

Les règles que vous définissez dépendent vraiment de votre modèle de données. Si A était un client et B étaient ses commandes, vous pouvez définir la règle A-> B pour refuser (empêcher A d'être supprimé si le client a des commandes) ou en cascade (supprimer les commandes lorsque le client est supprimé). La règle B-> A serait probablement "annuler". Si une commande est supprimée, il suffit de supprimer la référence à la commande du client.

Les règles de suppression de relation sont décrites dans le Apple Core Data Programming Guide

63
Paulw11

si vous définissez "annuler" et supprimez l'objet de A, l'objet de A et la relation arrière uniquement seront supprimés et non l'objet de B.

par exemple: l'entité client a annuler relation avec les commandes. et si vous supprimez un client de l'entité client, il supprimera simplement le client et sa relation de retour de la commande. il ne supprimera pas les commandes passées par le client

mais si la relation est "en cascade" elle supprimera le client et ses commandes.

si c'est "nier". si le client a une commande, il ne supprimera même pas le client.

2
Fisky