【发布时间】:2010-08-03 22:20:49
【问题描述】:
根据核心数据编程指南:
你可以指定一个属性是 可选——也就是说,它不是必需的 要有一个价值。然而,总的来说, 你不鼓励做 所以——尤其是数值 (通常你可以获得更好的结果 使用强制属性 默认值(在模型中)为 0)。这 原因是 SQL 有 NULL 的特殊比较行为 这与 Objective-C 的 nil 不同。空值 在数据库中不等于0, 并且搜索 0 将不匹配 带有 NULL 的列。
我总是将数值设为非可选,但对于日期和字符串却没有。在我的代码中,将逻辑基于日期和/或字符串为零是很方便的。
基于上述建议,我正在考虑将数据库中的所有内容设为非可选。对于日期,我可以将模型默认值设置为 0,对于字符串,模型默认值为空(“”)。然后,在我的代码中,我可以测试 [date timeIntervalSince1970] != 0 的日期和 string.length != 0 的字符串。
问题是,对于一个相对较小的数据库,从 Core Data 性能的角度来看,这真的很重要吗?如果所讨论的属性永远不会通过谓词直接查询,那么权衡是什么?
【问题讨论】: