データベースにおける二項関係とは?1対1・1対多・多対多のカーディナリティを徹底解説
二項関係(Binary Relationship)とは
二項関係(Binary Relationship)とは、データベース設計において2つの異なるエンティティ間に存在する関係のことです。具体的には、一方のエンティティの役割グループと、もう一方のエンティティの役割グループとの間に成り立つ対応関係を指します。
二項関係は、対応関係の数(カーディナリティ)の観点から、次の3種類に分類されます。
- 1対1(One-to-One)
- 1対多(One-to-Many)
- 多対多(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対多では多側への外部キー設定、多対多では中間テーブルの作成がポイントとなるため、要件に応じて適切な関係を見極めることが重要です。
-
C#で二分探索(バイナリサーチ)を実装する方法|仕組みと計算量を解説
二分探索とは二分探索(バイナリサーチ)は、ソート済みの配列を対象とした高速な検索アルゴリズムです。探索したい値を配列の中央にある要素と比較し、一致しなかった場合は、その値が存在し得ない側の半分の領域を丸ごと除外します。この操作を残りの半分に対して繰り返すことで、効率よく目的の値を見つけ出します。例えば、下図のような配列から「62」という値を探す場合を考えてみましょう。中央の要素との比較結果から、62が存在するのは右側の領域だけであることが分かるため、左半分は完全に除外され、以降は右半分のみが探索対象となります。二分探索の計算量二分探索における各ケースの計算量は以下の通りです。最悪時間計算量O(
-
Redis MOVEコマンドの使い方 – キーを別のデータベースへ移動する方法
このチュートリアルでは、Redisデータストア上でキーをあるデータベースから別のデータベースへ移動する方法を解説します。キーの移動には、redis-cliで使用できるMOVEコマンドを利用します。 MOVEコマンドは、現在選択されているデータベース(ソース)から指定したキーを削除し、そのキーを移動先(デスティネーション)のデータベースに挿入するために使用されます。なお、以下の場合は操作が実行されず、戻り値として0が返されます。 指定したキーがソースデータベースに存在しない場合 同じ名前のキーがすでに移動先のデータベースに存在する場合 構文 Redis MOVEコマンドの基本構文は以下のとお