テーブルのリレーションシップとカスケード

Published: feedback 共有

こんにちは、Power Platform サポートチーム鈴木です。

Datavers のテーブルとテーブルは、1:N、もしくは N:N の関連付けが可能です。
関連付けされたテーブル定義のことを、リレーションシップと呼びますが、今回はテーブル間のリレーションシップにおける、カスケード (伝播) 処理について、具体的な動作とともにご紹介します。

リレーションシップの確認


テーブル間のリレーションシップの作成、変更、確認は、Power Apps にてテーブル > リレーションシップから確認できます。

1:N の 1 側のテーブルから確認する場合も、N 側のテーブルから確認する場合も同じで、どちらか一方で設定を変更した場合は、もう一方の設定に引き継がれます。

カスケード設定について


各リレーションシップのカスケード処理は、リレーションシップをクリックして表示される詳細オプションから確認できます。

動作の種類と選択可能なカスケード処理は、以下の通りです。

親子(上位下位)

リレーションシップが親子に設定されているときは、親レコードから子レコードへすべての処理がカスケードされます。

参照

リレーションシップが参照に設定されているときは、削除処理のみ「リンクの削除」か「制限」を選択できます。

カスタム

リレーションシップがカスタムに設定されているときは、各処理を自由に定義できます。

カスケード設定の各動作について


各カスケード処理について 1:N の場合の動作を説明します。

削除


1 側のレコードを削除したときに、関連付けられた N 側のレコードはどうなるでしょうか?

・すべてにカスケード

1 側のレコードを削除すると、N 側のレコードも削除されます。

・リンクの削除

1 側のレコードを削除すると、N 側のレコードは削除されませんが、関連付けが解除されます。
つまり 1 側の参照先をもたない、N 側のレコードが残ります。

・制限

1側のレコードを削除しようとすると、関連付けられた N 側のレコードが存在するため、削除できません。
以下のようなエラーメッセージが表示されます。

割り当て


1 側のレコードの所有者を変更したときに、関連付けられた N 側の所有者はどうなるでしょうか?

・すべてにカスケード

1 側のレコードの所有者を変更すると、N 側のレコードの所有者も 1 側と同じ所有者に変更されます。
※変更する所有者にN側のアクセス権がない場合は、1 側の所有者として指定することはできません。

・アクティブにカスケード

1 側のレコードの所有者を変更すると、N 側のアクティブレコードの所有者は、1 側と同じ所有者に変更されます。
N 側が非アクティブレコードだった場合は、N 側のレコードの所有者は変更されません。
※変更する所有者に N 側のアクセス権がない場合は、1 側の所有者として指定することはできません。

・ユーザー所有にカスケード

1 側のレコードの所有者を変更すると、N 側のレコードの所有者が 1 側の元の所有者と同じだった場合は、1 側と同じ所有者に変更されます。
N 側が 1 側のレコードの元の所有者と異なる場合は、N 側のレコードの所有者は変更されません。
※変更する所有者に N 側のアクセス権がない場合は、1 側の所有者として指定することはできません。

・カスケードなし

1 側のレコードの所有者を変更しても、N 側のレコードの所有者は変更されません。

共有


テーブルにアクセス権のないユーザーやチームに対して、レコード毎に共有設定を行うことができます。
レコードの 共有 > アクセスの管理 から設定できます。

では、1 側のレコードを他者 (ユーザー A) に共有した場合、関連付けられた N 側のレコードへのアクセス権はどうなるでしょうか?

・すべてにカスケード

1 側のレコードをユーザー A に共有すると、ユーザー A は N 側のレコードにもアクセス権をもちます。
例えば、1 側に読み込み、書き込み特権を付けると、N 側のレコードにも同じく読み込み、書き込み特権をもちます。

ヒント

1 側の共有設定 (共有設定から確認できます。)

N 側のアクセス権 (アクセスの確認からユーザーを検索して確認できます。)

・アクティブにカスケード

1 側のレコードをユーザー A に共有すると、ユーザー A は N 側のアクティブレコードにもアクセス権をもちます。
N 側が非アクティブレコードだった場合、ユーザー A は N 側のレコードのアクセス権をもちません。

・ユーザー所有にカスケード

1 側のレコードのユーザー A に共有すると、N 側のレコードの所有者が 1 側の元の所有者と同じだった場合、ユーザー A は N 側のレコードにもアクセス権をもちます。
N 側が 1 側のレコードの元の所有者と異なる場合は、1 側のレコードをユーザー A に共有しても、ユーザー A は N 側のレコードのアクセス権をもちません。

・カスケードなし

1 側のレコードをユーザー A に共有しても、ユーザー A は、N 側のレコードのアクセス権をもちません。

共有の解除


1 側のレコードを他者 (ユーザー A) に共有し、その後共有を解除すると、関連付けられた N 側のレコードへのアクセス権はどうなるでしょうか?
※共有設定はカスケードされる設定を想定しています。

