基于关系型数据库的回溯数据查询方法及系统.pdf

上传人:zhu****69 文档编号:10113339 上传时间:2021-06-04 格式:PDF 页数:21 大小:912.20KB
收藏 版权申诉 举报 下载
基于关系型数据库的回溯数据查询方法及系统.pdf_第1页
第1页 / 共21页
基于关系型数据库的回溯数据查询方法及系统.pdf_第2页
第2页 / 共21页
基于关系型数据库的回溯数据查询方法及系统.pdf_第3页
第3页 / 共21页
文档描述:

《基于关系型数据库的回溯数据查询方法及系统.pdf》由会员分享,可在线阅读,更多相关《基于关系型数据库的回溯数据查询方法及系统.pdf(21页完成版)》请在专利查询网上搜索。

1、(19)中华人民共和国国家知识产权局 (12)发明专利申请 (10)申请公布号 (43)申请公布日 (21)申请号 202010229649.6 (22)申请日 2020.03.27 (71)申请人 谭凌 地址 510000 广东省广州市天河区水荫四 横路32号文化大院一栋 (72)发明人 谭凌 (74)专利代理机构 广州三环专利商标代理有限 公司 44202 代理人 郭浩辉麦小婵 (51)Int.Cl. G06F 16/2458(2019.01) G06F 16/22(2019.01) G06F 16/23(2019.01) G06F 16/2455(2019.01) G06F 16/28(。

2、2019.01) (54)发明名称 一种基于关系型数据库的回溯数据查询方 法及系统 (57)摘要 本发明公开了一种基于关系型数据库的回 溯数据查询方法, 可以使业务逻辑的程序开发人 员在开发编写业务程序时不需要因为支持 “回溯 查询” 这个需求, 而大量的额外的增加或者修改 业务代码, 例如在不需要支持 “回溯查询” 时只需 要在代码中执行一次更新元组语句, 那么在使用 本发明时支持 “回溯查询” 的情况下, 程序代码中 同样也只需要行一次一模一样更新元组语句, 没 有额外的业务逻辑出现, 使代码易于维护, 可读 性高, 开发更简单; 而由于支持 “回溯查询” 而产 生的额外的转换, 执行等工。

3、作都是由本发明涉及 的方法和系统自动完成的, 不需要大量改变业务 逻辑代码。 权利要求书2页 说明书16页 附图2页 CN 111460000 A 2020.07.28 CN 111460000 A 1.一种基于关系型数据库的回溯数据查询方法, 其特征在于, 包括: 在配置文件中确定约束方式、 确定支持回溯查询的表的名称、 设置这些表中代表起始 时间和终止时间的字段名、 确定NOW值的表达式、 获取当前时间的SQL表达式字符串, 得到支 持回溯查询配置文件; 接收原始新增元组语句, 当通过所述支持回溯查询配置文件判断所述原始新增元组语 句对应的表属于支持回溯查询的表时, 将所述原始新增元组语句。

4、将要新增的行中的起始时 间设置为事务执行时间, 以及将所述原始新增元组语句将要新增的行中的终止时间设置为 NOW值, 生成新的新增元组语句, 执行并提交所述新的新增元组语句; 接收原始删除元组语句, 当通过所述支持回溯查询配置文件判断所述原始删除元组语 句对应的表属于支持回溯查询的表时, 提取所述原始删除元组语句中的删除条件; 对同一 表建立更新语句, 对所有终止时间为NOW的元组,将所述原始删除元组语句中的删除条件作 为所述更新语句的更新条件, 并将所述更新语句中的终止时间字段设置为事务执行时间, 得到新的更新语句, 执行并提交所述新的更新语句; 接收原始更新元组语句, 当通过所述支持回溯查。

5、询配置文件判断所述原始更新元组语 句对应的表属于支持回溯查询的表时, 获取当前时刻T1, 根据原始更新元组语句生成三条 新语句; 在同一个事务中依次执行三条新语句并提交事务; 其中, 生成的三条新语句包括: 1、 对所有终止时间为NOW的元组,根据原始更新元组语句的更新条件, 生成复制元组语句, 将待更新所有元组进行复制, 将所有新复制出的元组的起始时间设置为T1, 终止时间设置 为NOW; 2、 根据原始更新元组语句, 生成第一新更新语句, 将所有被复制的元组的终止时间 设为T1; 3、 根据原始更新元组语句, 生成第二新更新语句, 在新复制出的元组上执行原始更 新元组语句所涉及的更新动作;。

