0

我有以下内容:

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

然后, Contact有一个与DealContact相反的一对多,称为dealcontacts一个称为primarydealcontact的一对多。Deal与DealContact没有相反的关系。交易也与Contact没有直接关系。

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

有关此设置是否正确或设置更简单的任何建议都会非常有帮助。

4

2 回答 2

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肯定与 theDeal或 a相关Contact,那么为什么要为它们提供专用实体呢?

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

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

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

Core Data 将创建必要的关系表来跟踪多对多关系。Core Data 在这方面做得很好。

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

于 2012-07-14T15:12:35.420 回答
0

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

于 2012-07-14T22:06:27.123 回答