【发布时间】:2013-03-04 21:47:34
【问题描述】:
我必须编写在registered_security_numbers 中注册16 位安全号码的oracle 程序。
我知道安全号码的前 6 位是 1234 11 或 1234 12 ,其余 10 位是随机生成的。
我有两种可能的解决方案:
编写第二个过程,生成所有可能的安全号码并将它们插入到
possible_security_numbers表中,设置属性free=1。 然后,当我收到注册新安全号码的请求时,我会在possible_security_numbers表中查询一个随机安全号码,该安全号码是免费的,并将其插入registered_security_numbers。每次我收到注册安全号码的请求时,我都会从 1234 1100 0000 0000 - 1234 1299 9999 9999 范围内生成随机数,直到获得安全号码,该号码在
registered_security_numbers表并将其插入registered_security_numbers。
(1) 我不喜欢的方法,因为possible_security_numbers 表将包含数十亿个条目,我不确定它有多好或可以运行多快的选择/更新。
(2) 我不喜欢的方法,因为如果我在registered_security_numbers 表中有很多记录,则从一个范围内生成随机数可能会重复很多次。
我想知道是否有人有其他解决方案或可以评论我的解决方案,这对我来说似乎很糟糕……
【问题讨论】:
-
如果使用的 id 将是稀疏的,我不会预先生成。为什么它必须是随机的?你能选择一个随机数,如果不可用则找到第一个大于或等于的可用 id(或其他一些类似的算法)?