データベース テーブルは主キーと外部キーを介して接続されます。テーブルに主キー制約が指定されている場合、データベース エンジンは主キー列に一意のインデックスを自動的に作成することでデータの一意性を確保します。外部キーとは、データ間のリンクを確立および強化するために使用される 1 つ以上の列です。 2 つのテーブル 外部キー テーブルに格納できるデータを制御するための組み合わせ。
このチュートリアルの動作環境: Windows 7 システム、mysql バージョン 5.8、Dell G3 コンピューター。
データベース テーブルは、主キーと外部キーを介して接続されます。
(推奨チュートリアル: mysql ビデオ チュートリアル)
主キー制約
テーブルには通常、一意の ID があります。テーブル の各行の値の列または列のセット。このような列はテーブルの主キー (PK) と呼ばれ、テーブルのエンティティの整合性を強制するために使用されます。主キー制約はデータの一意性を保証するため、多くの場合、アイデンティティ列に定義されます。
主キー制約がテーブルに指定されている場合、データベース エンジンは主キー列に一意のインデックスを自動的に作成して、データの一意性を確保します。また、このインデックスにより、主キーがクエリで使用される場合にデータへの高速アクセスが可能になります。主キー制約が複数の列に定義されている場合、列内の値を繰り返すことができますが、主キー制約定義内のすべての列の値の組み合わせは一意である必要があります。
次の図に示すように、Purchasing.ProductVendor テーブルの ProductID 列と VendorID 列は、このテーブルの複合主キー制約を構成します。これにより、ProductVendor テーブルの各行が ProductID と VendorID の一意の組み合わせを持つことが保証されます。これにより、重複した行が挿入されるのを防ぎます。
#テーブルには主キー制約を 1 つだけ含めることができます。
主キーは 16 列を超えることはできず、キーの合計長は 900 バイトを超えることはできません。
主キー制約によって生成されたインデックスによって、テーブル内のインデックスの数が 999 個の非クラスター化インデックスと 1 個のクラスター化インデックスを超えて増加することはありません。
主キー制約にクラスター化インデックスまたは非クラスター化インデックスが指定されておらず、テーブルにクラスター化インデックスがない場合は、クラスター化インデックスが使用されます。
主キー制約で定義されたすべての列は、Null にならないように定義する必要があります。 NULL 可能性が指定されていない場合、主キー制約に参加するすべての列の NULL 可能性は非 NULL に設定されます。
CLR ユーザー定義型の列に主キーを定義する場合、その型の実装はバイナリ ソートをサポートする必要があります。
外部キー制約
外部キー (FK) は、2 つのテーブル内のデータ間のリンクを確立および強化するために使用される列です。外部キー テーブルに格納できるデータを制御する列の組み合わせ。外部キー参照では、1 つのテーブルの主キー値を含む 1 つ以上の列が別のテーブルの 1 つ以上の列によって参照される場合、2 つのテーブル間にリンクが作成されます。この列は 2 番目のテーブルの外部キーになります。
たとえば、販売注文と営業担当者の間には論理的な関係があるため、Sales.SalesOrderHeader テーブルには Sales.Salesperson テーブルへの外部キー リンクが含まれています。 SalesOrderHeader テーブルの SalespersonID 列は、Salesperson テーブルの主キー列に対応します。 SalesOrderHeader テーブルの SalespersonID 列は、Salesperson テーブルの外部キーです。外部キー関係を作成すると、SalespersonID の値が Salesperson テーブルの主キーに存在しない場合、SalespersonID の値を SalesOrderHeader テーブルに挿入できません。
テーブルは、最大 253 個の他のテーブルおよび列を外部キー (送信参照) として参照できます。 SQL Server 2016 (13.x) では、別のテーブル (受信参照) で参照できる他のテーブルと列の数の制限が 253 から 10,000 に増加しました。 (互換性レベルは少なくとも 130 である必要があります。) 数制限を増やすと、次の制約が課されます:
DELETE DML 操作のみが 253 を超える外部キー参照をサポートします。 UPDATE および MERGE 操作はサポートされていません。
テーブル自体への外部キー参照を持つテーブルは、依然として 253 個の外部キー参照しか持つことができません。
列ストア インデックス、メモリ最適化テーブル、Stretch Database、またはパーティション分割された外部キー テーブルは、現在 253 を超える外部キー参照をサポートしていません。
外部キー制約のインデックス
主キー制約とは異なり、外部キー制約を作成しても、対応するインデックスは自動的に作成されません。ただし、次の理由により、外部キーのインデックスを手動で作成すると便利なことがよくあります。
外部キー列は、クエリ、メソッド Matches で関連テーブルのデータを結合するときの結合条件でよく使用されます。 1 つのテーブルの外部キー制約内の 1 つ以上の列を、別のテーブルの主キー列または一意キー列に制約します。インデックスを使用すると、データベース エンジンは外部キー テーブル内の関連データをすばやく見つけることができます。ただし、このインデックスの作成は必須ではありません。 2 つの関連するテーブルのデータは、2 つのテーブルに主キーまたは外部キー制約が定義されていない場合でも結合できますが、2 つのテーブル間の外部キー関係は、それらのキーを条件として使用して最適化されていることを示し、クエリに結合します。
主キー制約への変更は、関連テーブルの外部キー制約によってチェックできます。
プログラミング関連の知識について詳しくは、プログラミング ビデオをご覧ください。 !
以上がデータベーステーブル間の関係を確立する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。