回答:
FOREIGN KEYS
データの整合性を確保してください。
効率の点でクエリを改善するのではなく、いくつかの間違ったクエリを失敗させるだけです。
このような関係がある場合:
CREATE TABLE department (id INT NOT NULL)
CREATE TABLE employee (id INT NOT NULL, dept_id INT NOT NULL, FOREIGN KEY (dept_id) REFERENCES department(id))
、department
いくつかemployee
のがある場合は削除できません。
ユーザーが指定した場合ON DELETE CASCADE
にFOREIGN KEY
定義、参照行が参照されたものと一緒に自動的に削除されます。
制約として、FOREIGN KEY
実際にはクエリが少し遅くなります。
参照されるテーブルから削除するとき、または参照するテーブルに挿入するときに、追加のチェックを実行する必要があります。
JOIN
場合、基礎となるのは、フルテーブルスキャンを使用する2つのDELETEよりもはるかに効率が悪い可能性があります
実際の外部キーを使用する主な利点は、データの整合性を確保し、何かが変更または削除されたときに関連アイテムにカスケードアクションを設定できることです。
たとえば、フォーラムをプログラミングしているとしましょう。主キーの「トピック」テーブルがあり、トピックテーブルへの外部キーtopics.topic_id
である列posts.topic_id
でトピックに投稿が添付されている「投稿」テーブルがあります。
この外部キーの関係により、すべての投稿が有効なトピックに確実に添付されます。あなたが持っている唯一のトピックがID#1である場合、トピック#2に接続されたデータベースに投稿が存在することは不可能です。データベースはこれを保証します。
カスケードの利点として、トピックがトピックテーブルから削除された場合に、データベースがこのトピックに添付された投稿テーブル内のすべての投稿を自動的に削除するように設定できます。これは、手動で実行する必要がある手順を削除するので便利です。多くのテーブルがリンクされていると、非常に複雑になる可能性があります。外部キーを使用すると、すべての関係を自動的にクリーンアップできます。
1.FOREIGN KEYSは、データの一貫性を保証します。
2.削除カスケードを外部キー定義に適用すると、親行が削除されるときに参照行が自動的に削除されます。
3. Update Cascadeを外部キー定義に適用すると、親行が更新されるときに子行が自動的に更新されます。
クエリ:ALTER TABLE child ADD FOREIGN KEY(parent_id)REFERENCES parent(id)ON UPDATE CASCADE ON DELETE CASCADE;