6、 接收原始查询语句, 对所述原始查询语句中的嵌套语句进行递归拆分, 直至最内层的 查询语句为单一查询语句, 从最内层依次对单一查询语句进行处理, 将一个占位字符串替 代处理好的单一查询语句进行替换, 拼接到上一层的查询语句中, 依次递归直至最外层的 查询语句被处理完成, 然后依次将占位符替换为对应的处理好的单一查询语句, 生成得到 转换后的嵌套查询语句。 2.如权利要求1所述的基于关系型数据库的回溯数据查询方法, 其特征在于, 所述设置 起始时间字段和终止时间字段的步骤中, 包括: 将数据库中数据表中原本的唯一约束的字段或者字段组, 与设置的终止时间字段组成 组合唯一约束。 3.如权利要求2所。

7、述的基于关系型数据库的回溯数据查询方法, 其特征在于, 所述确定 NOW值的表达式的步骤中, 所述NOW值对所述组合唯一约束有效。 4.如权利要求1所述的基于关系型数据库的回溯数据查询方法, 其特征在于, 在所述执 行并提交所述新生成的语句之后, 还包括: 当判断发生异常或者错误时, 则回滚事务。 5.如权利要求1所述的基于关系型数据库的回溯数据查询方法, 其特征在于, 所述对单 一查询语句进行处理的步骤, 包括: 从原始查询语句中提取出全部表名和别名; 从原始查询语句中提取出查询条件, 并根据所述查询条件和所述表名或别名生成新的 权利要求书 1/2 页 2 CN 111460000 A 2 。

8、查询条件; 将新的查询条件替换原始查询语句中的查询条件, 生成新的查询语句。 6.如权利要求5所述的基于关系型数据库的回溯数据查询方法, 其特征在于, 所述查询 条件包括查询当前时刻和查询过去时刻。 7.一种基于关系型数据库的回溯数据查询系统, 其特征在于, 包括: 文件配置模块, 用于在配置文件中确定约束方式、 确定支持回溯查询的表的名称、 设置 这些表中代表起始时间和终止时间的字段名、 确定NOW值的表达式、 获取当前时间的SQL表 达式字符串, 得到支持回溯查询配置文件; 新增元组模块, 用于接收原始新增元组语句, 当通过所述支持回溯查询配置文件判断 所述原始新增元组语句对应的表属于支持。

9、回溯查询的表时, 将所述原始新增元组语句将要 新增的行中的的起始时间设置为事务执行时间, 以及将所述原始新增元组语句中将要新增 的行中的终止时间设置为NOW值, 生成新的新增元组语句, 执行并提交所述新的新增元组语 句; 删除元组模块, 用于接收原始删除元组语句, 当通过所述支持回溯查询配置文件判断 所述原始删除元组语句对应的表属于支持回溯查询的表时, 提取所述原始删除元组语句中 的删除条件; 对同一表建立更新语句, 对所有终止时间为NOW的元组,将所述原始删除元组 语句中的删除条件作为所述更新语句的更新条件, 并将所述更新语句中的终止时间字段设 置为事务执行时间, 得到新的更新语句, 执行并。

10、提交所述新的更新语句; 更新元组模块, 用于接收原始更新元组语句, 当通过所述支持回溯查询配置文件判断 所述原始更新元组语句对应的表属于支持回溯查询的表时, 接收原始更新元组语句, 当通 过所述支持回溯查询配置文件判断所述原始更新元组语句对应的表属于支持回溯查询的 表时, 获取当前时刻T1, 根据原始更新元组语句生成三条新语句; 在同一个事务中依次执行 三条新语句并提交事务; 其中, 生成的三条新语句包括: 1、 对所有终止时间为NOW的元组,根 据原始更新元组语句的更新条件, 生成复制元组语句, 将待更新所有元组进行复制, 将所有 新复制出的元组的起始时间设置为T1, 终止时间设置为NOW;。

11、 2、 根据原始更新元组语句, 生 成第一新更新语句, 将所有被复制的元组的终止时间设为T1; 3、 根据原始更新元组语句, 生 成第二新更新语句, 在新复制出的元组上执行原始更新元组语句所涉及的更新动作; 回溯查询模块, 用于接收原始查询语句, 对所述原始查询语句中的嵌套语句进行递归 拆分, 直至最内层的查询语句为单一查询语句, 从最内层依次对单一查询语句进行处理, 将 一个占位字符串替代处理好的单一查询语句进行替换, 拼接到上一层的查询语句中, 依次 递归直至最外层的查询语句被处理完成, 然后依次将占位符替换为对应的处理好的单一查 询语句, 生成得到转换后的嵌套查询语句。 8.一种计算机可。

