4

コードを見てみると、文字列を生成する次のコードが記述されており、その文字列がテーブルの主キーとして設定されていることがわかります。

return new BigInteger(UUID.randomUUID().toString().replaceAll("-", ""), 16).toString(36);

これまで、多くのレコードがあり、主キーの制約に違反していないため、それらは一意であるように見えます。

番号はランダムになると思いますが、一意ですか?

ありがとう

トゥコ

4

4 に答える 4

3

番号が一意であるという保証はありませんが、範囲が非常に広いため、重複が生成される可能性は非常に低くなります。

誕生日のパラドックスを考慮した後でも、チャンスは非常に低いです。

于 2012-08-29T05:46:30.913 に答える
1

このrandomUUID関数は、「暗号的に強力な疑似乱数ジェネレーター」(Javadocから)を使用します。これは、衝突のリスクを最小限に抑えるために、ランダム生成の背後にいくつかの数学があることを意味します(2つの数値が一致します)。

番号が完全に一意であるという100%の保証はありません。ただし、2つの数値が一致する可能性は許容範囲内です。

于 2012-08-29T05:47:58.807 に答える
1

MichaelBorgwardtからの引用

UUIDはjava.security.SecureRandom、「暗号的に強い」と思われるを使用します。実際の実装は指定されておらず、JVM間で異なる可能性がありますが(つまり、作成された具体的なステートメントは1つの特定のJVMに対してのみ有効です)、出力は統計的乱数ジェネレーターテストに合格する必要があります。

また、JavaのUUID.randomUUIDがどれほど優れているかを読むこともできます。とUUIDはどのくらいユニークですか?詳細については

于 2012-08-29T05:52:13.443 に答える
0

UUIDは、実際には普遍的に一意の識別子です。その使用法の一部は、ランダムなファイル名、WebアプリケーションのセッションID、トランザクションID、およびシーケンスまたは自動生成された番号を置き換えるデータベースのレコードの主キーを作成するためのものです。

于 2012-08-29T05:46:54.573 に答える