如何管理表行中的连续列值

1 java database oracle concurrency

关于我想做什么的一点介绍:

考虑这样一种情况:公司的不同人员每年一次获得到某个地方的所有费用支付旅行.可能有1000人有资格参加这次旅行,但只有16个人可以参加.

这16个点中的每一个都有一个相关的索引,必须是1到16个.预留的索引的索引从17开始.

申请的前16人在旅途中获得了明确的位置.其余的最终在预订名单上.如果前16人中的一人取消,则第一个有预订的人获得他的位置并且所有索引都重新编号以补偿取消的人.

所有这些都在带有Oracle DB的Java Web应用程序中进行管理.

现在,我的问题:

我必须以正确的方式管理索引(所有顺序,没有重复的索引),可能有数百人同时申请旅行.

在旅行表中插入记录时,获取索引的方式是

SELECT MAX(INDEX_NR) + 1 AS NEXT_INDEX_NR FROM TABLE

并使用它作为新索引(这是完成Java端,然后是一个新的查询来插入记录).很明显,为什么我们有相同指数的多个点或保留.因此,我们可以说,这次旅行中有19个人,因为其中4个人的索引是10,例如.

我该怎么办呢?到目前为止,我一直在想3种方法:

  1. Serializable对数据库事务使用隔离级别(不喜欢这个);
  2. 插入一个没有的记录INDEX_NR然后有一个触发器以某种方式管理事物(之前从未使用过触发器);
  3. 每条记录也有一UPDATED列.我可以用某种方式使用它吗?(请注意,我不能失去INDEX_NR应用程序的其他部分使用它).

有没有最好的方法来做到这一点?

Pet*_*ter 7

为什么让它变得复杂?

只需在输入时插入所有预订,然后插入重新分配点的时间戳.

然后在您查询中只使用时间戳对它们进行排序.

如果有人在同一毫秒内保留一个点,那么只需使用随机方法来分配订单.