プライマリーキーは何にすべきか
想定読者
結論
分散環境でなければ基本的にサロゲートキーを使う。 ユニークなレコードを担保するために複合主キー候補のカラムにユニーク制約を貼る。
候補
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に比べて大きいため、ストレージとパフォーマンスに影響を与える可能性があります。 結論としては、使用するキーの種類は、アプリケーションの要件、データベースの設計、そしてどの程度までスケールする可能性があるかに大きく依存します。そのため、「一概にこれが正解」と言うことはできません。具体的な要件と状況に基づいて適切な選択を行うことが重要です。
と言うわけで分散環境になった時に導入検討すれば良さそう。