Core data 核心数据多对多建模
我有以下资料: 交易,联系人和交易联系人。一笔交易可以有许多联系人。一个联系人可以属于许多交易DealContact使用两种关系来维护这两种关系:对一个称为交易和对多个称为联系人。我还需要在DealContact中单独存储一个主要联系人。这是另一种称为“主”的“一对一”关系 联系人则与多个到DealContact相反,称为dealcontacts,而到一个则称为primarydealcontact。交易与交易联系人没有反比。交易与联系人也没有直接关系 在SQL中,我会使用联接表对此进行建模。我正试图使用DealContact继续执行此操作,因为除了Deal和关联的联系人之外,我还需要存储其他属性Core data 核心数据多对多建模,core-data,many-to-many,Core Data,Many To Many,我有以下资料: 交易,联系人和交易联系人。一笔交易可以有许多联系人。一个联系人可以属于许多交易DealContact使用两种关系来维护这两种关系:对一个称为交易和对多个称为联系人。我还需要在DealContact中单独存储一个主要联系人。这是另一种称为“主”的“一对一”关系 联系人则与多个到DealContact相反,称为dealcontacts,而到一个则称为primarydealcontact。交易与交易联系人没有反比。交易与联系人也没有直接关系 在SQL中,我会使用联接表对此进行建模。我正
关于此设置是否正确或更简单的设置的任何建议都将非常有用。让我用一个小型的老式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]完全按照预期工作。感谢您的建议。这大大帮助我消除了模型的复杂性,简化了整个应用程序。然而,这并没有解决这个问题。请参阅下面的解决方案。