新しいデータベースを作成していて、一時データを含むテーブルがいくつかあります。
例: ユーザーによるパスワードの変更要求 - トークンが保存され、後で削除されます。
現在、これらのテーブルには主キーがあり、1 から上に自動インクリメントされます。
AUTO_INCREMENT = 1;
この主キーの用途はまったくありません...参照することはなく、大きくなるだけです。
このようなテーブルには主キーが必要ですか?
新しいデータベースを作成していて、一時データを含むテーブルがいくつかあります。
例: ユーザーによるパスワードの変更要求 - トークンが保存され、後で削除されます。
現在、これらのテーブルには主キーがあり、1 から上に自動インクリメントされます。
AUTO_INCREMENT = 1;
この主キーの用途はまったくありません...参照することはなく、大きくなるだけです。
このようなテーブルには主キーが必要ですか?
簡単な答え: はい。
長い答え:
テーブルを何かに結合できるようにする必要があります テーブルをクラスター化する場合は、何らかの主キーが必要です。テーブルの設計に主キーが必要ない場合は、設計を再考してください。ほとんどの場合、何かが不足しています。同一の記録を保持するのはなぜですか? MySQL では、明示的に指定していない場合、InnoDB ストレージ エンジンは常に PRIMARY KEY を作成するため、アクセスできない余分な列が作成されます。
PRIMARY KEY は複合キーにすることができることに注意してください。
多対多のリンク テーブルがある場合は、リンクに含まれるすべてのフィールドに PRIMARY KEY を作成します。したがって、1 つのリンクを記述する 2 つ以上のレコードがないようにします。
論理的な一貫性の問題に加えて、ほとんどの RDBMS エンジンは、これらのフィールドを UNIQUE インデックスに含めることで恩恵を受けます。
また、PRIMARY KEY には UNIQUE インデックスの作成が含まれるため、それを宣言して、論理的な一貫性とパフォーマンスの両方を得る必要があります。
これは、すでに同じ議論があるSOスレッドです。
一部の人々はまだあなたの意見に従うのが好きです. こちらをご覧ください
私の個人的な意見では、行を識別または一意にするために、主キーが必要です。ロジックは、プログラム ロジックにすることができます。自動インクリメントまたは複合、または何でもかまいません。