テーブルのリレーションシップ
Microsoft Dataverse を使用するときは、データの正規化をサポートするため、異なるデータ セットを別々のテーブルに保存して情報を整理します。 テーブルのリレーションシップは、テーブル行を他のテーブルの行と関連付けることができる方法を定義します。
データベース テーブルにはテーブル内の一意の参照行に対する主キーがあることについて、このモジュールで既に説明しました。 Dataverse では、2 つのテーブル間のリレーションシップが、ルックアップ列を使用して主キーを参照しています。
リレーションシップのタイプ
テーブル リレーションシップは、テーブルの行を他のテーブル (または同じテーブルでも可) 行と関連付ける方法を定義します。 テーブル リレーションシップには次の 2 種類があります。
一対多リレーションシップ: 一対多テーブル リレーションシップ (1:N) では、多数の参照する (関連した) テーブル行を、単一のリレーションシップ (プライマリ) テーブル行と関連付けることができます。 参照される行は親と呼ばれることが多く、参照元のテーブル内の行は子と呼ばれます。 多対一リレーションシップは、子テーブルから見た場合と同じ構造です。
多対多リレーションシップ: 多対多 (N:N) のリレーションシップでは、多数のテーブル行を、他の多数の行に関連付けることができます。 これらの行は同等とみなされ、関係は相互的です。
多対一と一対多
多対一 (N:1) リレーションシップは基本的には一対多と異なるものではありません。 これは、反対のテーブルから表示されたのと同じリレーションシップを表します。 たとえば、テーブル A とテーブル B の間に一対多のリレーションシップがある場合、次のように表されます。
- Power Apps Maker Portal の表 A にリストされている一対多リレーションシップ。
- 表 B に記載されている多対一リレーションシップ。
これは、個別のリレーションシップ タイプではなく、インターフェイスの視点に関する問題です。
ルックアップ列
テーブル リレーションシップを作成する一般的な方法は、ルックアップ データ型の列を追加する方法です。 これにより、多対一のリレーションシップが自動的に作成されます。
関係が一対多、多対一、またはルックアップ列を介して定義される場合でも、基になる構造は同じです。
テーブルのリレーションシップを手動で作成する
このモジュールの前半で説明したように、新しいテーブルを作成するとき、Dataverse ではテーブル リレーションシップを構成する方法が複数用意されています。 テーブル画面のスキーマ ペインには、リレーションシップ リンクが含まれます。
このリンクを選択すると、テーブルのすべてのリレーションシップを表示するビューが開きます。 システム定義のものも、ユーザーが作成したものもあります。 関連するテーブルおよびリレーションシップ タイプを確認できます。
このビューの上部にあるコマンド バーから 新しいリレーションシップ を選択して、新しいリレーションシップを手動で定義できます。
リレーションシップを作成する際に、タイプを選択します。 以下の例では、Veterinarian というテーブルと一対多のリレーションシップが作成されます。 ペットはどの獣医師でも治療できますが、このリレーションシップにより、各ペットに担当医が定義されます。 このリレーションシップを作成すると、関連テーブルにルックアップ列も追加されます。
リレーションシップが作成されると、対応するルックアップ列が関連するテーブルに表示されます。
多対多リレーションシップ
多対多リレーションシップにより、親子階層なしで、データ行が対等に機能できるようになります。
注
多対多リレーションシップは、リレーショナル データベースでは直接サポートされていません。 Dataverse は、これらのリレーションシップを管理するために、非表示の交差テーブルを使用します。 この交差テーブルはユーザーが編集することはできず、カスタム フォームや列をサポートしていません。
多対多リレーションシップを手動で作成するには、関連する 2 つのテーブルを選択します。 たとえば、Pet Groomers のテーブルと Pets のテーブルがある場合、各ペットには複数のトリマーを割り当てることができ、各トリマーには複数のペットを割り当てることができます。
このリレーションシップは Dataverse で定義されていますが、表示される交差テーブルはありません。 ただし、サブグリッドを使用してフォームに関連レコードを表示できます。 フィルタリングを使用すると、関連するアイテムを動的に表示できますが、これはこのユニットの範囲外です。
詳細については、多対多のテーブルの関連付けの作成の概要を参照してください。