我有以下内容:
交易,联系和DealContact 。 交易可以有多个联系人。 联系可以属于许多商家。 DealContact 用于使用两种关系维护这两种关系: to-one 称为交易和 to-many 称为联系人。我还需要在 DealContact 中单独存储主要联系人。这是另一个名为主要的 to-one 关系。
联系然后反向多到 DealContact ,名为 dealcontacts ,到 - 一个称为 primarydealcontact 。 交易与 DealContact 没有相反的结果。交易也与联系没有直接关系。
在SQL中,我会使用连接表对其进行建模。我正在尝试使用 DealContact 进行此操作,因为除了交易和关联的联系人之外,我还需要存储其他属性。
有关此设置是否正确或可能更容易设置的任何建议都会非常有用。
答案 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
。这种反向关系几乎没有任何成本。
Contact
:Contact.primarydealcontract
为什么是一对一的关系?您确定Contact
不能成为多个Deal
的主要联系人吗?
无论如何都要详细说明。让我们来讨论什么不是非常重要的。 DealContact
。
该实体有什么意义?基本上,您Deal
与许多Contact
相关联,包括主Contact
。 DealContact
中的其他字段肯定与Deal
或Contact
相关,那么为什么要为它们设置专用实体?
这就是我看到实体的方式:
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]完全按预期工作。