一个供telsales代理使用的多高级数据库,一个表包含要调用的潜在客户线索。每次向代理显示一条记录供其调用,在调用之后,代理使用从结果表中获取的编码调用结果更新记录。在这个表中,一些结果有一个回收时间,在此时间之后,记录应该显示给代理(任何代理)以再次调用。实际上,80%的呼叫都会导致这样的记录被回收。还可以检查以限制一天内的总通话次数、总通话天数和总通话次数。代理还可以指定在设置的日期和时间调用记录。
要说明的架构草稿
前景表
主键
{联系方式}
{xml字段以启用自定义字段}
上次通话结果
上次通话日期时间
总调用次数
今天的电话
记录使用标志
(我正在考虑让前端用prospect info updates、call outcome和agent更新这个表,然后一个触发器更新times call字段/call date并更新calls表。)
调用表
主键
FK到Prospect PK
呼叫结果
呼叫日期时间
打电话来的探员
(代理可能会更新潜在客户记录,这些更改不会被跟踪,但会存储呼叫和结果的记录)
结果表
结果代码(pk)
回收时间(分钟)
计划回调表
主键
FK到Prospect PK
日期时间
代理人
我的问题
选择下一个应调用的记录时,哪种方法最有效,它将缩放到最佳值?我已经决定在prospect表中存储最后一次调用的详细信息和一些计算的信息(调用次数等),因此不需要加入calls表。
a)如果每个数据库的记录请求都将呼叫结果回收时间添加到最后一个呼叫日期,然后筛选前1个(认为这将非常缓慢)
b)如果我创建另一个带有prospect pk的表,则prospect表中需要再次调用的每条记录的到期调用日期时间。可通过以下方式更新:
1)每10分钟运行一次的单独程序?回收时间改变的结果需要重新计算
2)在prospect表上的触发器中,该触发器在结果更新后运行。回收时间改变的结果需要重新计算
(如果结果的回收时间更改,则将更新此新表)
最佳答案
在这种情况下,我面临的问题是确保两个操作员不选择进行相同的调用。所以output子句可以提供帮助。
您可以创建一个计算下一次调用时间的函数,然后使用output子句将调用详细信息返回给运算符。
类似于:
UPDATE c SET NextCallTime = dbo.GetNextCallTime(CallID)
OUTPUT deleted.* --Which returns the copy of the row before the change is made
FROM
(SELECT TOP 1 * FROM Calls ORDER BY NextCallTime) c
;
我不喜欢支持标量函数,但在这种情况下它可以工作,因为您只调用一次。在函数中添加注释,以便非常清楚地表明它永远不会按ORDER BY子句或WHERE子句等调用…
使用output子句的好处是它返回正在更改的行,因此只能将它赋给单个运算符。