这种模式适合核心数据吗?

Is this pattern suitable for Core Data?

我之前使用过的数据库只有 MySQL,所以 CoreData 的数据库设计让我有点困惑。

简而言之,该设计包含人与企业之间的多对多关系。许多人可以拥有一家企业。一个人可以拥有很多企业。

在这个简化的设计中,有 3 个 table:

PERSON       BUSINESS      OWNED BUSINESS
------       --------      --------------
id           id            personID
name         name          businessID
email        website       acquisitionDate

OwnedBusiness table 让我感到困惑。在MySQL中,这个table是用来支持多对多关系的。我知道 CoreData 不需要这个,但是我在 OwnedBusiness 中有一个额外的字段:acquisitionDate.


额外的字段 acquisitionDate 是否保证使用额外的 entity/table?如果不是,那个字段会去哪里?

首先,Core Data 不是数据库,句号。

Core Data 是一个对象图管理框架,您的应用程序中的模型。

可以 保存到数据库中的磁盘。它也可以作为二进制文件、XML 和其他任何东西保存。它甚至 不需要 坚持。

仅将 Core Data 视为对象图。在您的示例中,您将拥有一个 Person 实体、一个 Business 实体和一个 OwnedBusiness 实体。

OwnedBusiness 实体将有两个关系和一个 属性。你不会管理外键,因为 Core Data 会处理 如果 你最终持久化到数据库。否则它们是对象指针。

所以首先,CoreData 不是关系 db 只是为了澄清这一点。

其次,我认为您应该快速浏览一下 CoreData 文档,因为您熟悉 MySql,所以阅读起来会很容易,我想您会对CoreData 提供的额外功能。

关于many-to-many关系,CoreData支持这种关系,不需要额外的表。此外,关系不基于 ids,它们直接基于对象。

因此,在您的情况下,您不必使用人员 id 和业务 id 来创建关系,您可以在 Relationship 部分创建关系你的xcdatamodel,在那里你可以设置关系class(或目的地),与该关系(有用的东西)相反,当然还有关系的类型(对多,对一)。

因此,为了回答您的问题,您可以根据您的业务逻辑将其添加到此处。作为一个简短的建议,请不要像在普通 MySql 实例上那样尝试规范化数据库,规范化会降低很多性能,开发人员经常忽略这一点。