我应该问自己什么问题来确定我的 Core Data 应用程序是否需要 'primary key'?

What questions should I ask myself to determine if I need a 'primary key' for my Core Data app?

我正在 Swift 中使用 Core Data 构建一个简单的应用程序,并尝试决定是否应该在我的实体中存储唯一 ID。在我的研究中,我找到了这样做的例子和不这样做的例子,但我没有找到这种决定背后的任何明确原因。

请注意: - 我有 RDBMS 背景,我知道 Core Data 是一个对象图,而不是关系数据库 - 我确实知道 Core Data 创建了一个 NSManagedObjectID,但我如何确定它是否足够

我看到像 this 这样的帖子(顺便说一下,从 7 年前开始)列出了这些选项:

但我没能找到很多关于哪些选项适用于哪些情况的信息。

我应该问自己什么问题来弄清楚 Core Data 的唯一标识符 (NSManagedObjectID) 是否是我所需要的,或者我是否应该超越它并选择将我自己的一个加入其中。

if Core Data's unique identifier (NSManagedObjectID) is all I need

具体需要什么用途?

Core Data在内部维护了它的对象的主键,所以你基本上不需要自己实现它们。在 CD 中,您与已经具有建立关系机制的对象进行交互。您只需将一个 NSManagedObject 分配给另一个 NSManagedObject 的 属性,这将代表 O2O 或 O2M 关系,如下所示:

anotherObject.parent = oneObject;

对于多边会有一套。看看 documentation.

唯一需要某种外键的情况是将数据与某些网络服务同步时。

如果您需要在用户默认设置中存储对某些特定 NSManagedObject 的引用,您可能对此 post 感兴趣。

顺便说一下,还有 [[NSUUID UUID] UUIDString]

在 Core Data 中使用您自己的唯一 ID 的唯一原因是您曾经将数据同步到其他设备或 Web 服务。 NSManagedObjectID 足以供本地使用,但它们不能很好地用于同步。例如,如果您从后端服务器获取数据,它可能具有唯一 ID,但您不能强制 Core Data 使用它们。同样,即使您同步到另一台 iOS 设备,您也不能强制第二台设备上的 Core Data 使用与第一台设备相同的 NSManagedObjectID

对于本地使用,NSManagedObjectID 即可。如果您需要在用户默认值中保存对托管对象的引用,您可以存储它。稍后您可以使用 object(with:)existingObject(with:) 快速检索托管对象。