12、读存储介质, 其特征在于, 所述计算机可读存储介质包括存储的计算 机程序; 其中, 所述计算机程序在运行时控制所述计算机可读存储介质所在的设备执行如 权利要求16任一项所述的基于关系型数据库的回溯数据查询方法。 9.一种终端设备, 其特征在于, 包括处理器、 存储器以及存储在所述存储器中且被配置 为由所述处理器执行的计算机程序, 所述处理器在执行所述计算机程序时实现如权利要求 16任一项所述的基于关系型数据库的回溯数据查询方法。 权利要求书 2/2 页 3 CN 111460000 A 3 一种基于关系型数据库的回溯数据查询方法及系统 技术领域 0001 本发明涉及数据处理技术领域, 尤其涉及。

13、一种基于关系型数据库的回溯数据查询 方法及系统。 背景技术 0002 在开发数据信息系统时, 几乎都要使用关系型数据库(例如MySQL, SQLServer等), 关系数据库存储的是当前最新的数据状态, 以往时刻的数据状态是不能查询到的。 而在很 多时候需要回溯查询以往的数据状态, 目前现有技术是在数据库中单独建立某些字段的日 志表, 当数据有更新是需要更新业务逻辑要用到的主表, 同时向对应字段的日志表中插入 记录, 记录某个字段在某个时刻从某某值更新为某某值。 当需要回溯查询时, 先查询主要 表, 同时要分别查询日志表, 将相关字段替换成过去某时刻的状态, 然后返回结果。 0003 可见, 。

14、上述传统的回溯查询方法做法复杂, 由于要满足 “支持回溯查询” 的需要, 原 本简单的程序代码将变得十分复杂: 1、 在 “写数据库” 时(增加, 删除, 更新等操作): 原本只 需要执行一次INSERT语句、 DELETE语句或者UPDATE语句。 但是为了支持 “回溯查询” 需要在 多个字段的日志表中插入数据如何改变的信息和变动的时间, 有多少字段就要在多少个对 应表中插入记录。 程序代码的复杂度剧增, 代码难以维护和调试。 2、 在 “读数据库” 时(查询 操作): 原本只需要执行SELECT语句。 但是为了支持 “回溯查询” 需要查询多个字段日志表, 拼接结果再返回结果。 当查询涉及多。

15、个原始数据表时, 程序的复杂度将进一步增加。 0004 因此, 目前市面上亟需一种新的回溯数据查询策略, 在程序开发人员无需进行额 外的代码编辑工作的情况下, 实现回溯数据查询, 使得代码易于维护, 可读性高, 令程序开 发更简单。 发明内容 0005 本发明提供了一种基于关系型数据库的回溯数据查询方法及系统, 以解决技术问 题, 从而, 进而实现 0006 为了解决上述技术问题, 本发明实施例提供了一种基于关系型数据库的回溯数据 查询方法, 包括: 0007 在数据库需要支持回溯查询的数据表中, 额外增加两个 “日期时间” 类型字段, 分 别代表某元组的 “起始时间” 和 “终止时间” 。 。

16、同时定义一个特殊值代表 “当前” 含义, 称其为 NOW值。 NOW值必须你能够填入 “起始时间” 和 “终止时间” 字段, 且不具有业务含义。 0008 在配置文件中确定约束方式、 确定支持回溯查询的表的名称、 设置这些表中代表 起始时间和终止时间的字段名、 确定NOW值的表达式、 获取当前时间的SQL表达式字符串, 得 到支持回溯查询配置文件; 0009 接收原始新增元组语句, 当通过所述支持回溯查询配置文件判断所述原始新增元 组语句对应的表属于支持回溯查询的表时, 将所述原始新增元组语句中要新增的行中的起 始时间设置为事务执行时间, 以及将所述原始新增元组语句中要新增的行中的终止时间设 。

17、说明书 1/16 页 4 CN 111460000 A 4 置为NOW值, 生成新的新增元组语句, 执行并提交所述新的新增元组语句; 0010 接收原始删除元组语句, 当通过所述支持回溯查询配置文件判断所述原始删除元 组语句中涉及的表属于支持回溯查询的表时, 提取所述原始删除元组语句中的删除条件; 对同一表建立更新语句, 对所有终止时间为NOW的元组,将所述原始删除元组语句中的删除 条件作为所述更新语句的更新条件, 并将所述更新语句中的终止时间字段值设置为事务执 行时间, 得到新的更新语句, 执行并提交所述新的更新语句; 0011 接收原始更新元组语句, 当通过所述支持回溯查询配置文件判断所述。

18、原始更新元 组语句对应的表属于支持回溯查询的表格时, 获取当前时刻T1, 根据原始更新元组语句生 成三条新语句; 在同一个事务中依次执行三条新语句并提交事务; 其中, 生成的三条新语句 包括: 1、 对所有终止时间为NOW的元组,根据原始更新元组语句的更新条件, 生成复制元组 语句, 将待更新所有元组进行复制, 将所有新复制出的元组的起始时间设置为T1, 终止时间 设置为NOW; 2、 根据原始更新元组语句, 生成第一新更新语句, 将所有被复制的元组的终止 时间设为T1; 3、 根据原始更新元组语句, 生成第二新更新语句, 在新复制出的元组上执行原 始更新元组语句所涉及的更新动作; 0012 。

