自己参照テーブルの列を外部キーにする必要がありますか?
-
05-07-2019 - |
質問
たとえば、カテゴリの階層を作成するには、同じテーブル内の別のカテゴリを指す「parent_id」列を使用します。
これは外部キーですか?欠点/利点は何ですか?
解決
はい。孤児(親のないエントリ)がないことを確認します。使用状況によっては、カスケード削除を定義した場合、親が削除されると、そのすべての子も削除されます。
短所は、他の外部キーと同様にわずかなパフォーマンスヒットになります。
他のヒント
はい、そうすべきです。同じデータベース内の別のリレーションのプライマリキーとして機能するデータベースのリレーションに属性がある場合は、FKにする必要があります。
- 関係の適切な設計を想定すると、外部キーの制約により、プログラマーがデータベースに不整合を導入することがより困難になります。
- データベースサーバーによるこれらの制約のチェックを一元化すると、アプリケーション側でこれらのチェックを実行する必要がなくなります。これにより、異なるアプリケーションが同じ方法で制約をチェックしない可能性がなくなります。
- カスケード更新とカスケードを使用すると、アプリケーションコードを簡素化できます。
- 適切に設計された外部キールールは、テーブル間の関係を文書化するのに役立ちます。
欠点:
- 外部キーを定義すると、一括操作を実行するのが難しくなる場合があります。
- ディスク使用量が増え、パフォーマンスがわずかに低下する可能性があります。
はい。
利点(外部キーに関して):
- parent_idがテーブルの実際の行を参照することを保証する
- 子を持つ親の誤った削除を防止するか、削除が子を削除するためにカスケードすることを保証します
- オプティマイザーが使用できる情報を提供します
実際の欠点は考えられません。
はい、外部キーにする必要があります。
利点は、冗長性の少ない優れたデータモデルになります。
所属していません StackOverflow