データベース用語「リレーショナル」または「関係」は、テーブル内のデータの接続方法を示します。
データベースの世界への新規参入者は、データベースとスプレッドシートの違いを見るのに苦労することがよくあります。 彼らはデータの表を見て、データベースは新しい方法でデータを整理して照会することを可能にしますが、リレーショナルデータベース技術の名前を与えるデータ間の関係の重要性を理解することはできません。
リレーションシップを使用すると、さまざまなデータベーステーブル間の接続を強力な方法で記述できます。 これらの関係を活用して、結合と呼ばれる強力なクロステーブルクエリを実行できます。
データベース関係のタイプ
3つの異なるタイプのデータベース関係があり、それぞれが関係に関係する可能性のあるテーブル行の数に基づいて命名されます。 これらの3つの関係タイプはそれぞれ、2つのテーブルの間に存在します。
- 1対1の関係は、第1のテーブルの各エントリが、第2のテーブルの対応するエントリを1つしか持たない場合に発生する。 1対1の関係は、ほとんどの場合、すべての情報を1つのテーブルに格納するほうが効率的であるため、ほとんど使用されません。 一部のデータベース設計者は、別の表のデータのサブセットを含む表を作成することによって、この関係を利用します。
- 1対多の関係は、最も一般的なタイプのデータベース関係です。 表Aの各レコードが表Bの1つ以上のレコードに対応する場合に発生しますが、表Bの各レコードは表Aの1つのレコードに対応します。たとえば、小学校のTeachersテーブルとStudentsテーブルの関係各生徒には1人の教師しかいないが、各教師には複数の生徒がいるため、データベースは1対多の関係になる可能性が高い。 この1対多の設計は、重複したデータを排除するのに役立ちます。
- 多対1の関係は、表Aの各レコードが表Bの1つ以上のレコードに対応し、表Bの各レコードが表Aの1つ以上のレコードに対応する場合に発生します。たとえば、教師とコース各教師が複数のコースを指導し、各コースに複数のインストラクターが参加する可能性があるため、表は多対多である可能性があります。
自己参照の関係:特別なケース
自己参照関係は、1つのテーブルのみが関与する場合に発生します。 一般的な例として、各従業員の監督者に関する情報を含むEmployeesテーブルがあります。 各スーパーバイザは従業員でもあり、自分のスーパーバイザを持っています。 この場合、各従業員には1人の監督者がいるので、1対多の自己参照関係がありますが、各監督者には複数の従業員がいることがあります。
外部キーとの関係の作成
外部キーを指定することによって、テーブル間の関係を作成します 。このキーは、テーブルがどのように関連しているかをリレーショナルデータベースに伝えます。 多くの場合、表Aの列には、表Bから参照される主キーが含まれています。
再びTeachers and Studentsテーブルの例を考えてみましょう。 Teachersテーブルには、ID、名前、およびコースの列だけが含まれています。
インストラクターID | 先生の名前 | コース |
---|---|---|
001 | ジョン・ドウ | 英語 |
002 | ジェーン・シュモエ | 数学 |
Studentsテーブルには、ID、名前、および外部キー列が含まれます。
学生証 | 学生の名前 | Teacher_FK |
---|---|---|
0200 | ローウェルスミス | 001 |
0201 | ブライアンショート | 001 |
0202 | コルキー・メンデス | 002 |
0203 | モニカ・ジョーンズ | 001 |
StudentsテーブルのTeacher_FK列は、Teachersテーブルのインストラクタの主キー値を参照します。
データベース設計者は、主キーまたは外部キー列を簡単に識別するために、列名に「PK」または「FK」を使用することがよくあります。
これらの2つの表は、教師と生徒の1対多の関係を示していることに注意してください。
関係と参照整合性
テーブルに外部キーを追加すると、2つのテーブル間の参照整合性を強制するデータベース制約を作成できます。 これにより、テーブル間の関係が一貫して維持されます。 1つの表に別の表への外部キーがある場合、参照整合性の概念は、表Bの外部キー値が表Aの既存のレコードを参照する必要があることを示します。
関係の実装
データベースに応じて、テーブル間の関係をさまざまな方法で実装します。 Microsoft Accessには、テーブルをリンクしたり、参照整合性を強化したりするためのウィザードが用意されています。
SQLを直接作成する場合は、最初にテーブルの教師を作成し、ID列を主キーとして宣言します。
CREATE TABLE教師(
インストラクターID INT AUTO_INCREMENT PRIMARY KEY、
Teacher_Name VARCHAR(100)、
コースVARCHAR(100)
);
Studentsテーブルを作成すると、TeacherのテーブルのInstructorID列を参照する外部キーにTeacher_FK列が宣言されます。
CREATE TABLEの学生(
StudentID INT AUTO_INCREMENT PRIMARY KEY、
Student_Name VARCHAR(100)、Teacher_FK INT、
外部キー(Teacher_FK)参考教員(InstructorID))
);
リレーションシップを使用した表の結合
データベースに1つ以上のリレーションシップを作成したら、SQL JOINクエリを使用して複数のテーブルの情報を結合することで、力を活用できます。 最も一般的な結合のタイプは、SQL INNER JOINまたは単純な結合です。 このタイプの結合は、複数の表から結合条件を満たすすべてのレコードを戻します。 たとえば、このJOIN条件は、Studentsテーブルの外部キーがTeachersテーブルのプライマリキーと一致するStudent_Name、Teacher_Name、およびCourseを返します。
生徒を選択します。受講生の名前、先生。先生の名前、先生。コース
学生から
INNER JOIN教師
生徒の皆さん.Teacher_FK = Teachers.InstructorID;
この文は、次のようなテーブルを生成します。
SQL結合ステートメントから返されるテーブル
スチューデント_ネームティーチャー_名コースロウェルスミスジョンドゥエングリッシュブライアンショートジョンドーン英語コークーメンデスジェーンSchmoeMathMonica JonesJohn DoeEnglish