19、接收原始查询语句, 对所述原始查询语句中的嵌套语句进行递归拆分, 直至最内 层的查询语句为单一查询语句, 从最内层依次对单一查询语句进行处理, 将一个占位字符 串替代处理好的单一查询语句进行替换, 拼接到上一层的查询语句中, 依次递归直至最外 层的查询语句被处理完成, 然后依次将占位符替换为对应的处理好的单一查询语句, 生成 得到转换后的嵌套查询语句。 0013 作为优选方案, 所述设置起始时间和终止时间的步骤中, 包括: 0014 将需要回溯查询的数据表中有唯一约束的字段或者字段组, 与设置的终止时间字 段组成组合唯一约束。 0015 作为优选方案, 所述确定NOW值的表达式的步骤中, 所述。

20、NOW值对所述组合唯一约 束有效。 0016 作为优选方案, 在所述执行并提交所述新生成的语句之后, 还包括: 0017 当判断发生异常或者错误时, 则回滚事务。 0018 作为优选方案, 所述对单一查询语句进行处理的步骤, 包括: 0019 从原始查询语句中提取出全部表名和别名; 0020 从原始查询语句中提取出查询条件, 并根据所述查询条件和所述别名生成新的查 询条件; 0021 将新的查询条件替换原始查询语句中的查询条件, 生成新的查询语句。 0022 作为优选方案, 所述查询条件包括查询当前时刻和查询过去时刻。 0023 作为优选方案, 所述将一个占位字符串替代处理好的单一查询语句进行。

21、替换的步 骤, 包括: 0024 将暂存入一个列表中的单一查询语句字符串片段依次拉出, 并依次替代相应的占 位符。 0025 本发明实施例还提供了一种基于关系型数据库的回溯数据查询系统, 包括: 0026 文件配置模块, 用于在配置文件中确定约束方式、 确定支持回溯查询的表格名称、 设置起始时间和终止时间、 确定NOW值的表达式、 获取当前时间的SQL表达式字符串, 得到支 说明书 2/16 页 5 CN 111460000 A 5 持回溯查询配置文件; 0027 新增元组模块, 用于接收原始新增元组语句, 当通过所述支持回溯查询配置文件 判断所述原始新增元组语句对应的表属于支持回溯查询的表时。

22、, 将所述原始新增元组语句 中要新增的行中的起始时间设置为事务执行时间, 以及将所述原始新增元组语句中要新增 的行中的终止时间设置为NOW值, 生成新的新增元组语句, 执行并提交所述新的新增元组语 句; 0028 删除元组模块, 用于接收原始删除元组语句, 当通过所述支持回溯查询配置文件 判断所述原始删除元组语句对应的表格属于支持回溯查询的表格时, 提取所述原始删除元 组语句中的删除条件; 对同一表建立更新语句, 对所有终止时间为NOW的元组,将所述原始 删除元组语句中的删除条件作为所述更新语句的更新条件, 并将所述更新语句中的终止时 间字段值设置为事务执行时间, 得到新的更新语句, 执行并提。

23、交所述新的更新语句; 0029 更新元组模块, 用于接收原始更新元组语句, 当通过所述支持回溯查询配置文件 判断所述原始更新元组语句对应的表属于支持回溯查询的表时, 获取当前时刻T1, 根据原 始更新元组语句生成三条新语句; 在同一个事务中依次执行三条新语句并提交事务; 其中, 生成的三条新语句包括: 1、 对所有终止时间为NOW的元组,根据原始更新元组语句的更新条 件, 生成复制元组语句, 将待更新所有元组进行复制, 将所有新复制出的元组的起始时间设 置为T1, 终止时间设置为NOW; 2、 根据原始更新元组语句, 生成第一新更新语句, 将所有被复 制的元组的终止时间设为T1; 3、 根据原。

24、始更新元组语句, 生成第二新更新语句, 在新复制出 的元组上执行原始更新元组语句所涉及的更新动作; 0030 回溯查询模块, 用于接收原始查询语句, 对所述原始查询语句中的嵌套语句进行 递归拆分, 直至最内层的查询语句为单一查询语句, 从最内层依次对单一查询语句进行处 理, 将一个占位字符串替代处理好的单一查询语句进行替换, 拼接到上一层的查询语句中, 依次递归直至最外层的查询语句被处理完成, 然后依次将占位符替换为对应的处理好的单 一查询语句, 生成得到转换后的嵌套查询语句。 0031 作为优选方案, 所述设置起始时间和终止时间的步骤中, 包括: 0032 将需要回溯查询的数据表中唯一约束的。

25、字段或者字段组, 与设置的终止时间字段 组成组合唯一约束。 0033 作为优选方案, 所述确定NOW值的表达式的步骤中, 所述NOW值对所述组合唯一约 束有效。 0034 作为优选方案, 在所述执行并提交所述新生成的语句之后, 还包括: 0035 当判断发生异常或者错误时, 则回滚事务。 0036 作为优选方案, 所述对单一查询语句进行处理的步骤, 包括: 0037 从原始查询语句中提取出全部表名和别名; 0038 从原始查询语句中提取出查询条件, 并根据所述查询条件和所述别名生成新的查 询条件; 0039 将新的查询条件替换原始查询语句中的查询条件, 生成新的查询语句。 0040 作为优选方。

26、案, 所述查询条件包括查询当前时刻和查询过去时刻。 0041 作为优选方案, 所述将一个占位字符串替代处理好的单一查询语句进行替换的步 骤, 包括: 说明书 3/16 页 6 CN 111460000 A 6 0042 将暂存入一个列表中的单一查询语句字符串片段依次拉出, 并依次替代相应的占 位符。 0043 本发明实施例还提供了一种计算机可读存储介质, 所述计算机可读存储介质包括 存储的计算机程序; 其中, 所述计算机程序在运行时控制所述计算机可读存储介质所在的 设备执行如上述任一项所述的基于关系型数据库的回溯数据查询方法。 0044 本发明实施例还提供了一种终端设备, 包括处理器、 存储器。

27、以及存储在所述存储 器中且被配置为由所述处理器执行的计算机程序, 所述处理器在执行所述计算机程序时实 现如上述任一项所述的基于关系型数据库的回溯数据查询方法。 0045 相比于现有技术, 本发明实施例具有如下有益效果: 0046 本发明技术方案可以使业务逻辑的程序开发人员在开发编写业务程序时不需要 因为支持 “回溯查询” 这个需求, 而大量的额外的增加或者修改业务代码, 例如在不需要支 持 “回溯查询” 时只需要在代码中执行一次更新元组语句, 那么在使用本发明时支持 “回溯 查询” 的情况下, 程序代码中同样也只需要行一次一模一样更新元组语句, 没有额外的业务 逻辑出现, 使代码易于维护, 可。

28、读性高, 开发更简单; 而由于支持 “回溯查询” 而产生的额外 的转换, 执行等工作都是由本发明涉及的方法和系统自动完成的, 不需要大量改变业务逻 辑代码。 附图说明 0047 图1: 为本发明实施例中的字符串拆分示例图一; 0048 图2: 为本发明实施例中的字符串拆分示例图二。 具体实施方式 0049 下面将结合本发明实施例中的附图, 对本发明实施例中的技术方案进行清楚、 完 整地描述, 显然, 所描述的实施例仅仅是本发明一部分实施例, 而不是全部的实施例。 基于 本发明中的实施例, 本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他 实施例, 都属于本发明保护的范围。 0050。

29、 请参照图1和图2, 本发明优选实施例提供了一种基于关系型数据库的回溯数据查 询方法, 包括: 0051 S1, 在数据库需要支持回溯查询的数据表中, 额外增加两个 “日期时间” 类型字段, 分别代表某元组的 “起始时间” 和 “终止时间” 。 同时定义一个特殊值代表 “当前” 含义, 称其 为NOW值。 NOW值必须你能够填入 “起始时间” 和 “终止时间” 字段, 且不具有业务含义。 在配置 文件中确定约束方式、 确定支持回溯查询的数据表名称、 设置这些表中表示起始时间和终 止时间的字段名、 确定NOW值的表达式、 获取当前时间的SQL表达式字符串, 得到支持回溯查 询配置文件。 0052。

30、 具体地, 本技术方案在关系库中建的表必须符合一定的规则。 如果不需要支持回 溯查询的表, 按照业务要求正常建表就行, 不需要额外的改变。 而任一个需要支持回溯查询 的数据表, 除了原有的业务相关字段以外还需要额外加入两个较高精度的 “日期时间” 类型 字段, 它们分别是ST_START代表 “起始时间” 和ST_STOP代表 “终止时间” (实际使用时, 具体 字段命名不一定是ST_START和ST_STOP, 可自行确定, 只要不和其他业务字段名字冲突即 说明书 4/16 页 7 CN 111460000 A 7 可。 现在下面文件中皆使用ST_START和ST_STOP两个字段名表示 “。

31、起始时间” 和 “终止时 间” )。 ST_START和ST_STOP两个字段的类型需要使用各大数据库高精度 “日期时间” 类型, 需 能表达年月日和某天中的具体时刻(例如MySQL的datetime(3), 再例如SQLServer数据库中 的datetime2(3)等等)。 精度方面建议精确到0.01秒或更高, 例如MySQL数据库中datetime (3)精度达到毫秒, 再例如SQLServer数据库中的datetime2(4)精度也达到0.1毫秒。 0053 需要支持本发明对时间类型和精度不做具体限制, 需要根据具体使用的关系数据 库来确定, 因不同的数据库中时间类型的名字、 精度、 。

32、表达式可能略有不同。 时间精度也根 据实际场景决定, 因为时间精度决定了同一逻辑记录修改的最小间隔。 例如: 假设采用的时 间类型精度为1秒的情况下, 如果间隔0.5秒连续对这条记录做修改, 那么这样的修改将不 被允许。 因此需要使用更高的时间精度。 因此时间精度也是根据使用场景确定的, 如果使用 场景修改频率很低那可以用1秒为精度, 如果较高就要用高精度, 一般情况下默认使用毫秒 或者以上的时间精度(例如MySQL数据库中datetime(3), 如SQLServer数据库中的 datetime2(3)等等)。 0054 在采用关系数据库约束方式时, 所有在逻辑上有唯一约束的字段, 实际数据。

33、表中 这些字段中的值是可以重复的, 因在代表不同时间段的元组间, 这些字段的值是可重复的。 因此建表时需要做一些改变, 改变方法为: 将所有原先有唯一约束的字段或者字段组都和 额外添加的ST_STOP “终止时间” 字段组成组合唯一约束(多字段组合唯一性约束是各大关 系数据库都支持的)。 例如: 一个表t1中num字段逻辑上有唯一约束, 那么在支持回溯查询并 采用关系数据库约束方式时, num和ST_STOP要组成组合唯一约束, 即关系数据表中任两条 数据的这两个字段不可同时相等。 如果表中本身就含有组合唯一约束的情况下, 也是类似。 例如: 一个表t2中a,b,c三个字段逻辑上有组合唯一约束。

34、, 两条数据这三个字段不能同事相 等。 此时如果在在支持回溯查询并采用关系数据库约束方式时就需要把这个组合唯一约束 把ST_STOP也加入进去, 即在表中a,b,c和ST_STOP四个字段逻辑上有组合唯一约束。 0055 关于NOW值的选择和表达, NOW值是可以被填入ST_START “起始时间” 和ST_STOP “终 止时间” 字段的一个值, 代表 “当前” 的含义,“当前” 是一个每分每秒都在向前流逝的时刻。 应用没有具体业务含义的一个特殊值来表达NOW。 NOW值得选择原则为: 没有具体业务含义 的特殊值, 同时必须这个值要对组合唯一约束有效! 选择确定后把这个值的SQL具体表达式 。

35、记录在本发明的配置文件中。 例如: 一般建议使用 “9999-12-31 00:00:00.000” (datetime 类型的最大日期下的一个时刻值)值代表NOW, 那就把 “9999-12-31 00:00:00.000” 这个字 符串表达式记在系统配置文件中。 在使用SQLServes数据库时也可以使用Null值代表NOW。 0056 需要特别说明 “对组合唯一约束有效” 这个条件, 就是说这个值是受 “组合唯一约 束” 约束的。 如果一个特殊值不被约束, 那它就不能用来代表NOW。 举例: 在MySQL、 Oracle等 数据库中, null这个值是不受组合唯一约束约束的, 其他值不允。

36、许被重复, 但null值被允许 重复(大多数数据库是这样的)。 因此在使用这类数据库时, 不能用null值代表NOW, 此时可 以设定用 “9999-12-3100:00:00.000” 这个值代表NOW。 因为这个值会被约束同时, 它也足够 特殊。 选择确定后把 “9999-12-31 00:00:00.000” (注意最后的.000表示精度是毫秒)这 个字符串写进配置文件中。 举例2: 在SQLServer数据库中, null这个值是受组合唯一约束约 束的, 因此可以把null来代表NOW。 选择确定后把 “null” 这个字符串写进配置文件中。 0057 在定义了一系列关键信息后需要在配。

37、置文件中将它们登记下来, 本系统运作会在 说明书 5/16 页 8 CN 111460000 A 8 启动时会读取这些配置文件中的信息, 并存储在系统缓存中。 系统在运行时会频繁读取这 些初始的配置信息。 会根据配置信息和相关的方法执行操作。 配置文件具体格式不在此规 定(发明人的实现是使用XML文件)。 只在此描述配置文件的内容。 配置文件内容和要求如 下: 0058 (1)数据库中那些表需要支持回溯查询? 列出所有需要支持的表的全表名。 0059 (2)起始时间列名: 自定义列名, 不能与原有业务字段重名, 建议名为 “ST_Start” 。 0060 (3)终止时间列名: 自定义列名, 。

