0

私は次のものを持っています:

DealContact、DealContact取引には多くの連絡先が含まれる場合があります。連絡先は多くの取引に属することができます。DealContactは、2つの関係を使用してこの両方を維持するために使用されます。1つは取引と呼ばれ、1つは連絡先呼ばれます。また、プライマリ連絡先をDealContactに個別に保存する必要があります。これは、プライマリと呼ばれるもう1つの1対1の関係です。

その場合、 Contactには、dealcontactsと呼ばれるDealContactの逆数と、 primarydealcontactと呼ばれるto -oneあります。Dealには、 DealContactの逆はありません。取引はまた、連絡先と直接の関係はありません。

SQLでは、結合テーブルを使用してこれをモデル化しました。Dealと関連する連絡先だけでなく、追加のプロパティを保存する必要があるため、DealContactを使用してこれを引き継ぐことを試みています。

この設定が正しいかどうか、またはおそらくより簡単な設定であるかどうかについての提案は非常に役立ちます。

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ていないことを確認するには、削除を手動で処理する必要があります。その逆の関係はあなたにほとんど何の費用もかかりません。DealContactDeal

Contact:なぜContact.primarydealcontract1対1の関係なのですか?あなたは確かにいくつかContactの主要な連絡先になることはできませんかDeal

とにかくそのすべてを詳しく説明します。あまりコアデータ化されていないものについて説明しましょう。DealContact

そのエンティティのポイントは何ですか?基本的に、プライマリを含むDeal多くのに接続しています。の追加フィールドは、またはに関連していることが最も確実です。それでは、なぜそれらの専用エンティティなのですか?ContactContactDealContactDealContact

これは私がエンティティを見る方法です:

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

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

Core Dataは、多対多の関係を追跡するために必要な関係テーブルを作成します。CoreDataはそれを非常にうまく行っています。

もちろん、私はあなたのアプリケーションのすべての詳細を知りません、それで私の提案は、まあ、提案です。これ以上何もない。それはあなたのニーズに合うかもしれませんし、そうでないかもしれません。しかし、あなたが言ったことを考えると、それはあなたのために働くはずです。

于 2012-07-14T15:12:35.420 に答える
0

したがって、コアデータモデルを再設計してDealContactエンティティを削除した後、実際には、DealContactオブジェクト(コアデータアクセサーを持っていた)をセットからremoveContactsObjectに渡していないことがわかりました。この問題をクリアした後(モデルからDealContactエンティティをまとめて削除することで大幅に簡素化されました)、[deal removeContactsObject:oneContact]は期待どおりに機能しました。

于 2012-07-14T22:06:27.123 に答える