データベース関係は、すべてのリレーショナルデータベースのバックボーンです
一方の表に別の表の主キーを参照する外部キーがある場合、2つのデータベース表の間に関係が確立されます。 これはリレーショナルデータベースの基本概念です。
関係を確立するための外部キーの仕組み
プライマリキーと外部キーの基本を確認しましょう。 主キーは、テーブル内の各レコードを一意に識別します。 これは通常、テーブルの最初の列であり、データベースによって自動的に生成されて一意であることを保証する候補キーの一種です。
外部キーは、レコードを別のテーブルのデータにリンクするために使用される別の候補キー(主キーではない)です。
たとえば、どの教師がどのコースを教えるかを識別するこれらの2つのテーブルを考えてみましょう。
ここで、Coursesテーブルの主キーはCourse_IDです。 その外部キーはTeacher_IDです:
Course_ID | コース名 | 教師_ID |
---|---|---|
Course_001 | 生物学 | Teacher_001 |
Course_002 | 数学 | Teacher_001 |
Course_003 | 英語 | Teacher_003 |
コースの外部キーが教師の主キーと一致することがわかります。
教師_ID | 先生の名前 |
---|---|
Teacher_001 | カルメン |
Teacher_002 | ヴェロニカ |
Teacher_003 | ホルヘ |
Teacher_IDの外部キーが、コースと教師のテーブルの間の関係を確立するのに役立ったと言えるでしょう。
データベース関係のタイプ
外部キーまたは他の候補キーを使用して、テーブル間に3種類の関係を実装できます。
1対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つのテーブルが必要です。
データベース関係とは何ですか?
データベーステーブル間の一貫性のある関係を確立すると、データの整合性が確保され、データベースの正規化に役立ちます。 たとえば、外部キーを使用してテーブルをリンクしていない場合は、次のように[コースと教師]テーブルのデータを結合しただけではどうでしょうか?
教師_ID | 先生の名前 | コース |
---|---|---|
Teacher_001 | カルメン | 生物学、数学 |
Teacher_002 | ヴェロニカ | 数学 |
Teacher_003 | ホルヘ | 英語 |
この設計は柔軟性がなく、データベースの正規化の第1原則であるFirst Normal Form(1NF)に違反しています。これは、各表のセルに単一の個別のデータが含まれている必要があることを示しています。
あるいは、私たちは1NFを強制するためにカルメンの2番目のレコードを追加することにしました。
教師_ID | 先生の名前 | コース |
---|---|---|
Teacher_001 | カルメン | 生物学 |
Teacher_001 | カルメン | 数学 |
Teacher_002 | ヴェロニカ | 数学 |
Teacher_003 | ホルヘ | 英語 |
これは依然として弱い設計であり、不必要な重複やデータ挿入異常と呼ばれるものが導入され、矛盾するデータに貢献する可能性があります。
たとえば、教師が複数のレコードを持っている場合、データを編集する必要があるがデータ編集を行っている人が複数のレコードが存在することを認識できない場合はどうすればよいでしょうか? テーブルには、同じ個人の異なるデータが含まれています。そのデータを識別したり、回避したりする明確な方法はありません。
このテーブルを2つのテーブル、上記の視覚化された教師とコースに分割すると、データ間の適切な関係が作成され、データの一貫性と正確性が確保されます。