情報応用演習Ⅰ(2024)

【T8a】多対多のリレーションシップ(5/8)

プロジェクトタイプ(注意: 本文参照)
プロジェクト名T8a
ソリューション名PIT8
注意
  • 本ページの作業内容は 前のページまでの続き になっていることに注意せよ.
    • 先に前のページまでをすべて読み,指示されている作業を済ませてから本ページを読むこと.
    • プロジェクトの作成作業については準備作業を参照せよ.

8a-5. 多対多のリレーションシップ

前節での説明の通り,一対多のリレーションシップはウェブアプリでは最も基本的かつ重要なリレーションシップであるが, アプリケーションで扱う必要があるリレーションシップはそれだけとは限らない.たとえば,ここまで扱ってきた「学生」の エンティティに対して「サークル」というエンティティを考えてみよう.

大学にもよるが,学生のサークル活動に関して一人の学生が複数のサークルに所属することができるという制度がとられているケースは多い. チュートリアル【T7b】で説明した多重度の分析方法を覚えているだろうか.このような制度をもつ大学における「学生」と 「サークル」というエンティティに対して「 一方のエンティティを具体的に一つ定めたときに,もう一方のエンティティはいくつ定まるか? 」という 質問をしてみると以下のように分析できるはずである(_).

  • 「学生」から見た「サークル」の多重度
    • 一人の学生を具体的に定めれば,その学生が所属しているサークルは複数あり得る.
    • したがってこの多重度は「 」である.
  • 「サークル」から見た「学生」の多重度
    • 一つのサークルを具体的定めれば,そのサークルには複数人の学生が所属している.
    • したがってこの多重度は「 」である.
「学生」と「サークル」

「学生」と「サークル」のあいだの所属に関する多重度は「 多対多 」である.「学生」と「学科」の場合では,通常学生は一つの学科に しか所属できないため一対多であったが,「サークル」の場合にはそのような制限はないため多対多の関係となる. そして本節で述べておきたい最も重要なこととして EF Core は多対多のリレーションシップを直接的にはサポートしない ということである. また現実のリレーショナルデータベース製品でも,多対多のリレーションシップを直接的に扱うことができるものは存在しない. これはリレーショナルモデルや EF Core に固有の制限というよりも,概念スキーマに対する物理スキーマの設計の定石といったほうが正確である. 通常,このような多対多の関係はリレーショナルデータベースにおけるテーブル設計では直接的に扱わず, 「二つのエンティティ間の関係」を表す エンティティを追加して表現する のが一般的である.これは「対照表」などとも呼ばれる.例えば,「学生」と「サークル」ならば_に示すように その間に「サークル所属」というエンティティを追加する.

「サークル所属」を追加

これによって「学生」「サークル所属」の一対多のリレーションシップと,「サークル」「サークル所属」の一対多のリレーションシップの 二つのリレーションシップが形作られるが,これらを使って多対多を表現するのが定石である.

以降では実際にこのようなリレーションシップを作成してみよう.

Last updated on 2024-06-10
Published on 2024-06-10

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.