2010-08-03 14 views
8

Per la Guida alla programmazione Core Data:Core Data - attributi opzionali e le prestazioni

È possibile specificare che un attributo è facoltativa -che è, non è necessaria di avere un valore. In generale, tuttavia, è sconsigliato , in particolare per i valori numerici (in genere è possibile ottenere risultati migliori utilizzando un attributo obbligatorio con un valore predefinito , nel modello di 0). Il motivo per questo è che SQL ha il comportamento di confronto speciale per NULL diverso da quello di Objective-C. NULL in un database non è uguale a 0, e le ricerche per 0 non corrispondono alle colonne con NULL.

Ho sempre reso i valori numerici non opzionali, ma non ho per le date e le stringhe. È conveniente nel mio codice basare la logica su date e/o stringhe essendo nulle.

Sulla base delle raccomandazioni di cui sopra, sto pensando di rendere tutto non disponibile nel mio database. Per le date, potrei impostare il valore predefinito del modello su un valore 0 e per le stringhe un modello predefinito di nothing (""). Quindi, nel mio codice potrei verificare le date per [data timeIntervalSince1970]! = 0 e stringhe per string.length! = 0.

La domanda è, per un database relativamente piccolo, questo è davvero importante dalle prestazioni dei dati principali punto di vista? E qual è il compromesso se l'attributo in questione non sarà mai interrogato direttamente tramite un predicato?

risposta

10

Non ho riscontrato problemi di prestazioni su set di dati di piccole e medie dimensioni. Sospetto che questo sia qualcosa che dovresti affrontare nella fase di performance della tua applicazione.

Personalmente io uso la stessa logica dei non numerici essendo facoltativa se ha senso in quanto effettivamente rende il codice più semplice che a sua volta mi dà più tempo per ottimizzare in seguito.

+0

Grazie mille Marcus! Speravo che saresti stato tu a rispondere a questo. Provenendo da un ninja certificato di Core Data mi dà la sicurezza di lasciare questo problema alle mie spalle. – thevoid

+6

Se Marcus fosse davvero un ninja di Core Data, non lo vedremmo mai ... a meno che non sia quello che vuole che pensiamo. I ninja sono diavoli ingannevoli. – TechZen