问题标签 [temporal-tables]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - 时态表可以对插入进行历史记录吗?
我创建了以下临时表
现在我可以插入、更新和删除值。
但是这些值只会在更新或删除时被历史化。
有没有办法历史化插入语句?
我想避免为此编写触发器,如果可能的
话......将数据放在两个表中是非常不利的,因为我需要先创建一个联合,然后错过之后创建的任何字段,或者我如果我使用 SELECT * 并创建联合视图,则可能有垃圾列,如果列顺序被更改,而且新列也会丢失。
嗯,那些临时表似乎真的很愚蠢(制作)......
显然,即使数据没有变化,它们也会记录每一个潜在的变化。
所以我可以这样做:
并且条目将在插入后迅速被历史化。
另一方面,这很好,从那时起我就不必手动将表模式与历史表模式同步。
sql - 在 Oracle SQL 中查询时态表的性能问题
您能否分享一些关于如何优化我在 Oracle (11G) 数据库中的查询的信息?
在我的数据库中,我有 10 个临时表(TemporalTable_1 到 TemporalTable_10),其中的架构类似于以下内容:
每个表都有以下两个索引和...
...查看特定日期的结果
TemporalTable_2 到 TemporalTable_10 也具有与 TemporalTable_1 相似的索引和视图。
现在,我创建了一个视图,将截至 2020 年 7 月 7 日的所有时态表连接在一起。
我发现视图的性能很糟糕。而且我只是不知道如何提高查询的性能。“解释计划”的结果表明 Oracle 不会使用这些索引。对于视图“All_Temporals_20200707”
我还修改了正在查看的查询如下
但是,它没有区别。这意味着我创建的所有索引都没有被使用。
有人可以在这里与我分享一些关于我应该如何解决性能问题的信息吗?
提前致谢!
只是在这里提供一些背景知识,这实际上是尝试在日常基础中创建整个数据库的快照以用于报告服务。“All_Temporals_20200707”实际上是对现实世界中报告之一的查询。这也意味着 Customer_Id 实际上是生产数据库中某些表的主键。
sql-server - 查询时态表并合并行
假设我有一个临时表ProductDetails
,使用下面的查询返回一些历史数据。
这意味着在 2020 年 7 月 6 日 05:00:00 创建 ID = 8 的产品时,添加了 2 个属性,然后将其中一个记录编辑为从“蓝色”更改为“绿色”。请注意,保存时第二行的 SysStartTime 有 1 秒的差异。
现在我需要编写一个查询以获得以下结果。基本上,它是发生变化时不同时间快照中的属性值。时间已经到了分钟。
我怎样才能做到这一点?每个产品可能有不同的属性,但查询一次只针对一个产品。
sql - 具有时间有效性的 Oracle 表的主键违规
您能否分享一些关于 Oracle 中具有临时有效性的表的主键操作的信息?
我创建了一个具有以下架构的表
我有来自另一个表“OtherTable”的以下记录,我需要复制到 TemporalTable_1
以下是我的脚本:
ORA-00001: 违反了唯一约束 (TemporalTable_1)
在执行插入语句之前,表是空白的。所以我的问题是为什么我不允许将该行复制到 TemporalTable_1 中,即使这些行具有不同的 valid_period。
是不是因为Oracle实际上并不关心主键上的有效期列?
提前致谢!
oracle - 在“In”运算符中使用子查询的 Oracle 性能问题
我有两个查询看起来很接近,但 Oracle 的性能却大不相同。
查询 A
查询 B
CriteriaTable 有 800 行,但都属于客户 ID 'A0000001' 和 'A000002'。这意味着子查询:“select distinct CustomerID from CriteriaTable”也只返回与查询 A 中手动输入的相同的两个元素('A0000001'、'A000002')
以下是FinalView1下的查询
Table1_20200716、Table2_20200716、Table3_20200716、Table4_20200716、Table5_20200716、Table6_20200716 是具有时间有效性特征的对应表的视图。例如
Table1_20200716下的查询创建或替换视图Table1_20200716为
但是表“First_Order”只是一个普通表
以下是两个查询的性能(根据解释计划):
查询一:
基数:102 成本:204
总运行时间:最长 5 秒
查询 B:
基数:27921981
费用:14846
总运行时间:20 分钟直到用户取消
所有表都使用那些用于连接 FinalView1 中其他表的列进行索引。根据说明计划,除了FirstOrder 表之外,它们都已被使用。
查询 A 使用 FirstOrder 表上的唯一索引,而查询 B 执行完整扫描。
对于查询 B,我期望 Oracle 会在执行主查询之前先查询子查询将结果放入 in 运算符,因此对性能的影响应该很小。
提前致谢!
mariadb - MariaDB - 将历史数据插入系统版本(时间)表
我在 MariaDB 中有一些表,我一直在使用单独的“更改日志”表来跟踪更改,该表在每次更新记录时都会更新。然而,我最近了解了 MariaDB 中的时间数据表,我想切换到该方法,因为它是一种更优雅的跟踪更改的方法。但是,我想知道是否有办法将我的“更改日志”表转移到新的系统版本表。
所以我希望我可以以某种方式插入新行,为表指定值,并指定 row_end 和 row_start 列,并且不触发表创建另一个历史行......这可能吗?我试着做一个“插入(id,row_start,row_end等)值(x,y,z)”,但这会导致未知列“row_start”错误。
sql - DATA_CONSISTENCY_CHECK 在我的表中打开。但是临时表仍然插入另一行以进行相同的数据更新。如何在 T-SQL 中进行限制?
DATA_CONSISTENCY_CHECK 在我的表中打开。我正在尝试检查数据一致性以进行审计。当我在主表中更新相同的值时,临时表会保留同一行的历史记录,这导致难以跟踪版本更改。我使用的是 MSSQL 服务器。
sql-server - 不根据 HISTORY_RETENTION_PERIOD 政策删除过期数据
环境:在 Windows Server 2016 Standard 上运行的 SQL Server 2017 Enterprise
测试用例
创建 2 个相同的时态表(仅按名称不同),其中 1 个表已HISTORY_RETENTION_PERIOD
设置为 1 天。另一个表设置为INFINITE
。
代码:
在每个表中插入 1 条记录
创建一个 SQL Server Agent Job 来修改每个表中的记录,让 Job 运行 3 天。
在第 3 天,验证保留期为 1 天的表在关联的历史记录表中清除了第一天的数据,并且第二个历史记录表仍然包含第一天的数据。
更改第二张表以将保留期设置为 1 天
代码:
预期:数据将从第二个历史表中以与第一个时态表相同的方式清除。
实际:第二个历史表中的老化数据不会按保留策略集删除。
这是预期的行为,还是我错过了清除第二个时态表中数据的步骤。
sql - 在 DB2 时态表中将相同的行与相邻的 business_time 周期组合起来
我有一个business_time
PERIOD
如下所示的临时 DB2 表:
我想修改表格并像上面那样组合行,其中所有值都相同并且 business_time 时间段相邻。结果应如下所示:
解决方案还必须考虑数据中可能存在不相邻的不应合并的周期。性能不是问题,因为这将是一个每年只运行几次的批处理作业。
sql-server - 临时表 SYSTEM_TIME 范围不工作
我有一个时态表定义为:
当我尝试进行这样的查询时:
我似乎也得到了不在范围内的行。例如,
2020-07-22
不在范围内,但为什么会出现?