SQL
 Computer >> コンピューター >  >> プログラミング >> SQL

データベースにおける二項関係とは?1対1・1対多・多対多のカーディナリティを徹底解説

二項関係(Binary Relationship)とは

二項関係(Binary Relationship)とは、データベース設計において2つの異なるエンティティ間に存在する関係のことです。具体的には、一方のエンティティの役割グループと、もう一方のエンティティの役割グループとの間に成り立つ対応関係を指します。

二項関係は、対応関係の数(カーディナリティ)の観点から、次の3種類に分類されます。

  1. 1対1(One-to-One)
  2. 1対多(One-to-Many)
  3. 多対多(Many-to-Many)

1対1(One-to-One)

1対1の関係では、一方のエンティティの役割グループが、他方のエンティティの役割グループ1つだけと対応します。簡単に言えば、あるエンティティの1つのインスタンスは、もう一方のエンティティの1つのインスタンスのみと紐づく関係です。

このタイプを実装する際には、一方のエンティティの主キーが、もう一方のエンティティにおいて外部キーとして保持される必要があります。

例:「Person(人物)」と「Driver_License(運転免許証)」という2つのエンティティを考えてみましょう。

Personは個人の基本情報を持ち、Driver_Licenseはその個人の運転免許証に関する情報を持っています。すべての人が運転免許証を持っているとは限らないため、Driver_LicenseからPersonへの関係は任意(オプション)です。一方、PersonからDriver_Licenseへの関係は必須であり、Driver_Licenseのすべてのインスタンスは、必ずいずれか1人のPersonに関連付けられていなければなりません。

さらに「1人の人間が持てる運転免許証番号は1つだけ」というビジネスルールも、この関係を1対1として定義しています。

1対多(One-to-Many)

1対多の関係では、一方のエンティティの役割グループが、第2のエンティティの複数の役割グループと対応します。逆に、第2のエンティティの役割グループは、第1のエンティティの1つの役割グループのみと対応します。

例:「Project(プロジェクト)」と「Employee(従業員)」という2つのエンティティを考えてみましょう。

1つのプロジェクトには多くの従業員が携わることができますが、1人の従業員が同時に担当できるのは常に1つのプロジェクトだけです。この場合、「Project」と「Employee」の間には1対多の関係が成立します。実際のデータベース設計では、多側となるEmployeeテーブル側に、Projectの主キーを外部キーとして持たせるのが一般的です。

多対多(Many-to-Many)

多対多の関係では、一方のエンティティの役割グループが第2のエンティティの複数の役割グループと対応し、同時に第2のエンティティの役割グループも、第1のエンティティの複数の役割グループと対応します。

この種の関係では、両者の関係を定義するために必ず第3のテーブル(中間テーブル/関連エンティティ)が用意されます。

例:「Student(学生)」と「Books(書籍)」という2つのエンティティを考えてみましょう。

多くの学生が同じ書籍を利用することができ、また1人の学生に複数の書籍が貸し出されることもあります。両方向で「多」の対応が生じるため、これは多対多の関係となります。

そこで両者の間には「Book_Issue(貸出記録)」という第3のリレーションが配置され、StudentとBookの関係を定義します。このテーブルには、どの学生にどの書籍が貸し出され、何日間借りているのかといった情報が記録され、貸し出されたすべての書籍の状況を追跡・管理することができます。

まとめ

二項関係は、データベースのエンティティ同士をつなぐ基本的な概念であり、カーディナリティの種類によってテーブル設計や外部キーの持ち方が変わります。1対1では主キーと外部キーの工夫、1対多では多側への外部キー設定、多対多では中間テーブルの作成がポイントとなるため、要件に応じて適切な関係を見極めることが重要です。

  1. C#で二分探索(バイナリサーチ)を実装する方法|仕組みと計算量を解説

    二分探索とは二分探索(バイナリサーチ)は、ソート済みの配列を対象とした高速な検索アルゴリズムです。探索したい値を配列の中央にある要素と比較し、一致しなかった場合は、その値が存在し得ない側の半分の領域を丸ごと除外します。この操作を残りの半分に対して繰り返すことで、効率よく目的の値を見つけ出します。例えば、下図のような配列から「62」という値を探す場合を考えてみましょう。中央の要素との比較結果から、62が存在するのは右側の領域だけであることが分かるため、左半分は完全に除外され、以降は右半分のみが探索対象となります。二分探索の計算量二分探索における各ケースの計算量は以下の通りです。最悪時間計算量O(

  2. Redis MOVEコマンドの使い方 – キーを別のデータベースへ移動する方法

    このチュートリアルでは、Redisデータストア上でキーをあるデータベースから別のデータベースへ移動する方法を解説します。キーの移動には、redis-cliで使用できるMOVEコマンドを利用します。 MOVEコマンドは、現在選択されているデータベース(ソース)から指定したキーを削除し、そのキーを移動先(デスティネーション)のデータベースに挿入するために使用されます。なお、以下の場合は操作が実行されず、戻り値として0が返されます。 指定したキーがソースデータベースに存在しない場合 同じ名前のキーがすでに移動先のデータベースに存在する場合 構文 Redis MOVEコマンドの基本構文は以下のとお