プライマリーキーは何にすべきか

想定読者

結論

分散環境でなければ基本的にサロゲートキーを使う。 ユニークなレコードを担保するために複合主キー候補のカラムにユニーク制約を貼る。

候補

auto-increment id(サロゲートキーナチュラルキー 複合主キー UUID

複合キーを使用しない方がいい理由

UUIDについて

UUIDにするとセキュリティが担保されて良いと聞いたことがあるけどAuto-Increment IDとUUIDであればどちらを適用するべきか。

chatgptの回答

データベースのプライマリーキーにauto-incrementのIDを使用するか、UUIDを使用するかは、アプリケーションの要件とスケーラビリティに大きく依存します。以下に、それぞれの選択肢が適している状況について説明します。

Auto-Increment ID:

データが単一のデータベースインスタンスで保管されている場合に便利です。これは、プライマリキーが一意であり続け、順序を保持することを保証します。
簡単で、直感的な運用が可能です。データが順序付けされているため、データの挿入順序を簡単に判断できます。
IDが小さいため、ディスクスペースを節約でき、インデックスの効率が向上します。
ただし、分散環境でauto-increment IDを使用すると、IDの一意性を保つための追加の手段が必要となるため、複雑性が増します。

UUID:

分散データベースやマイクロサービスのアーキテクチャでよく使用されます。各エンティティはその生成元に関係なく、グローバルに一意のIDを持つことができます。
UUIDはランダムに生成されるため、情報の推測を難しくします。これはセキュリティ上の利点となり得ます。
ただし、UUIDは通常、数値のauto-increment IDに比べて大きいため、ストレージとパフォーマンスに影響を与える可能性があります。

結論としては、使用するキーの種類は、アプリケーションの要件、データベースの設計、そしてどの程度までスケールする可能性があるかに大きく依存します。そのため、「一概にこれが正解」と言うことはできません。具体的な要件と状況に基づいて適切な選択を行うことが重要です。

と言うわけで分散環境になった時に導入検討すれば良さそう。

参考

サロゲートキーと複合主キー | DBFlute

サロゲートキー v.s. 複合主キーでは、前者を選ぶ - mrsekut-p