一般的なリレーションシップは知ってるという方は飛ばして、Dataverseのリレーションシップとはから
まずそもそもリレーションシップとは?
リレーションシップ =「テーブル同士の関係性」
省略して「リレーション」とも言います。
リレーションがないテーブル、1つで完結してしまうテーブルだったら、Excel、Sharepointでこと足ります。
しかし、世の中のテーブル形式のデータは、複数のテーブルに分けて管理されています。そのため、そのテーブル同士の関係というのが生まれてきます。
リレーショナルデータベース(RDB)はリレーションをテーブルに持たせることができるデータベースです。大量データを扱う場合、基本的にはリレーショナルデータベースを使うことになるはずです。
なぜわざわざテーブルを分けなければいけないのか
結論からいうと、データの管理に都合がいいからです。
人間にとっては1つのテーブルで全部の情報を見れた方がわかりやすいかもしれないですが、
システム的には分けた方がデータの管理が楽になります。
例えば、販売注文のデータを保存するテーブルを作成するとします。この中には販売する製品の情報(原価、売価、在庫...)や顧客情報(名前、住所、連絡先...)、請求書情報(日付、請求番号、営業担当者...)などの情報が必要です。
このような場合には以下のようにテーブルを分けます。
そして、必要な時に発注注文テーブルから顧客テーブル、製品テーブル、請求書テーブルに情報を取りに行くことができます。
- 販売注文テーブル
- 顧客テーブル
- 製品テーブル
- 請求書テーブル
この時の販売注文テーブルを子テーブル、
顧客テーブル、製品テーブル、請求書テーブルを親テーブルと呼びます。
情報を教えてくれるテーブルは親テーブル、情報を聞くテーブルは子テーブル
もしテキスト型などでLookUpかけて情報取りに行くという構成だとデータの整合性が取れないです。
例えば、親テーブルでデータが変わったときに、関係するテーブルの設定を変えなきゃいけない等、、。
リレーションの種類
データベースのリレーションには以下の3つの種類があります。
どういう関係性なのかの種類ですね。
一対一 (1:1)
「顧客」と「個人情報」というテーブルが存在するとき、1人の顧客は1つの個人情報を持っています。
よってこの両者の関係は1:1になっていると言えます。
ただ、このリレーションは、分割しなくてもよいテーブルが分割されている状態です。
既存のテーブル構成を変えずに項目を追加したい場合等を除き、積極的に使用する機会はあまり無いです。
多対一(n:1)
「販売注文」と「製品」というテーブルが存在するとき、複数の注文に1つの製品を割り当てることができるので、この両者の関係は多対一になっていると言えます。
多対多(n:n)
「顧客」と「製品」というテーブルが存在するとき、1人の顧客は複数の製品を購入することができます。そして、1種類の製品を注文する顧客は複数存在します。
よってこの両者の関係はn:nになっていると言えます。
※多対多の場合、中間テーブルを用いてデータベースを構成します。
中間テーブル
n:nのリレーション設計する場合に中間に置くテーブルです。
リレーションの橋渡し役となります。
Dataverseのリレーションシップとは
Dataverseはリレーショナルデータベース(RDB)の形式なので、上記のリレーションを持ったテーブルを扱うことができます。
Dataverseで設定できるリレーションシップの種類
- 多対一
- 一対多
- 多対多
「多」というのは「1以上」でいいので、
もちろん「多対一」「一対多」で「一対一」を作ることも可能です。
つまり一般的なリレーションはもちろん作ることができます。
なぜ「多対一」「一対多」がそれぞれあるのか
この「多対一」「一対多」は順番が決まっています。
例えば一般的な一対多の例として販売注文と製品テーブルを上げましたが、
販売注文:製品 = n:1 = 多対一 (複数の注文に1つの製品を割り当てる)
ですよね。
つまり販売注文のテーブルからすると多対一の関係ですが、製品テーブルから見ると一対多の関係なんです。
Dataverseでは、リレーションはテーブルごとに作るのですが
どちらからでも作ることができるように「多対一」「一対多」をそれぞれ用意しているんですね!便利!
Dataverseのリレーション作成方法
では実際にDataverseでのリレーションの作成方法を説明します。
-
PowerAppsを開いて左のメニューの[Dataverse] > [テーブル]をクリックし、対象のテーブル(今回は「販売注文」テーブル)を選択
-
テーブルの詳細画面に遷移するので、左上の[新規]ボタンをクリックする
そうするとドロップダウンメニューが表示され[リレーション]をクリックするとさらに左に「多対一」「一対多」「多対多」を選択できるようになる
この詳細画面ではテーブルに対して様々な設定ができます。
3. 製品テーブルとリレーション(販売注文から見ると「多対一」)を作る
[多対一]を選択
4. 右に出てくる設定画面で必要項目を設定(各項目の詳細はテーブル参照)
列 | 説明 |
---|---|
ルックアップ列の表示名 | 関連テーブル先に作成されるルックアップ列の外部名。後で編集可能。 |
検索列の名前 | 関連テーブル先に作成されるルックアップ列の内部名(英語である必要がある) |
リレーションシップ名 | 作成されるリレーションシップ自体の名前 |
検索列の説明 | ルックアップ列の説明。列の上にマウス ポインターを置いたときにこれがヒントとして表示される。後で編集可能。 |
詳細オプションを開くと表示される項目について
(あまりこだわりがない方はデフォルト値でOKです。)
こちらは伝播(カスケード)動作と呼ばれるもので、一方のデータが「削除」、「所有権の割り当て」、「共有」をされたとき関連するテーブル側でどのようにデータを扱うのかを設定できるものです。
細かいカスタマイズについては以下のブログが参考になります。
https://jpdynamicscrm.github.io/blog/powerplatform/table-relationship-behavior/
5. ブラウザのリフレッシュボタンを押して最新の状態にすると「製品」列ができていることが確認できる
今回のように情報を他から取ってきたい側のテーブルからつなげる場合が多いのでとりあえず「多対一」と覚えておこう!
Dataverseのリレーション作成方法②
実は多対一のリレーションはもう一つ作る方法があります。(ほかの一対多、多対多は①のやり方のみ)
それが列から作る方法。
こちらから作る方がややこしくないかもです。
- テーブルの詳細画面の左上の[新規]から[列]をクリック
2. 右に出てくる[新しい列]ウィジットで表示名を付ける
データの種類で[検索] > [検索]を選択
これが多対一のリレーションと同じ。
チナミになる話
・検索かけに行ってデータを参照するので「検索」
・旧・「参照型」(前までは「参照」という名前でした)
3. 検索型を選ぶと[関連テーブル]の欄ができるのでここで参照したいテーブルを選択する
(今回は製品テーブル)
4. 高度なオプションを選択して[スキーマ名](内部名)に英語の名前を入れたら[保存]ボタンを押して完了
まとめ
- Dataverseはリレーショナルデータベース(RDB)
- 列の検索型とリレーションの「多対一」は同じ意味