最近、MSPP(Microsoft power platform)でアプリを開発しているのですが、C#等のプロコードの方が楽なのに、と思う事も少なくないですね。
きっと、MSPPのやり方に慣れていないからで、パターンさえ習得すれば恐ろしく速くアプリを開発できるようになると思うのですが。
ということで、今回はDataverseを使ってテーブルとテーブルをリレーションさせます。
MySQLやPostgreSQL等のRDB(Relational Database)と比べれば少しややこしい気がするリレーション。MSPPでは多対一、一対多、多対多のリレーションシップを作成することが可能です。
今回は一対多のリレーションシップを作成します。
図で表すとこんな感じ。
請求書をイメージすると分かりやすいです。
請求書の顧客名、自社名、請求金額(合計)、消費税等は親テーブルに入っています。各項目(項目1、項目2・・・)の情報は子テーブル入っています。親テーブル1レコードにつき、子テーブルのレコードが複数になることから1対多と言います。
まず、Power Appsのテーブルから親テーブルの詳細画面を開きます。
スキーマの”リレーションシップ”をクリックします。
”+新しいリレーションシップ”をクリックし、”一対多”を選択します。
子テーブルを指定します。
ルックアップ列とは親テーブルのID(Dataverseの場合、IDより多くの情報が格納される)が格納される項目です。検索列とはルックアップ列と同じ意味です。翻訳がバグってますね。
リレーションシップ名は、このリレーションシップを活用するときに使用しますので、気に留めておきましょう。
関連付け動作は親レコードを削除した時に子レコードをどうするかなどを決めます。
後で変更できるので一旦は図の通り、参照-リンクの削除で良いと思います。
・参照-リンクの削除:親レコードの変更が子レコードに、子レコードの変更が親レコードに影響することはありません。
・参照-制限:親レコードの変更は子レコードに影響しませんが、子レコードが存在しているときは親レコードの削除ができません。
・親子:親レコードを削除すると子レコードも削除されます。割り当てや共有なども実行されます。
・カスタム:各項目の伝播の動作について設定できます。
これで、リレーションシップが設定できるのですが、RDBと違うのは、子テーブルに親テーブルIDを作成する必要がない、ということです。作ってしまうと、ルックアップ列とかぶってしまってややこしくなるんですよね。
ルックアップ列に格納されている親テーブルのIDも一意識別子といって単純なテキスト型ではありません。これもややこしくなる一因です。
赤枠で囲んだのが、子テーブルのルックアップ列です。この列に親レコードのIDを簡単に挿入できないので注意が必要です。
今日はここまで。次回は子レコードの作成について触れたいと思います。