这种模式适用于核心数据吗?

时间:2015-05-05 14:35:27

标签: ios core-data database-design

我之前使用的唯一数据库是MySQL,因此CoreData的数据库设计让我感到困惑。

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

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

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

OwnedBusiness表让我很困惑。在MySQL中,此表用于支持多对多关系。我知道CoreData并不需要这个,但我在OwnedBusiness中有一个额外的字段:acquisitionDate

额外字段acquisitionDate是否保证使用额外的实体/表格?如果没有,那个领域会去哪里?

2 个答案:

答案 0 :(得分:17)

首先,核心数据不是数据库,完全停止。

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

可以持久存储到数据库中的磁盘上。它也可以作为二进制,XML和其他任何东西持久存在。它甚至不需要 来保持。

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

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

答案 1 :(得分:1)

首先,CoreData不是关系db只是为了清除它。

其次,我认为您应该快速查看CoreData文档,因为您熟悉MySql这将是一个简单的阅读,我想您会对额外的功能感到惊讶CoreData提供的内容。

关于many-to-many关系,CoreData支持此关系,而无需额外的表。此关系也不基于id,它们直接基于对象。

因此,在您的情况下,您不必使用id&要创建关系的商家id,您可以在Relationship的{​​{1}}部分创建关系,在那里您可以设置关系类(或目标),与该关系的反转(有用的东西)当然还有关系的类型(to-many,to-one)。

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