Common Data Service (CDS) ではエンティティ間の関係として、リレーションシップ(関連)とつながりロール(接続)を使えます。この記事ではその違いを紹介します。
リレーションシップ (関連)
リレーションシップを使うことで、エンティティ間に 1:N (一対多)、N:N (多対多) の関連を作成できます。伝播やマッピングを作成できます。
1:N (一対多) の関連
親レコードから見て複数の子レコードを関連として持つことができます。フォーム上では子エンティティはサブグリッドで表現され、紐づく子エンティティのレコードを複数表示できます。
N:1 (多対一) の関連
子エンティティから見た場合に親エンティティは特定レコードとなります。フォーム上では親エンティティは参照(ルックアップ)として表現されます。
多対多の関連
医師と患者のようにお互いに複数のレコードに関連する場合、多対多の関連が利用でき、フォーム上ではどちらのエンティティからもサブグリッドとして表現されます。
伝播
親レコードに対する操作が子レコードにどう影響するかを設定できます。
例えば親レコードが削除された場合の動作として以下のものを選択できます。
- カスケード: 子レコードも削除する
- リンクの削除: 子レコードは削除せず、参照をクリアする
- 制限: 子レコードがある場合、親レコードの削除を許可しない

削除以外にも、上図にある通り複数の操作に対する伝播を管理できます。
マッピング
現時点ではクラシックエディターのみですが、N:1 の関連でマッピングを追加できます。これは親レコードから子レコードを作成した場合に、フィールドの値をコピーする設定です。
つながりロール (接続)
リレーションシップと異なり、つながりロールはレコード間の関係を表現します。これにより、より柔軟にレコード間の性質をとらえることができます。
例えば以下のようなパターンが考えられます。
リレーションシップとつながりロールの使い分け
リレーションシップはそのエンティティのすべてのレコードに設定すべき値であり、かつ伝播などの制約をつけたい場合に有効ですが、情報として残しておきたい場合はつながりロールを使います。
まとめ
関連はよりシステマチックに、つながりロールはより柔軟にかつカジュアルに使える機能です。色々試してみてくください。