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

想定読者

結論

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

候補

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

Golangで調べたこと

  • go run について
    • go run main.go だとmain.goしか読み込まないのでgo run .にする。すると他のファイル毎読み込まれる。実行されるのはmain関数。
  • 非推奨の関数
    • 非推奨: Go 1.16以降、io/ioutilパッケージの全ての関数が非推奨となり、それらの関数は他のパッケージに移動されました。具体的には、ioutil.ReadFileはos.ReadFileに置き換えられました。

Golangで調べたこと

  • 非推奨の関数
    • 非推奨: Go 1.16以降、io/ioutilパッケージの全ての関数が非推奨となり、それらの関数は他のパッケージに移動されました。具体的には、ioutil.ReadFileはos.ReadFileに置き換えられました。

不確実性というかプレッシャーに対処する

 

 

不確実性に対処するにはどうするか。

基本的には解像度をあげる、というのが正解だと思う。

不確実性に対処できない時の基本的な原因としては相手の正体がわからないことだと思う。

相手の正体を言語化してやれば細分化することができ、一つ一つ解決していくことができそうに思う。

 

でもそもそも相手の正体を言語化できないよ!というのはそれはそう。と思う。

そういう時どうすればいいかというと、すごく具体的にペルソナを考える、というのは有用だと思う。

何がどう、と考えていくとやっぱり違うなとかズレてるな、というのが出てくるので、そのずれを追求していくと段々と正体が見えてくる、という感じで不確実性というかプレッシャーに向き合うことができると思う。

技術選択について

言語

  • 型付け
  • 実行速度
  • ライブラリの豊富さ
  • チーム開発に向いているか
  • 学習効率
  • コミュニティが活発か
  • 過去互換性のない変更がどれくらいあったか
  • 開発速度が速いか
  • コード記述量は多くなるか少なくなるか
  • バグが少ないか
  • ドキュメントが多いか

これらの要素が用途に合っているか 用途ex). - 大規模データ分析: データ分析はライブラリが豊富だからpython? - ゲーム用のapi: トラフィックを高速に捌けるほうがいい

- 広告配信サーバー