コードを見てみると、文字列を生成する次のコードが記述されており、その文字列がテーブルの主キーとして設定されていることがわかります。
return new BigInteger(UUID.randomUUID().toString().replaceAll("-", ""), 16).toString(36);
これまで、多くのレコードがあり、主キーの制約に違反していないため、それらは一意であるように見えます。
番号はランダムになると思いますが、一意ですか?
ありがとう
トゥコ
番号が一意であるという保証はありませんが、範囲が非常に広いため、重複が生成される可能性は非常に低くなります。
誕生日のパラドックスを考慮した後でも、チャンスは非常に低いです。
このrandomUUID
関数は、「暗号的に強力な疑似乱数ジェネレーター」(Javadocから)を使用します。これは、衝突のリスクを最小限に抑えるために、ランダム生成の背後にいくつかの数学があることを意味します(2つの数値が一致します)。
番号が完全に一意であるという100%の保証はありません。ただし、2つの数値が一致する可能性は許容範囲内です。
MichaelBorgwardtからの引用
UUIDは
java.security.SecureRandom
、「暗号的に強い」と思われるを使用します。実際の実装は指定されておらず、JVM間で異なる可能性がありますが(つまり、作成された具体的なステートメントは1つの特定のJVMに対してのみ有効です)、出力は統計的乱数ジェネレーターテストに合格する必要があります。
また、JavaのUUID.randomUUIDがどれほど優れているかを読むこともできます。とUUIDはどのくらいユニークですか?詳細については
UUIDは、実際には普遍的に一意の識別子です。その使用法の一部は、ランダムなファイル名、WebアプリケーションのセッションID、トランザクションID、およびシーケンスまたは自動生成された番号を置き換えるデータベースのレコードの主キーを作成するためのものです。