Nach dem Core Data Programming Guide:
Sie können angeben, dass ein Attribut ist optional - das heißt, es ist nicht erforderlich einen Wert haben. Im Allgemeinen jedoch Sie sind davon abgeraten so-besonders für numerische Werte (Normalerweise können Sie bessere Ergebnisse erzielen Verwenden eines obligatorischen Attributs mit a Standardwert - im Modell - von 0). Das Grund dafür ist, dass SQL hat spezielles Vergleichsverhalten für NULL Das ist anders als bei Objective-C's nil. NULL in einer Datenbank ist nicht das Gleiche wie 0, und sucht nach 0 wird nicht übereinstimmen Spalten mit NULL.
Ich habe immer numerische Werte nicht optional gemacht, aber nicht für Daten und Strings. Es ist praktisch in meinem Code, Logik auf Daten und / oder Strings als Null zu basieren.
Basierend auf den obigen Empfehlungen überlege ich, alles in meiner Datenbank nicht optional zu machen. Für Daten konnte ich den Modellstandard auf einen Wert von 0 und für Zeichenfolgen auf einen Modellstandard von nichts ("") setzen. Dann könnte ich in meinem Code Daten für [date timeIntervalSince1970]! = 0 und Zeichenfolgen für string.length! = 0 testen.
Die Frage ist, ob es für eine relativ kleine Datenbank wirklich wichtig ist, was die Kerndatenleistung betrifft? Und was ist der Nachteil, wenn das fragliche Attribut niemals direkt über ein Prädikat abgefragt wird?
Ich habe keine Leistungsprobleme bei kleinen bis mittelgroßen Datensätzen gesehen. Ich vermute, dass Sie damit in der Leistungsphase Ihrer Bewerbung konfrontiert werden.
Persönlich verwende ich die gleiche Logik, bei der Numerik optional ist, wenn sie sinnvoll ist, da sie den Code tatsächlich einfacher macht, was mir wiederum mehr Zeit gibt, später zu optimieren.
Tags und Links optimization core-data