1. ホーム
  2. データベース

[解決済み】すべてのテーブルに主キーを持たせるべきですか?

2022-03-25 17:15:22

質問

データベースのテーブルを作成しているのですが、論理的な主キーが割り当てられていません。各テーブルに主キーを設定する必要がありますか?

どのように解決するのですか?

簡単な答え はい .

長い回答です。

  • テーブルが何かに結合可能である必要があります。
  • テーブルをクラスタ化する場合、何らかの主キーが必要です。
  • もし、あなたのテーブルの設計に主キーが必要ないのであれば、設計を再考してください。なぜ同一のレコードを保持するのでしょうか?

MySQLでは、InnoDBストレージエンジンは、明示的に指定しなかった場合、常にプライマリーキーを作成するため、アクセスできない余分なカラムができる。

主キーは複合キーにすることができることに注意してください。

多対多のリンクテーブルがある場合、リンクに関係するすべてのフィールドに主キーを作成します。こうすることで、1つのリンクを記述するレコードが2つ以上存在しないようにすることができます。

論理的な一貫性の問題だけでなく、ほとんどの RDBMS エンジンは、これらのフィールドを一意インデックスに含めることで利益を得ることができます。

また、どんな主キーでも一意なインデックスを作成することになるので、それを宣言して論理的整合性とパフォーマンスの両方を手に入れるべきです。

なぜ常にユニークなデータにユニークなインデックスを作成する必要があるかについては、私のブログのこちらの記事を参照してください。

追伸 があります。 とても、とても 主キーが不要な特殊なケース。

ほとんどの場合、ログ・テーブルが含まれ、そのテーブルには 任意の インデックスを作成します。