我的web應用程序在數據庫中有一個表,其中id
列對每一行都是唯一的。除此之外,我還想要另一個名爲code
的專欄,它將包含一個6位數字的唯一字母數字代碼,其編號爲0-9和字母A-Z。字母和數字可以在代碼中複製。即FFQ77J
。我知道這個6位字母數字代碼的獨特性隨着時間的增加而減少,因爲增加了更多的行,但現在我確定了這一點。如何根據唯一整數獲取唯一字母數字
要求(更新) - 該代碼至少應爲長度爲6 的 - 每個代碼應該是字母數字
所以我想產生該字母數字代碼。
問題
什麼是做到這一點的好辦法?
- 我應該生成代碼並生成後,運行一個查詢到數據庫並檢查它是否已經存在,如果是的話就生成一個新的?爲了確保唯一性,這段代碼是否需要同步,以便只有一個線程運行它?
- 是否有內置於數據庫的內容可以讓我這樣做?
對於我將使用這樣的事情,我在this answer
char[] symbols = new char[36];
char[] buf;
for (int idx = 0; idx < 10; ++idx)
symbols[idx] = (char) ('0' + idx);
for (int idx = 10; idx < 36; ++idx)
symbols[idx] = (char) ('A' + idx - 10);
public String nextString()
{
for (int idx = 0; idx < buf.length; ++idx)
buf[idx] = symbols[random.nextInt(symbols.length)];
return new String(buf);
}
ids需要是隨機的嗎?使用(非隨機)計數器會更有效 - 您將保證唯一性,而無需檢查值是否已存在 –
我認爲您的意思是代碼?他們需要看起來有點隨意,所以他們不容易猜測。 – Anthony
爲什麼?爲什麼不在每次需要時從ID中計算它?通過這樣做你可以解除數據庫的正常化。 – EJP