データベース テーブルを作成していますが、論理主キーが割り当てられていません。すべてのテーブルに主キーが必要ですか?
ベストアンサー1
短い答え:はい。
長い答え:
- テーブルを何かに結合可能にする必要がある
- テーブルをクラスター化したい場合は、何らかの主キーが必要です。
- テーブル設計に主キーが必要ない場合は、設計を再検討してください。おそらく、何かが欠けているのでしょう。なぜ同一のレコードを保持するのでしょうか?
MySQL では、明示的に指定しなかった場合、InnoDB ストレージ エンジンによって常に主キーが作成され、アクセスできない追加の列が作成されます。
主キーは複合キーになる可能性があることに注意してください。
多対多のリンク テーブルがある場合は、リンクに関係するすべてのフィールドに主キーを作成します。これにより、1 つのリンクを記述するレコードが 2 つ以上存在しないことが保証されます。
論理的な一貫性の問題に加えて、ほとんどの RDBMS エンジンでは、これらのフィールドを一意のインデックスに含めることでメリットが得られます。
また、主キーには一意のインデックスの作成が含まれるため、それを宣言して論理的な一貫性とパフォーマンスの両方を実現する必要があります。
一意のデータには常に一意のインデックスを作成する必要がある理由については、私のブログのこの記事を参照してください。
PS主キーが必要ない非常に特殊なケースがいくつかあります。
ほとんどの場合、パフォーマンス上の理由からインデックスを持たないログ テーブルが含まれます。