我需要在 Oracle 中设计表和记录的建议,以处理业务流程、状态和状态之间的报告时间。
我们有一个交易表,记录序列号记录 ID、文档 ID、日期和时间以及状态。 状态反映文档在审批流程中的位置,反映需要对文档完成的任务。 最多有 40 种状态,显示谁需要批准以及正在完成的任务。 因此,有一个文档标题或父记录,以及多个状态记录作为子记录。
挑战在于分析瓶颈在哪里,哪些任务花费的时间最长等。
从业务 pov 中,任务接收文档,我们有发生这种情况的日期和时间。 我们没有当前任务的发布或完成日期和时间。 我们所拥有的只是下一个任务的开始日期和时间。 请注意,一个文档一次只能具有一种状态。
出于我不会深入探讨的原因,我们不能使用 ETL 为状态创建结束日期和时间,尽管我认为这是解决方案。
部分挑战在于状态不是完全连续的或具有固定顺序。 某些状态可以启动、停止,并在流程的稍后重新启动。
我想报告的是每个状态记录每周或每月花费的时间,时间日期时间结束减去日期时间开始。 任何人都可以建议一个功能或其他方法来实现这一目标吗?
我不需要特定的代码。 我可以在伪代码中使用一些示例,或者只是以概述形式来解决此问题。 然后我可以弄清楚代码。
您可以在事务表上插入后和更新后使用触发器来记录LOG_TABLE每次更改:ID事务,最后状态,新状态,谁批准,更改日期时间(可能使用TiMESTAMP数据类型是小数秒护理),终端,会话ID,用户名。
对于插入:您需要定义一种">插入状态"类型,与其他 40 种状态不同。例如,状态为数字类型,"插入状态"可以是"-1"(减一),因此最后一个状态为">-1",新状态是事务表上插入记录的状态。
使用此LOG_TABLE您可以开发一个具有功能来计算更改状态之间的时间,显示所有更改,播放上次更改等功能的包。