核心数据 - 可选属性和性能

the*_*oid 8 optimization core-data

根据核心数据编程指南:

您可以指定属性是可选的 - 也就是说,不需要具有值.但是,一般情况下,不鼓励您这样做 - 特别是对于数值(通常,您可以使用具有默认值的强制属性 - 在0的模型中获得更好的结果).原因是SQL对NULL有特殊的比较行为,与Objective-C的nil不同.数据库中的NULL与0不同,搜索0将不匹配NULL的列.

我总是使数值非可选,但没有日期和字符串.我的代码很方便基于日期和/或字符串为零的逻辑.

基于以上建议,我正在考虑使我的数据库中的所有内容都是非可选的.对于日期,我可以将模型默认值设置为0,对于字符串,模型默认值为nothing("").然后,在我的代码中,我可以测试[date timeIntervalSince1970]!= 0的日期和string.length!= 0的字符串.

问题是,对于一个相对较小的数据库,从核心数据性能的角度来看,这真的很重要吗?如果有问题的属性永远不会通过谓词直接查询,那么权衡是什么?

Mar*_*rra 10

我没有在中小型数据集上看到任何性能问题.我怀疑这是你在应用程序的性能阶段会遇到的问题.

我个人使用相同的非数字逻辑是可选的,如果它有意义,因为它确实使代码更容易,这反过来给了我更多的时间来优化以后.

  • 如果马库斯真的是一个核心数据忍者,那么我们永远不会见到他......除非这是他想让我们思考的.忍者是棘手的恶魔. (6认同)