核心数据建模多对多

时间:2012-07-13 23:23:56

标签: core-data many-to-many

我有以下内容:

交易联系和DealContact 交易可以有多个联系人联系可以属于许多商家 DealContact 用于使用两种关系维护这两种关系: to-one 称为交易 to-many 称为联系人。我还需要在 DealContact 中单独存储主要联系人。这是另一个名为主要 to-one 关系。

联系然后反向多 DealContact ,名为 dealcontacts 到 - 一个称为 primarydealcontact 交易 DealContact 没有相反的结果。交易也与联系没有直接关系。

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

有关此设置是否正确或可能更容易设置的任何建议都会非常有用。

2 个答案:

答案 0 :(得分:2)

让我用一个小的旧学校ASCII模型来解决问题。

Deal
- stuff

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

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

好的。

这个东西不是很合情合理。

首先是第一件事。

Deal:我不认为与DealContact.deal没有反向关系。您必须手动处理Deal删除,以确保没有相关DealContact时没有Deal。这种反向关系几乎没有任何成本。

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

无论如何都要详细说明。让我们来讨论什么不是非常重要的。 DealContact

该实体有什么意义?基本上,您Deal与许多Contact相关联,包括主ContactDealContact中的其他字段肯定与DealContact相关,那么为什么要为它们设置专用实体?

这就是我看到实体的方式:

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

Contact
- stuff
- deals ->> Deal.contacts
- dealsprimary ->> Deal.primarycontact

核心数据将创建必要的关系表,以跟踪多对多关系。核心数据做得非常好。

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

答案 1 :(得分:0)

事实证明,在重新设计我的Core Data模型并删除DealContact实体之后,我发现我实际上没有传递DealContact对象(具有核心数据访问器)来从集合中移除ContactContactsObject。清除此问题后(通过从模型中删除DealContact实体大大简化了这一点)[deal removeContactsObject:oneContact]完全按预期工作。