Core data 核心数据多对多建模

Core data 核心数据多对多建模,core-data,many-to-many,Core Data,Many To Many,我有以下资料: 交易,联系人和交易联系人。一笔交易可以有许多联系人。一个联系人可以属于许多交易DealContact使用两种关系来维护这两种关系:对一个称为交易和对多个称为联系人。我还需要在DealContact中单独存储一个主要联系人。这是另一种称为“主”的“一对一”关系 联系人则与多个到DealContact相反,称为dealcontacts,而到一个则称为primarydealcontact。交易与交易联系人没有反比。交易与联系人也没有直接关系 在SQL中,我会使用联接表对此进行建模。我正

我有以下资料:

交易联系人和交易联系人。一笔交易可以有许多联系人。一个联系人可以属于许多交易DealContact使用两种关系来维护这两种关系:对一个称为交易和对多个称为联系人。我还需要在DealContact中单独存储一个主要联系人。这是另一种称为“主”的“一对一”关系

联系人则与多个
DealContact相反,称为dealcontacts,而到一个则称为primarydealcontact交易交易联系人没有反比。交易与联系人也没有直接关系

在SQL中,我会使用联接表对此进行建模。我正试图使用DealContact继续执行此操作,因为除了Deal和关联的联系人之外,我还需要存储其他属性


关于此设置是否正确或更简单的设置的任何建议都将非常有用。

让我用一个小型的老式ASCII模型来说明问题

Deal
- stuff

Contact
- stuff
- dealcontacts ->> DealContact
- primarydealcontact -> DealContact

DealContact
- stuff
- deal -> Deal
- contacts ->> Contact
- primary -> Contact
好的

这东西不太像coredataish

第一件事

Deal
:我不认为与
DealContact.Deal没有反向关系有什么意义。您必须手动处理
交易
删除,以确保没有
交易联系人
没有相关的
交易
。这种反向关系几乎不会让你付出任何代价

Contact
:为什么
Contact.primarydealcontract
是一对一关系?您确定一个
联系人
不能是多个
交易
的主要联系人吗

不管怎样,都要详细说明。让我们讨论一下什么不是很核心的<代码>解除联系

那个实体有什么意义?基本上,您已将
交易
连接到许多
联系人
,包括一个主要
联系人
DealContact
中的附加字段肯定与
Deal
Contact
相关,那么为什么要为它们指定一个专用实体呢

我是这样看待实体的:

Deal
- stuff // from Deal & from DealContact
- contacts ->> Contact
- primarycontact -> Contract

Contact
- stuff
- deals ->> Deal.contacts
- dealsprimary ->> Deal.primarycontact
核心数据将创建必要的关系表,以跟踪多对多关系。核心数据在这方面做得很好


当然,我不知道你申请的所有细节,所以我的建议是一个建议。没别的了。它可能适合你的需要,也可能不适合。但是考虑到您所说的,它应该适合您。

因此,在重新设计我的核心数据模型并删除DealContact实体后,我发现我实际上没有通过DealContact对象(具有核心数据访问器)从集合中删除ContactsObject。解决此问题后(通过将DealContact实体一起从模型中删除,大大简化了此问题)[deal removeContactsObject:oneContact]完全按照预期工作。

感谢您的建议。这大大帮助我消除了模型的复杂性,简化了整个应用程序。然而,这并没有解决这个问题。请参阅下面的解决方案。