【发布时间】:2013-07-14 22:44:35
【问题描述】:
我的 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);
}
【问题讨论】:
-
id需要随机吗?使用(非随机)计数器更有效 - 您将保证唯一性,而无需检查该值是否已存在
-
我猜你的意思是代码?它们需要看起来有点随机,所以不容易被猜到。
-
为什么?为什么不每次需要时都从 ID 计算它?您这样做是在对数据库进行非规范化。
-
那么,您希望它至少有 6 个字符长,但它可以更长吗?
标签: java algorithm uniqueidentifier