🔍 Core Data/SwiftData 无需设置主键

为您每周带来有关 Swift 和 SwiftUI 的精选资讯!

TL;DR: Core Data 和 SwiftData 利用 SQLite 内部的 Z_PK(自增 ID)和 Z_ENT(实体类型)自动管理主键,无需手动设置主键,确保数据唯一性和完整性。

疑问

在使用 Core Data 或 SwiftData 进行 iOS 开发时,很多开发者都会有一个疑问:为什么不像传统数据库那样需要设置主键?

解答

其实,这两个框架在底层的 SQLite 数据库中已经自动实现了一套完整的主键管理机制,无需开发者额外定义:

  1. 自动递增的主键 (Z_PK):每个实体表都会包含一个从 1 开始递增的 Z_PK 字段,作为自增主键。
  2. 实体标识 (Z_ENT):每个实体表会添加一个 Z_ENT 字段,用于标识表的实体类型。
  3. 唯一定位记录 (Z_PK + Z_ENT):通过 Z_PKZ_ENT 的组合,可以在整个数据库中唯一定位一条记录。
  4. 主键值管理 (Z_PRIMARYKEY):Core Data 会通过 Z_PRIMARYKEY 表来管理每个实体表的主键自增值(Z_MAX),确保每次插入新记录时能够分配正确的主键。

正因为框架在底层已经自动实现了这套机制,开发者在数据模型设计时既无需手动创建主键,也无法自定义自增主键。这种设计不仅简化了开发过程,还确保了数据的唯一性和完整性。

友情提示:

如果需要将数据导出,建议在模型中添加一个标识符属性(例如 UUID)。这样可以确保数据导出后依然能够正确维护记录间的关系。

延伸阅读: