我之前使用的唯一数据库是MySQL,因此CoreData的数据库设计让我感到困惑。
简而言之,该设计包含人与企业之间的多对多关系。很多人可以拥有一项业务。一个人可以拥有许多企业。
在这个简化的设计中,有3个表:
PERSON BUSINESS OWNED BUSINESS
------ -------- --------------
id id personID
name name businessID
email website acquisitionDate
OwnedBusiness表让我很困惑。在MySQL中,此表用于支持多对多关系。我知道CoreData并不需要这个,但我在OwnedBusiness中有一个额外的字段:acquisitionDate
。
额外字段acquisitionDate
是否保证使用额外的实体/表格?如果没有,那个领域会去哪里?
答案 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实例上那样尝试规范化数据库,通过规范化将会失去很多性能,开发人员经常会忽略这个问题。