主キーは必要ありません。ここで非常に複雑な関係を扱っているとは思いません。「GroupSector」と「SectorData」が必要になる可能性がありますが、このような単純なものでもうまくいく可能性があります。
- グループには多くのセクターがあります。このタイプの関係では、「1 つ以上」が暗示されます。
- グループには多くのデータがあります。
- データには 1 つのグループがあります。
- セクターには多くの (または多くのグループに属することができる) グループがあります。「各セクターは、1 つのグループのみに属することも、別のグループの一部になることもできる」というあなたの言い回しは混乱を招きますが、グループとの「多対多」の関係を暗示しているようです。
グループ内の各セクターは、そのグループが持つデータのすべてまたは一部を持つことができます (デフォルトでは、各セクターはそのグループ内のすべてのデータを持ち、各セクターは必要のないデータのタグを外すことができます)
このモデルでは、セクターは、所属するグループから関連データを取得できます。グループが持っているデータは、セクターが簡単に取得できます。とはいえ、セクターはすべてのグループ データを必要としない場合があります。これが「untaggedData」属性の目的です。その属性は、セクターのタグを解除する必要があるデータへの参照を保持できます。そのセクターを持つグループはそのデータを持っていないかもしれませんが、持っている場合は「タグなし」になります。それがあなたがここで望んでいたものかどうかは完全にはわかりませんので、必要に応じて明確にしてください。
各セクターは、そのグループ内の 1 つまたは複数のセクターと関連付けることができます。
このモデルを使用すると、どのセクターが特定のグループに属しているかを簡単に判断できるはずです。次のように、Sector にそれ自体との別の "to many" 関係を与えることもできます。
アップデート
あなたのコメントごと:
しかし、「untaggedData」の属性タイプはどうあるべきですか
場合によります。name のようなコンマ区切りの Data 属性のコレクションを持つ単純な NSString である可能性があります (例: @"data name 1 , data name 2, ..." Data に変更されない name 属性があると仮定)。とはいえ、データで参照している属性が変更される可能性が高い場合、これは適切な方法ではなく、別のデータ モデルを試してください。
解決策は、「untaggedData」属性を取り除き、SectorData と呼ばれる別のエンティティを使用することです。このエンティティは、Sector と "対 1" の関係を持ち、Data と "対多" の関係を持ちます。また、Sector の新しいセクタデータ関係とデータのセクタデータ関係と逆の関係を持つ必要があります。これらすべてを凝縮する方法があるかもしれませんが、そのまま試してみて、どうだったか教えてください. 幸運を!