CoreData: 多対1の定義と保存

CoreData で多対多の定義方法は分かったのですが、多対1についてがよく分からず、いろいろ調べたところようやくわかりました。

まず、多対1とは何だ?ですが、お買い物をした時のレシートでいうと、店名、明細部分の商品名などに当たります。図書館のカードで言うと、書名部分でしょうか。データベースを作るときに、多対1の関係性はよく発生します。

多対1の定義の方法ですが、フィールドをどのように定義するのか分からなかったのですが、結論を言うとフィールドの定義は必要ありません。代わって、Relationship の設定が必要で、逆に言うと、Relationship の設定ができていれば保存できます。RDB を扱っていると、マスターの sequence number を保存しておくためのフィールドを定義しなくちゃとか思いがちですが、その必要はないと。何だか拍子抜けしました。

次に、マスターのレコードを特定できたとして、何を保存するのか、ということですが、entityname.relationshipname = record という形にすれば保存できます。つまり、relationship がフィールドを兼ねていて、そこにマスターのレコードを代入する形でポインタが保存され、プログラマとしては分かりやすく、後の処理は coredata が引き受けてくれるということです。

これ、かなり便利な反面、そこまでやってくれることに気づくまでは分かりにくい仕様だなと思います。

と言うことで、多対多も多対1もどんとこい、ということで・・・