リレーショナルデータベース設計ガイド(15の7–9)[翻訳]

継続する。

前のパーツ: 1-3、4-6



7. 1対多のコミュニケーション。



外部キーの関係を使用して、さまざまなテーブルのデータをリンクする方法をすでに示しました。 customer_idを外部キーとして注文テーブルに配置することで、注文が顧客とどのように通信するかを確認しました。



1対多の関係のもう1つの例は、母親と子供の間に存在する関係です。 母親は多くの子供を持つことができますが、各子供は母親を1人だけ持つことができます。



(技術的には、1対多の関係では、母親は0、1、または多くの子孫を持つことができますが、0人の子供を持つ母親は母親とは見なされないため、母親と子供の代わりに女性と子供のことを話す方が良いです。その目、大丈夫?)



テーブルAの1つのレコードをテーブルBの0、1、または多くのレコードに関連付けることができる場合、1 対多の関係を処理しています。 リレーショナルデータモデルでは、1対多の関係は2つのテーブルを使用します。



画像

1対多の関係の概略図。 テーブルAのエントリには、0、1、またはテーブルBの関連エントリのセットがあります。



1対多の関係を認識する方法は?


2つのエンティティが自問する場合:

1)オブジェクトAに属することができるオブジェクトとBの数

2)Aからのオブジェクトは、Bからのオブジェクトにいくつ関連付けることができますか?



最初の質問に対する答えがmanyであり、2番目の質問に対する答えが(または多分なし)である場合、1対多の関係を扱っています。



例。


1対多の関係の例:







この場合、すべてが非常に単純であるため、理解することは困難です。 家での最後の例を見てみましょう。 実際、通りには実際にいくつもの家がありますが、この通りの各家には1つの道しかありません(実際には異なる通りに属する家は取りません。たとえば、通りの中央に家を取ります)。 結局のところ、この特定の家は、2つの異なる通りにある2つの場所に同時に存在することはできません。また、一般的な抽象的な家ではなく、具体的な家について話しています。



8.多対多の関係。



多対多の関係は、あるテーブル(A)の複数のレコードが別のテーブル(B)の複数のレコードに対応できる関係です。 そのような接続の例は、教師が生徒に教える学校です。 ほとんどの学校では、各教師が多くの生徒を教えており、各生徒は複数の教師によって教えることができます。



ビールの供給者と彼らが供給するビールの間の接続も多対多の関係です。 多くの場合、サプライヤーは複数の種類のビールを提供し、各種類のビールは多くのサプライヤーが提供できます。



データベースを設計する際には、現時点で特定の関係が存在するかどうかを問うのではなく、一般的な関係が将来可能になるかどうかを自問する必要があります。 現時点ですべてのサプライヤーが多くの種類のビールを提供しているが、各タイプのビールが1つのサプライヤーのみによって提供されている場合、これは1対多の関係であると考えるかもしれませんが、この状況で1対多の関係を急いで実装しないでください。 将来、2つ以上のサプライヤーが同じタイプのビールを提供する可能性が高く、これが発生すると、データベース(サプライヤーとビールのタイプが1対多の関係にある)がこのために準備されない可能性があります。



多対多の関係を作成します。


3つのテーブルを使用して、多対多の関係が作成されます。 2つのテーブル-「ソース」と1つの接続テーブル。 結合テーブルA_Bの主キーは、 compositeです。 これは、テーブルAとBの主キーを参照する2つの外部キーの2つのフィールドで構成されています。



画像



すべての主キーは一意である必要があります。 これは、フィールドAとBの組み合わせがテーブルA_Bで一意でなければならないことも意味します。



以下のサンプルドラフトデータベースは、ベルギーのビールブランドとオランダのサプライヤーとの多対多の関係に存在する可能性のあるテーブルを示しています。 beer_idとdistributor_idのすべての組み合わせは、接続テーブルで一意であることに注意してください。



「ビールについて」の表。


画像



画像



上の表は、接続表を使用して多対多の関係でサプライヤーとビールをリンクしています。 Gentse Tripelビール(157)はHoreca Import NL(157、AC001)Jansen Horeca(157、AB899)およびPetersen Drankenhandel(157、AC009)によって供給されていることに注意してください。 また、逆に、ピーターセンドラケンヘンデルは、テーブルから3種類のビールを提供しています。すなわち、ゲンツェトリペル(157、AC009)、ウイレンシュピーゲル(158、AC009)、およびジュピラー(163、AC009)です。



