2

Tech Stack:Java 1.6、JPA(Hibernate 3)、Spring 3、Oracle 11g

私は、要件の1つが顧客に「ReferenceNumber」を返すことであるプロジェクトに取り組んでいます。

1つのオプションは、行IDを返すことですが、それが機能するためには、連続していてはなりません。そうでなければ、あなたは次の番号などを推測することができます。

Javaで数値を生成し、それを別の列に格納することはできますが、衝突がないことを確認する必要があります。

データベースでそのような番号を生成する方法はありますが、一意性が保証されるかどうかはわかりません。

データベースの観点から、このような要件のベストプラクティスはありますか?

更新1

現在、Javaで以下を使用して数値を生成しています。

    private static SecureRandom random = new SecureRandom();

    public static BigInteger getNew() {
        return new BigInteger(60, random);
    }

    public static BigInteger getNew(int numBits) {
        return new BigInteger(numBits, random);
    }

更新2:要件

連番を許可すると、次のことが可能になります。

  1. 次の番号を推測する顧客。
  2. 2つの数の間にいくつの数(順序)があったかを調べます。等

この参照は数字であることが望ましいですが、数字の後に続く3文字の接頭辞も問題ありません。

4

3 に答える 3

2

テーブルに一連の主キー (customer_id など) が生成されている場合は、数字を逆にして、それを 8 進数表現に変換できます。したがって、これは依然として 10 進数のように見えますが、明らかに連続しておらず、範囲を推測するのは困難です。

元の値の末尾のゼロを処理する方法を見つけることができれば、このプロセスは元に戻すこともできます (反転された数値の先頭のゼロになり、変換中に「削除」されるため)。

于 2012-07-19T18:32:52.037 に答える