LoginSignup
20
17

【Dataverse】リレーションシップ

Last updated at Posted at 2022-10-08

一般的なリレーションシップは知ってるという方は飛ばして、Dataverseのリレーションシップとはから

まずそもそもリレーションシップとは?

リレーションシップ =「テーブル同士の関係性」

省略して「リレーション」とも言います。
リレーションがないテーブル、1つで完結してしまうテーブルだったら、Excel、Sharepointでこと足ります。
しかし、世の中のテーブル形式のデータは、複数のテーブルに分けて管理されています。そのため、そのテーブル同士の関係というのが生まれてきます。
リレーショナルデータベース(RDB)はリレーションをテーブルに持たせることができるデータベースです。大量データを扱う場合、基本的にはリレーショナルデータベースを使うことになるはずです。

なぜわざわざテーブルを分けなければいけないのか

結論からいうと、データの管理に都合がいいからです。
人間にとっては1つのテーブルで全部の情報を見れた方がわかりやすいかもしれないですが、
システム的には分けた方がデータの管理が楽になります。

例えば、販売注文のデータを保存するテーブルを作成するとします。この中には販売する製品の情報(原価、売価、在庫...)や顧客情報(名前、住所、連絡先...)、請求書情報(日付、請求番号、営業担当者...)などの情報が必要です。
このような場合には以下のようにテーブルを分けます。
そして、必要な時に発注注文テーブルから顧客テーブル、製品テーブル、請求書テーブルに情報を取りに行くことができます。

  • 販売注文テーブル
  • 顧客テーブル
  • 製品テーブル
  • 請求書テーブル

この時の販売注文テーブルを子テーブル、
顧客テーブル、製品テーブル、請求書テーブルを親テーブルと呼びます。

情報を教えてくれるテーブルは親テーブル、情報を聞くテーブルは子テーブル

image.png

もしテキスト型などで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でのリレーションの作成方法を説明します。

 

  1. PowerAppsを開いて左のメニューの[Dataverse] > [テーブル]をクリックし、対象のテーブル(今回は「販売注文」テーブル)を選択
    image.png

  2. テーブルの詳細画面に遷移するので、左上の[新規]ボタンをクリックする
    そうするとドロップダウンメニューが表示され[リレーション]をクリックするとさらに左に「多対一」「一対多」「多対多」を選択できるようになる

この詳細画面ではテーブルに対して様々な設定ができます。

image.png

3. 製品テーブルとリレーション(販売注文から見ると「多対一」)を作る
[多対一]を選択
4. 右に出てくる設定画面で必要項目を設定(各項目の詳細はテーブル参照)

  説明    
ルックアップ列の表示名 関連テーブル先に作成されるルックアップ列の外部名。後で編集可能。
検索列の名前 関連テーブル先に作成されるルックアップ列の内部名(英語である必要がある)
リレーションシップ名 作成されるリレーションシップ自体の名前
検索列の説明 ルックアップ列の説明。列の上にマウス ポインターを置いたときにこれがヒントとして表示される。後で編集可能。

詳細オプションを開くと表示される項目について
(あまりこだわりがない方はデフォルト値でOKです。)
こちらは伝播(カスケード)動作と呼ばれるもので、一方のデータが「削除」、「所有権の割り当て」、「共有」をされたとき関連するテーブル側でどのようにデータを扱うのかを設定できるものです。

細かいカスタマイズについては以下のブログが参考になります。
https://jpdynamicscrm.github.io/blog/powerplatform/table-relationship-behavior/

5. ブラウザのリフレッシュボタンを押して最新の状態にすると「製品」列ができていることが確認できる
image.png

今回のように情報を他から取ってきたい側のテーブルからつなげる場合が多いのでとりあえず「多対一」と覚えておこう!

Dataverseのリレーション作成方法②

実は多対一のリレーションはもう一つ作る方法があります。(ほかの一対多、多対多は①のやり方のみ)
それが列から作る方法
こちらから作る方がややこしくないかもです。

  1. テーブルの詳細画面の左上の[新規]から[列]をクリック

image.png

2. 右に出てくる[新しい列]ウィジットで表示名を付ける
データの種類で[検索] > [検索]を選択
これが多対一のリレーションと同じ。

チナミになる話
・検索かけに行ってデータを参照するので「検索」
・旧・「参照型」(前までは「参照」という名前でした)

3. 検索型を選ぶと[関連テーブル]の欄ができるのでここで参照したいテーブルを選択する
(今回は製品テーブル)

4. 高度なオプションを選択して[スキーマ名](内部名)に英語の名前を入れたら[保存]ボタンを押して完了

まとめ

  • Dataverseはリレーショナルデータベース(RDB)
  • 列の検索型とリレーションの「多対一」は同じ意味
20
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
17