根据核心数据编程指南:
您可以指定属性 可选 - 也就是说,它不是必需的 有价值。但是,一般来说, 你不鼓励这样做 所以 - 特别是对于数值 (通常你可以获得更好的结果 使用强制属性 默认值 - 在模型中为0)。该 原因是SQL有 NULL的特殊比较行为 这与Objective-C的不同之处不同。空值 在数据库中与0不一样, 并且搜索0将不匹配 列为NULL。
我总是将数值设置为非可选,但不包含日期和字符串。在我的代码中,方便的是将日期和/或字符串的逻辑基于nil。
根据以上建议,我正在考虑让我的数据库中的所有内容都是非可选的。对于日期,我可以将模型默认值设置为0,对于字符串,模型默认值为nothing(“”)。然后,在我的代码中,我可以测试[date timeIntervalSince1970]的日期!= 0和string.length!= 0的字符串。
问题是,对于一个相对较小的数据库,从Core Data性能的角度来看,这真的很重要吗?如果有问题的属性永远不会通过谓词直接查询,那么权衡是什么?
答案 0 :(得分:10)
我没有在中小型数据集上看到任何性能问题。我怀疑这是你在应用程序的性能阶段会遇到的问题。
我个人使用相同的非数字逻辑是可选的,如果它有意义,因为它确实使代码更容易,这反过来给了我更多的时间进行优化。