论坛首页 综合技术论坛

我们常见的银行排队系统在数据库方面设计方面怎么处理取号和呼叫问题呢?

浏览 5921 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-07-28  
去银行办理业务时总是先到排队机处领取一个号码,以下几个问题怎么设计实现的呢?

情况一:
当用户点击按钮取号时:排队机系统是不是在用户点击一下触摸屏的时候首先从数据库获取当前排队的最大号码然后自动增 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 存到里面
怎么写阿。不会阿。

   发表时间:2008-07-31  
有个东西叫锁
0 请登录后投票
   发表时间:2008-08-07  
同步处理就行了呀,串化
0 请登录后投票
   发表时间:2008-08-08  
这个会用Java写?

如果真的用Java写的话建议用Hibernate或者OpenJPA什么的处理。如果不是用Java写的话可以用同步,任何编程语言里我感觉应该都有。
0 请登录后投票
   发表时间:2008-11-27  
我觉得这种排队系统应该不需要进数据库的吧..反正是想去实现FIFO就可以,直接用一个单实例的List可以吗>?
0 请登录后投票
   发表时间:2008-12-02  
如果紧实现排队的功能不需要。
一般都会持久化数据,进行客户流分析,统计柜员业务量。
0 请登录后投票
   发表时间:2009-07-17  
个人觉得具体实现不管怎么做都行,一句话:对队列做同步。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics