2011-01-26 22 views
5

Ho un modello di dati che sto provando a trasferire da una struttura di tabella basata su SQLite a un modello di dati di base. La mia struttura SQLite ha una tabella Zone e una tabella TransitLogs. Un transit può avere la seguente (nel mio schema SQLite) start_zone_id end_zone_idDati principali più relazioni con la stessa entità

ognuno dei quali è una chiave esterna alla tabella zone. Funziona bene in SQL. Ma quando mi trasferisco su Core Data ho difficoltà a capire come modellarlo.

Il mio primo tentativo mi ha avere due relazioni nella mia transit entità con una relazione startZone e di meta attributi che puntano a una Zona (purtroppo non è stato in grado di inviare uno screenshot di Xcode come questo è il mio primo post qui)

La domanda che ho è come gestire la relazione inversa per gli attributi della relazione startZone e endZone. Non ho bisogno di loro? Nella documentazione e nei libri che ho letto su questo argomento, è meglio usare sempre una relazione inversa, ma mi chiedo in merito a questa particolare situazione se non si applica. Oppure sto semplicemente modellando questo in modo errato in Core Data.

Grazie per qualsiasi consiglio.

Mike

risposta

3

Si possono avere due rapporti separati a-molti in seno al soggetto zona che puntano a transit, nome simile a startLogs e endLogs. Quelli sarebbero gli inversi per startZone e endZone, rispettivamente.

+1

Si noti che le relazioni inverse sebbene non assolutamente richieste in un senso di compilazione/sintassi sono necessarie per consentire a CoreData di aggiornare i molti set quando quello viene eliminato. –

+0

Se non hai mai bisogno di andare da Zone a TransitLogs, puoi fare a meno della relazione inversa. Non sembra che l'eliminazione di un TransitLog abbia effetti sul suo startZone e endZone. Quindi, sembra che tu possa andare bene per omettere le relazioni inverse. Tuttavia, se pensi di non voler mai, per esempio, conta quanti registri di transito provengono da ciascuna zona, quindi potresti voler aggiungere relazioni inverse ora e risparmiarti lo sforzo di migrazione in seguito. – westsider

1

Grazie ragazzi - entrambe le risposte hanno aiutato molto. Westsider ha ragione, al momento non ho bisogno di attraversare la zona fino ai TransitLogs ed è stato il motivo per cui mi stavo chiedendo. Ma detto questo suppongo che sia possibile che potrei averne bisogno ad un certo punto (migliaia di utenti chiedono a gran voce la possibilità di farlo), quindi probabilmente è meglio modellarlo ora.

Grazie ancora per le risposte.

2

Il controllo delle versioni e delle migrazioni dei modelli non banali può rappresentare un problema in tempo reale, soprattutto la prima volta. Per questo motivo, così come Apple consiglia di usarli, raccomanderei di aggiungere le relazioni inverse.

Detto questo, ho trovato almeno un caso in cui semplicemente non aveva senso aggiungere una relazione inversa - e tutto funziona correttamente. Ma in quel caso c'era (e rimane) estremamente difficile trovare uno scenario in cui la relazione inversa sarebbe sempre utile o necessaria.

Problemi correlati