38、不能与原有业务字段重名, 建议名为 “ST_Stop” 。 0061 (4)NOW值的表达方式: 根据所使用的数据库自定义, 首先要保证这个值能后写入 “终止时间” ST_Stop的列中, 使用ST_Stop字段可以容纳的没有其他业务逻辑含义特殊值, 用于拼接SQL语句。 例如使用null值, 就登记null。 如果使用特殊时间表示NOW, 就登记这 个时间的常量SQL表达式, 其精度要和建表时ST_Start和ST_Stop字段精度匹配。 例如 “ 9999-12-31 00:00:00.000 ” 。 (注意如果使用null, SQL的相关语法是 “字段名IS NULL” 或者 “字段名I。

39、S NOT NULL” )。 0062 (5)获取当前时间的SQL表达式字符串: 用于自动生成新SQL语句, 根据所使用的关 系数据库以及版本而定, 即这个数据库获取当前时间的函数表达式(时间精度需要与ST_ Start和ST_Stop字段精度匹配)。 例如使用SQLServer时, 登记内容为 “getdate()” , 而使用 MySQL数据库时登记内容为则为 “now(3)” (就是获取当前时间, 精度为0.001秒的意思)。 0063 S2, 接收原始新增元组语句, 当通过所述支持回溯查询配置文件判断所述原始新 增元组语句对应的表属于支持回溯查询的表时, 将所述原始新增元组语句中要新增。

40、的行中 的起始时间设置为事务执行时间, 以及将所述原始新增元组语句中要新增的行中的终止时 间设置为NOW值, 生成新的新增元组语句, 执行并提交所述新的新增元组语句。 0064 新增元组时, 使用者输入原始Insert语句, 本系统先到配置中查找涉及的表需不 需要支持回溯查询, 如果不需要直接执行原Insert语句。 如果需要支持则向关系库中插入 一条新记录,“起始时间” 字段值为事务执行时的时间,“终止时间” 字段值设为 “NOW值” , NOW 值得表达从配置中找并填入。 具体方法如下: 0065 (1)从系统配置记录中找到待插入记录的表是否需要支持回溯查询, 如果不需则 要直接执行原始输。

41、入的INSERT语句完毕, 如果需要入步骤(2)。 0066 (2)插入待插入的元组数据, 各业务字段对应插入, 同时新增元组时要将该元组的 “起始时间” 设为事务执行时间, 并将该元组的 “终止时间” 设为 “NOW值” 。 即根据原始的 Insert语句, 自动在Insert语句中增加两个字段, 分别是 “起始时间” 和 “终止时间” , 从配置 文件中查找这两个字段的字段名, 加入到原始Insert语句中的列列表。 同理在插入的值列 表中加入两个值得表达式, 从配置文件中查找 “获取当前时间的SQL表达式” 和NOW值的表达 式, 分别加入到值列表中与 “起始时间” 和 “终止时间” 对。

42、应的位置中, 生成新的Insert语句, 执行并提交。 0067 如果出现唯一约束冲突, 数据库会返回错误并提示执行失败, 数据库回滚(由具体 关系数据库自带约束来检测冲突)。 举例: 使用SQLServer作为关系数据库, 在如下表1(表名 为table1)中插入一条数据: 工号 “009” 的 “王五” 的工资为 “8500” 。 配置中: 用Null值表示 NOW, 获取时间表达式为 “getdate()” , 起始时间列名定就定为 “起始时间” , 终止时间列名 就叫 “终止时间” 。 说明书 6/16 页 9 CN 111460000 A 9 0068 工号姓名工资起始时间终止时间 。

43、007张三70002015/1/1 9:002016/1/1 8:00 007张三100002016/1/2 8:002018/1/1 8:00 008李四90002014/1/1 9:002016/1/1 8:00 008李四120002017/1/2 9:00null 0069 表1, 示例表格一 0070 使用者原始输入的INSERT语句如下(由于 “起始时间” 和 “终止时间” 是由系统读写 的, 因此使用者输入的SQL语句可以不用管它们): INSERT INTO table1(工号, 姓名, 工资) VALUES(009,王五,8500)。 0071 系统根据原始INSERT语句和。

44、配置文件自动添加了起始时间和终止时间两个字段 和插入值, 自动生成以下新的INSERT语句: INSERT INTO table1(工号, 姓名, 工资, 起始时 间, 终止时间)VALUES(009,王五,8500,getdate(),null)。 0072 其中的getdate()是SQLServer关系数据库中SQL用于获取当前时间的函数,这个 函数的表达字符串从系统配置中读取。 null也是在配置文件中定义的表达NOW含义的字符 串表达式。 执行以上语句并提交后, 数据表的状态如下表2所示(假设插入时的时间是2019/ 12/25 9:00): 0073 0074 表2, 示例表格二 。

