シンプルさと(想定される)速度のために、データベースの主キーとして長整数を使用することを常に好んでいました。しかし、オブジェクト インスタンスにRESTまたは Rails のような URL スキームを使用すると、次のような URL になります。
http://example.com/user/783
次に、782、781、...、2、および 1 の ID を持つユーザーも存在すると仮定します。問題の Web アプリが、他のユーザーを許可なく表示するために他の番号を入力することを防ぐのに十分安全であると仮定すると、単純な連続して割り当てられた代理キーも、インスタンスの総数 (これよりも古い) を「漏えい」します。この場合はユーザーであり、これは特権情報である可能性があります。(たとえば、私はスタックオーバーフローのユーザー #726 です。)
UUID /GUID はより良い解決策でしょうか? 次に、次のような URL を設定できます。
http://example.com/user/035a46e0-6550-11dd-ad8b-0800200c9a66
正確には簡潔ではありませんが、表示されるユーザーに関する暗黙の情報は少なくなります。確かに、適切なセキュリティに代わるものではない「あいまいさによるセキュリティ」の匂いがしますが、少なくとももう少し安全に見えます.
その利点は、Web アドレス可能なオブジェクト インスタンスに UUID を実装するコストと複雑さに見合う価値があるでしょうか? 結合を高速化するためだけに、整数列をデータベース PK として使用したいと思います。
UUID のデータベース内表現の問題もあります。MySQL がそれらを 36 文字の文字列として保存することは知っています。Postgres はより効率的な内部表現 (128 ビット?) を持っているようですが、私自身は試していません。誰でもこれを経験したことがありますか?
更新: URL (例: http://example.com/user/yukondude )でユーザー名のみを使用することについて尋ねた人のために、一意の名前を持つオブジェクト インスタンスに対しては問題なく機能しますが、無数の Web についてはどうでしょうか。本当に番号でしか識別できないアプリオブジェクト? 注文、取引、請求書、画像名の重複、stackoverflow の質問、...