データベース関係とは何ですか?

1つのテーブルがを使用すると、2つのデータベーステーブル間に関係が確立されます。 外部キー それは 主キー 別のテーブルの。 これは、リレーショナルデータベースという用語の背後にある基本的な概念です。

関係を確立するために外部キーがどのように機能するか

主キーは、テーブル内の各レコードを一意に識別します。 の一種です 候補キー これは通常、テーブルの最初の列であり、データベースによって自動的に生成されて、一意であることを確認できます。 外部キーは、レコードを別のテーブルのデータにリンクするために使用される別の候補キー(主キーではない)です。

たとえば、どの教師がどのコースを教えているかを特定するこれら2つの表について考えてみます。 ここで、Coursesテーブルの主キーはCourse_IDです。 その外部キーはTeacher_IDです。

Course_ID コース名 Teacher_ID
Course_001 生物学 Teacher_001
Course_002 算数 Teacher_002
Course_003 英語 Teacher_003

Coursesの外部キーがTeachersの主キーと一致していることがわかります。

Teacher_ID 教員名
Teacher_001 カルメン
Teacher_002 ベロニカ
Teacher_003 ホルヘ

Teacher_ID外部キーは、CoursesテーブルとTeachersテーブルの間の関係を確立するのに役立ったと言えます。

コンピューター画面上のチャート
グロー/ゲッティイメージズ

データベース関係の種類

外部キーまたは他の候補キーを使用して、テーブル間に3つのタイプの関係を実装できます。

1対1

このタイプの関係では、関係の両側で1つのレコードのみが許可されます。 主キーは、別のテーブルの1つのレコードのみに関連します(または関連しません)。 たとえば、結婚では、各配偶者には他に1人の配偶者しかいません。 この種の関係は単一のテーブルに実装できるため、外部キーを使用しません。

1対多

1対多の関係により、1つのテーブルの単一のレコードを別のテーブルの複数のレコードに関連付けることができます。 CustomersテーブルとOrdersテーブルを持つデータベースを使用するビジネスについて考えてみます。

1人の顧客が複数の注文を購入できますが、1つの注文を複数の顧客にリンクすることはできません。 したがって、OrdersテーブルにはCustomersテーブルの主キーと一致する外部キーが含まれますが、CustomersテーブルにはOrdersテーブルを指す外部キーがありません。

多対多

これは、テーブル内の多くのレコードが別のテーブル内の多くのレコードにリンクできる複雑な関係です。 たとえば、私たちのビジネスにはおそらくCustomersテーブルとOrdersテーブルが必要であり、Productsテーブルも必要になる可能性があります。

ここでも、CustomersテーブルとOrdersテーブルの関係は1対多ですが、OrdersテーブルとProductsテーブルの関係を考慮してください。 注文には複数の商品を含めることができ、複数の顧客が同じ商品の一部を含む注文を送信する可能性があるため、商品を複数の注文にリンクすることができます。 この種の関係には、少なくとも3つのテーブルが必要です。

データベースの関係が重要なのはなぜですか?

データベーステーブル間に一貫した関係を確立すると、データの整合性が確保され、データベースの正規化に貢献します。 たとえば、外部キーを介してテーブルをリンクせず、代わりに、CoursesテーブルとTeachersテーブルのデータを次のように結合した場合はどうなりますか。

Teacher_ID 教員名 コース
Teacher_001 カルメン 生物学、数学
Teacher_002 ベロニカ 算数
Teacher_003 ホルヘ 英語

この設計は柔軟性がなく、データベース正規化の最初の原則である第一正規形に違反します。これは、各テーブルセルに単一の個別のデータを含める必要があることを示しています。

または、1NFを適用するために、Carmenの2番目のレコードを追加することにしました。

Teacher_ID 教員名 コース
Teacher_001 カルメン 生物学
Teacher_001 カルメン 算数
Teacher_002 ベロニカ 算数
Teacher_003 ホルヘ 英語

これはまだ弱い設計であり、不必要な重複といわゆるデータ挿入の異常が発生します。これは、一貫性のないデータの原因となる可能性があることを意味します。 たとえば、教師が複数のレコードを持っている場合、一部のデータを編集する必要があるが、データ編集を実行する人が複数のレコードが存在することに気付いていない場合はどうなりますか? その場合、テーブルには同じ個人の異なるデータが含まれ、それを識別したり回避したりする明確な方法はありません。

このテーブルをTeachersとCoursesの2つのテーブルに分割すると、データ間に適切な関係が作成されるため、データの一貫性と正確性が確保されます。