45、0075 S3, 接收原始删除元组语句, 当通过所述支持回溯查询配置文件判断所述原始删 除元组语句对应的表属于支持回溯查询的表时, 提取所述原始删除元组语句中的删除条 件; 对同一表建立更新语句, 对所有终止时间为NOW的元组,将所述原始删除元组语句中的 删除条件作为所述更新语句的更新条件, 并将所述更新语句中的终止时间字段值设置为事 务执行时间, 得到新的更新语句, 执行并提交所述新的更新语句。 0076 删除元组, 在支持回溯查询的情况下, 并非真正的物理删除。 而是在逻辑上删除, 让某条元组的有效时间结束即可。 因此删除元组操作在关系数据库中实际就是更新操作。 具体方法是: 在关系数据库。

46、中, 在某个表中将所有符合逻辑删除条件并且对应终止时间值 为NOW值的元组(可能不止一条)的 “终止时间” 设为事务执行时间, 而其他字段的值不作任 何改动。 0077 使用者输入原始DELETE语句, 本系统先到配置中查找涉及的表需不需要支持回溯 查询, 如果不需要则直接执行原DELETE语句。 如果需要支持回溯查询, 提取出DELETE语句的 WHERE子句(删除的条件)。 生成一条该表的UPDATE语句, 其中SET子句只更改 “终止时间” (字 段名从系统配置读取),“终止时间” 更改值为事务执行时间(获取当前时间表达式从系统配 说明书 7/16 页 10 CN 111460000 A。

47、 10 置中读取), 然后UPDATE语句的WHERE子句条件为:“原DELETE语句的WHERE子句条件” 且 “终 止时间为now值” (now的表达式从系统配置中读取)。 新的UPDATE语句拼接生成完成。 如果配 置中用Null值表示NOW, 则SQL语法为 “终结时IS NULL” , 如果配置中用其他特殊值表示NOW, 则SQL语法为 “终止时间 XXXXXX ” 。 举例: 使用SQLServer作为关系数据库, 在如下表3(表 名为table1)中删除: 工号 “008” 的元组。 假设系统配置中: 用Null值表示NOW, 获取时间表 达式为 “getdate()” , 起始。

48、时间列名定就定为 “起始时间” , 终止时间列名就叫 “终止时间” 。 0078 工号姓名工资起始时间终止时间 007张三70002015/1/1 9:002016/1/1 8:00 007张三100002016/1/2 8:002018/1/1 8:00 008李四90002014/1/1 9:002016/1/1 8:00 008李四120002017/1/2 9:00null 0079 表3, 示例表格三 0080 使用者原始输入的DELETE语句如下: DELETE FROM table1 WHERE工号 008 。 0081 本系统根据原始DELETE语句自动生成以下新的UPDATE。

49、语句: UPDATE table1 SET 终止时间getdate()WHERE工号 008 AND终止时间IS NULL。 0082 表名table1不变, SET子句中只更新 “终止时间” 这一个字段, 设置值为事务执行时 间, getdate()是SQLServer关系数据库中SQL用于获取当前时间的函数,这个函数的表达 字符串从系统配置中读取。 WHERE子句中的条件为 “原始DELETE语句的WHERE子句条件 “AND “终止时间为null” 。 null是在系统配置中定义的用来表达NOW含义的字符串表达式, AND在 SQL语句中表示 “逻辑且” 的含义。 执行新生成的UPDAT。

50、E语句并提交后, 数据表的状态如下表 4所示(假设逻辑删除时间是2019/12/25 9:00): 0083 0084 表4, 示例表格四 0085 S4, 接收原始更新元组语句, 当通过所述支持回溯查询配置文件判断所述原始更 新元组语句对应的表属于支持回溯查询的表时, 获取当时时刻T1, 根据原始更新元组语句 生成三条新语句: 1、 对所有终止时间为NOW的元组,根据原始更新语句的更新条件, 生成复 制元组语句, 将待更新所有元组复制, 但所有新复制出的元组的起始时间为T1, 终止时间设 置为NOW。 2、 根据原始更新语句, 生成新的更新语句, 将所有被复制的元组的终止时间设为 T1。 3。

展开阅读全文
内容关键字: 基于 关系 数据库 回溯 数据 查询 方法 系统
关于本文
本文标题:基于关系型数据库的回溯数据查询方法及系统.pdf
链接地址:https://www.zhuanlichaxun.net/pdf/10113339.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1