日期:2014-05-17  浏览次数:20893 次

我们常见的银行排队系统在数据库方面设计方面怎么处理取号和呼叫问题呢?
去银行办理业务时总是先到排队机处领取一个号码,以下几个问题怎么设计实现的呢?

情况一:
当用户点击按钮取号时:排队机系统是不是在用户点击一下触摸屏的时候首先从数据库获取当前排队的最大号码然后自动增 1,同时将这个最大值放到数据库中同时将此时的最大值放到排队单子上打印出来。

我想到的sql语句类似于:
 1)、insert into '排队表'('排队号码') values 'select max('排队号码 ')+1' [where '排队表id '='select max(排队表 id)+1' ],后面的where语句是不是可以不要,如果我们把排队表的id 设为aoutoincrement的话。<点击取号按钮数据库做的第一个动作>

 2)、select max('排队号码') from '排队表' ;<这里是想取出最新插入大那个排队号码 ,用max函数好太好,其中max('排队号码')一定是上一面sql语句插入大那个排队号码值吗?>

情况二:
银行工作人员在呼叫排队用户时,比方说好几个窗口同时在办理业务,他们会共享同一个排队系统人员库,当工作人员每次点击呼叫按钮,此时相当于从数据库中取出排队人员列表当前没有被呼叫过的第一个用户<这里要在这个银行排队数据表中添加一个标示字段 如: ’是否被呼叫过‘<默认未被呼叫>,来标定哪一号用户已经被呼叫到或者没有呼叫到。>
当点击呼叫按钮的时候是不是触发了两个动作:
 1)、从数据库中取出当前没有被呼叫过的第一个用户 (此时有什么 sql语句或函数可以方便的查询呢?)
 2)、取出这个用户同时要将它的是否被呼叫过的那个标示位设为已经被呼叫过的状态。
<上面两个数据库操作过程有没有什么可以合并或其他执行方法呢?>

我想到的sql语句类似于:
1)、select count('排队号码 ') where '是否被呼叫过' ='已经呼叫过' <将取出的值加1>
2)、update '排队表' SET '是否被呼叫过' ='已经呼叫过' where '排队号码 ' = <上面sql语句的结果>

情况三:(情况二的改进)

基于上面情况二我觉得在呼叫方面比较麻烦,原因是每次都要count('排队号码 '),好像都要存在级联查询,那么我在想实际的呼叫过程可不可以写一个存储过程,(这时在排队表中还要有个字段:'最新呼叫到的新排队号码',里面放的是所有业务窗口呼叫的最新排队号码那个数,然后各个窗口呼叫时执行这个存储过程把这个值更新),用户呼叫的时候先读取这个字段的值后加1为最新未被呼叫排队号码,此时还要把这个数字放到 '最新呼叫到的新排队号码' 这个字段中。

类似存储过程实现的功能是:
1)、 每触发一次将字段 '最新呼叫到的新排队号码'里面的值返回给我,然后再将这个值增加1 存到里面
怎么写阿。不会阿。


------解决方案--------------------
分少,问题多。