我的团队正在开发一个带有旧数据库的应用程序,该数据库使用两个不同的值作为Group对象的唯一标识符:Id
是一个自动递增的Identity列,其值在插入时由数据库确定。 GroupCode
由插入后的应用确定,并且为"Group" + theGroup.Id
。
我们需要的是一种生成GroupCode的算法:
现有解决方案符合前两个标准,但不符合最后两个标准。有没有人知道满足上述所有标准的良好解决方案?
还有一点需要注意:尽管此代码由用户在外部使用,即使Id会为其他表链接其外键提供更好的标识符,但其他表使用GroupCode来引用特定的组。
提前致谢。
答案 0 :(得分:1)
您是否研究过Base32 / Base36内容编码? Identity32列的Base32表示将使其唯一,易于输入但绝对不安全。但是,大多数非程序员不知道如何生成字符串值。
同样使用Base32 / 36,您可以维护基于正常数据库整数的主键。
答案 1 :(得分:1)
是否可以添加新列?它可以包含Identity和随机的32位数字。
然后可以将64位数转换为“难忘的随机字符串”。它不是完美的安全性,但可能足够好。
以下是使用Ruby和Koremutake gem。
的示例require 'koremu'
# http://pastie.org/96316 adds Array.chunk
identity=104711
r=rand(2**32)<<32 # in this example 5946631977955229696
ka = KoremuFixnum.new(r+identity).to_ka.chunk(3)
ka.each {|arr| print KoremuArray.new(arr).to_ks + " "}
结果:
TUSADA REGRUMI LEBADE