・すべてにカスケード

1 側のレコードをユーザー A に共有し、その後共有解除すると、ユーザー A は N 側のレコードのアクセス権も解除され、アクセスできません。

・アクティブにカスケード

1 側のレコードをユーザー A に共有し、その後共有解除すると、ユーザー A は N 側のアクティブレコードのアクセス権も解除され、アクセスできません。
N 側が非アクティブレコードだった場合、ユーザー A は N 側のレコードのアクセス権をもち続けます。

・ユーザー所有にカスケード

1 側のレコードをユーザー A に共有し、その後共有解除すると、N 側のレコードの所有者が 1 側の元の所有者と同じだった場合、ユーザー A は N 側のレコードのアクセス権も解除され、アクセスできません。
N 側が 1 側のレコードの元の所有者と異なる場合は、1 側のレコードをユーザー A に共有し、その後共有解除しても、ユーザー A は N 側のレコードのアクセス権をもち続けます。

・カスケードなし

1 側のレコードをユーザー A に共有し、その後共有解除しても、ユーザー A は N 側のレコードのアクセス権をもち続けます。

親の関連付けの再設定(リペアレント)


「1 側に N 側のレコードを関連付けする設定時」に N 側レコードへのアクセスに対して、1 側レコードのものを継承させるかどうか、という設定になります。
「共有」と「親の関連付けの再設定」の違いは、「共有」は「1 側のレコードで共有設定を行ったときにすでに関連づけられている N 側レコードに対して共有を継承させるかどうか」であることに対して、「親の関連付けの再設定」は「1 側のレコードで N 側レコードに対する関連付けを行ったときに存在する共有設定を N 側レコードに対して継承させるかどうか」です。

では、1 側のレコードをすでに他者 (ユーザー A) に共有している場合、共有設定後に関連付けられた N 側のレコードへのアクセス権はどうなるでしょうか?

・すべてにカスケード

1 側のレコードに N 側のレコードを関連付けると、ユーザー A は N 側のレコードにアクセスできます。

・アクティブにカスケード

1 側のレコードに N 側のレコードを関連付けると、ユーザー A は N 側のアクティブなレコードにアクセスできます。
N 側が非アクティブレコードだった場合、ユーザー A は N 側のレコードのアクセス権をもちません。

・ユーザー所有にカスケード

1 側のレコードに N 側のレコードを関連付けると、N 側のレコードの所有者が 1 側の元の所有者と同じだった場合、ユーザー A は N 側のレコードにもアクセス権をもちます。
N 側が 1 側のレコードの元の所有者と異なる場合は、1 側のレコードをユーザー A に共有しても、ユーザー A は N 側のレコードのアクセス権をもちません。

・カスケードなし

1 側のレコードに N 側のレコードを関連付けても、ユーザー A は N 側のレコードのアクセス権をもちません。

よくあるご質問


・カスケード処理の「共有」を「すべてにカスケード」から「カスケードなし」に変更しました。既存の共有設定はどうなりますか?

カスケード処理変更前に既に共有されたレコードは、既に共有レコードを管理するテーブルに共有情報が登録されているため、カスケード処理を変更しても動作が変わりません。
カスケード処理変更前に共有されたレコードは、一度共有を解除し、再度共有設定することで、変更後のカスケード処理を伝播します。
注意事項として、「共有の解除」が「カスケードなし」の設定になっている場合には共有解除したことがカスケードされないため、再共有した場合に N 側レコードの参照ができてしまいます。
これを防ぐためには、「共有の解除」は「カスケード」される設定にしておく必要があります。

・1 側のレコードの所有者がユーザー A で、N 側のレコードの所有者がユーザー B です。ユーザー A は N 側のレコードへアクセス権をもちますか?

※ユーザー A は、N 側テーブルのアクセス権をもっていない、かつ共有設定は行われていない前提です。
親の関連付けの再設定が「カスケード」の場合、ユーザー A は所有者の異なる N 側のレコードへアクセス権をもちます。
親の関連付けの再設定が「カスケードなし」の場合は、ユーザー A は所有者の異なる N 側のレコードへアクセス権をもちません。

おわりに


今回ご説明した内容に関連した公開情報について、ご紹介します。
テーブル リレーションシップ
テーブル間に関連付けを作成する
行の割り当てまたは共有
ユーザーまたはチームと行を共有する
行に対するユーザー アクセスを確認する

今回は、テーブル間のリレーションシップにおけるカスケード処理の具体的な動作についてご案内しました。
テーブルによっては、事前定義されたアプリケーション動作を担保するためにシステム側で予め設定されたカスケード処理が存在する場合や、カスケードは設定がない場合も製品プラグインによってカスケードに近い処理を実施している場合もありますので、ご留意ください。

※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。