2015-03-25 11 views
36

Sono un po 'confuso sulle regole di eliminazione delle relazioni tra i dati di base. Quindi, se qualcuno potesse aiutarmi a rispondere ad alcune domande su di loro.Comprensione dei dati principali eliminazione regole su One to Many

ho Entità A e B. A ha un rapporto a-molti con B e B ha un rapporto to-One con A.

Un < --- >> B

Ora, se imposto la regola di cancellazione su A su Cascade, capisco che cancellerà tutti i Bs relativi ad esso. Ma se lo avessi impostato su Nullify, imposterebbe i Bs su NIL o solo la chiave esterna su Nil?

E ho cercato ovunque il rapporto da B a A, dovrei impostarlo su Nullify? Sarà solo Nullare l'oggetto "B" in A? O annullerà tutti i Bs associati ad A? Che mi dici di Cascade? Cancellerà tutti i Bs associati ad A, o solo il particolare B?

O semplicemente uso "Nessuna azione" sulla relazione da B a A in modo che quando elimino B, nessun cambiamento accadrà ad A, ma il riferimento a B non esisterà?

Sono molto confuso con questi, quindi scusate le mie domande.

Grazie.

+2

Bellissima question..upvoted – NSPratik

risposta

55

Se si imposta la regola di cancellazione su "annulla" e si elimina l'oggetto A, i riferimenti a quell'oggetto in Bs verranno rimossi. L'inverso funziona allo stesso modo. Se hai cascata ed elimina B, rimuoverà A che B ha indicato. Seguirà quindi la regola di cancellazione da A ai rimanenti Bs (a cascata o nullify).

Le regole impostate dipendono davvero dal modello di dati. Se A fosse un cliente e B fossero i loro ordini, allora potresti impostare la regola A-> B per negare (evitare che A venga cancellata se il cliente ha ordini) o eseguire una cascata (eliminare gli ordini quando il cliente viene eliminato). La regola B-> A sarebbe probabilmente "annullata". Se un ordine viene eliminato, rimuovi semplicemente il riferimento all'ordine dal cliente.

Il rapporto eliminare le regole sono descritte nella Apple Core Data Programming Guide

+1

E "Non fare nulla" sarà semplice mantenere il riferimento, senza di essa realmente esistente, giusto? – Shamy

+0

Sì, l'eliminazione di A con "Nessuna azione" potrebbe causare il riferimento a un inesistente A – Paulw11

+0

"Nullify Rimuovere la relazione tra gli oggetti ma non eliminare alcun oggetto. Questo ha senso solo se la relazione di reparto per un dipendente è facoltativo o se si assicura di impostare un nuovo reparto per ciascuno dei dipendenti prima della successiva operazione di salvataggio. Si dice annullamento "non eliminare alcun oggetto". " Questo è davvero confuso. Quindi, se davvero voglio cancellare A, non posso impostare la regola per annullare? – LShi