また、上の表では、主キーフィールドは青で下線が付いていることに注意してください。 データベース設計モデルでは、通常、主キーに下線が引かれます。 繰り返しますが、beer_distributor結合テーブルには、2つの外部キーで構成される主キーがあります。 接続テーブルには常に複合主キーがあります。



知っておくべき別の重要なことがあります。 多対多の関係は、 2つの1対多の関係で構成されます。 両方のテーブル:ビールサプライヤとビール-接続テーブルと1対多の関係があります。



多対多の関係のもう1つの例:ホテルでチケットを予約します。


最後の例として、訪問者によるホテルの部屋の予約表をモデル化する方法を示します。



画像

多対多通信接続テーブルには追加のフィールドがあります。



この例では、ゲストテーブルとルームテーブルの間に多対多の関係があることがわかります。 1つの部屋は多くのゲストが時間をかけて予約することができ、時間の経過とともにゲストはホテルの多くの部屋を予約できます。 この場合の結合テーブルは、2つの外部キーのみで構成される従来の結合テーブルではありません。 彼女は、他の2つのエンティティと接続している別個のエンティティです。



2つのエンティティの組み合わせが新しいエンティティになる場合がよくあります。



9. 1対1のコミュニケーション。



1対1の関係では、エンティティAの各ブロックをエンティティBの0、1ブロックに関連付けることができます。たとえば、従業員は通常1つのオフィスに関連付けられます。 または、ビールブランドの原産国は1つだけです。



1つのテーブルに。


1対1の関係は、単一のテーブルで簡単にモデル化できます。 テーブルエントリには、主キーまたはレコードと1対1の関係にあるデータが含まれます。



別のテーブルに。


まれに、2つのテーブルを使用して1対1の関係がモデル化されます。 このオプションは、RDBMSの制限を克服するため、またはパフォーマンスを向上させるために必要になる場合があります(たとえば、親テーブルでの検索を高速化するために、別のテーブルにblobデータ型のフィールドを配置する場合があります)。 または、2つのエンティティが1対1の関係にある間に、それらを別々のテーブルに分割することを決定する場合があります。 ただし、通常、1対1の関係で2つのテーブルを使用することは悪い習慣と見なされます。



1対1のコミュニケーションの例。






画像



リレーショナルデータベースプロジェクトは、主キーと外部キーによってリンク(リンク)されているテーブルのコレクションです。 リレーショナルデータモデルには、テーブル間の適切な関係を作成するのに役立つ多数のルールが含まれています。 これらの規則は「通常の形式」と呼ばれます。 次のパートでは、データベースを正規化する方法を示します。



どのような接続が必要ですか?


実際のテーブル関係の例。 一部のデータが特定のオブジェクト (たとえば、人物と彼のパスポート番号)に固有である場合1対多の通信を処理しています。 つまり 1つのテーブルには特定の人のリストがあり、別のテーブルにはこの人のパスポートのリストがあります(たとえば、居住国のパスポートと国際パスポート)。 そして、このデータの組み合わせは各人に固有です。 つまり 各個人は複数のパスポート番号を持つことができますが、各パスポートに所有できるのは1人だけです。 合計: 2つのテーブルが必要です。



そして、 任意の人割り当てることができるデータがある場合、多対多の関係を扱ってます。 たとえば、人のリストを含むテーブルがあり、各人が訪れた国に関する情報を保存します。 この場合、2つのエンティティ:人と国があります。 任意の人が任意の国を訪問でき、任意の国が任意の人を訪問できます。 つまり、この場合、国は特定の人に固有ではなく、再利用できます。



このような場合、 3つのテーブル使用して多対多の関係を使用し、一般的な情報を保存すると、中央で非常に便利です。 結局のところ、一般的なデータが変更された場合、データベース内の情報が現実に対応するためには、1か所で修正するだけで十分です。 1つの場所(テーブル)にのみ保存され、残りのテーブルにはリンクのみがあります。



また、相互にのみ関連する一意のデータのセットがある場合、すべてを1つのテーブルに格納します。 あなたの選択は1対1の関係です。 たとえば、自動車の小さなコレクションがあり、それらに関する情報(色、メーカー、製造年など)を保存したい場合があります。



All Articles