データベーススキーマを作成し、すべての外部キーを考え出すとき。データベースでそれらを明示的に定義することの利点は何ですか?
利点はありますか?
依存している場合は、MySQLが使用するデータベースです。
データベーススキーマを作成し、すべての外部キーを考え出すとき。データベースでそれらを明示的に定義することの利点は何ですか?
利点はありますか?
依存している場合は、MySQLが使用するデータベースです。
外部キー制約は、データ間の参照が実際に有効で無傷であることを保証するデータベース制約である参照整合性を維持するために使用されます(データベースはデータを格納するだけでなく、その品質も保証する必要があります)。つまり、テーブル間の関係の一貫性を維持するのに役立ちます。ウィキペディアから:
参照整合性はデータのプロパティであり、満たされると、リレーション(テーブル)の1つの属性(列)のすべての値が、別の(または同じ)リレーション(テーブル)の別の属性の値として存在する必要があります。
あまり正式ではなく、リレーショナルデータベースの場合:参照整合性を保持するために、外部キーとして宣言されたテーブル内のフィールドには、親テーブルの主キーまたは候補キーの値のみを含めることができます。たとえば、別のテーブルの外部キーによって参照される値を含むレコードを削除すると、参照整合性が失われます。一部のリレーショナルデータベース管理システム(RDBMS)は、通常、外部キー行も削除して整合性を維持するか、エラーを返して削除を実行しないことにより、参照整合性を適用できます。使用する方法は、データディクショナリで定義されている参照整合性制約によって決定できます。
参照整合性を強制していないデータベースの例。この例では、存在しないアーティストを参照する外部キー(artist_id)値がアルバムテーブルにあります。つまり、参照されるテーブルに対応する主キー値がない外部キー値があります。ここで起こったことは、artistテーブルから削除されたartist_idが「4」の「Aerosmith」というアーティストがいたことです。しかし、アルバム「EattheRich」はこのアーティストに言及していました。参照整合性が適用されていれば、これは不可能でした。
MySQLを使用して2つのテーブル間に外部キーを作成するには、両方のテーブルがInnoDBテーブルである必要があります(デフォルトのMyISAMテーブルタイプでは、外部キーを「定義」できますが、実際には何もしません)。
データの整合性-制約は、さまざまなテーブルのデータの一貫性を確保するのに役立ちます。副次的な利点は、DBMSのクエリオプティマイザで制約を利用できることです。これにより、一部のクエリのパフォーマンスを最適化できます。
主キー/外部キーの関係を適切に定義すると、データベースは参照整合性の適用を処理します。データベースレベルで指定した制限に違反するデータを挿入することは許可されません。