数据库中的历史记录

Historical records in Database

我对数据库中的历史记录有疑问。我听说可以在同一个 Table 中存储记录的历史数据(不是两个有关系的表)。我不确定,如果这真的有效甚至存在,所以 ...

1.Is 可能吗?哪个数据库可以做到这一点?

2.In 案例,我必须使用那些旧记录,是否可以通过脚本或应用程序(如 PowerApps)访问它?

3.How create/manage 那个数据库会很复杂吗?

4.DoesAzure有那种解决方案吗?如果没有,也许是其他一些云提供商(没有 VM 解决方案)?

为什么我需要它? 我想为 Company1 创建一个解决方案(用于培训目的),员工将输入具有某些值的 Client1 的数据,并将它们发送到 Company2、Company3 和 Company4,然后检查其中一个最好的,例如。价格或报价。它将把数据保存在数据库中,并每小时重复相同的过程。在周末,它会生成具有最佳报价的公司文件。我也想看看每一个历史记录

这只是为了训练,如果有更好的数据库解决方案请告诉我:) 谢谢!

如果我对你的问题的理解正确,这实际上在任何数据库中都非常简单。 “历史”数据由“寿命”(不是它的技术名称)标识。这将转化为“出生”和“死亡”记录值或“开始”和“结束”日期时间列。

以 Azure SQL 为例,使用开始和结束日期时间字段创建 table:

create table company_prices (
company_name nvarchar(55),
product_name nvarchar(55),
price money,
begin_timestamp datetime,
end_timestamp datetime )

第一次插入记录时,请为开始日期时间字段使用日期值并将结束日期时间字段保留为空:

insert into company_prices 
select 'Company A', 'Widget 1', 13.57, getdate(), NULL
union
select 'Company B', 'Widget 2', 24.68, getdate(), NULL
union
select 'Company C', 'Widget 3', 3.69, getdate(), NULL

现在您有三个“活动”记录。它们处于活动状态,因为它们没有分配结束日期时间。

下次您想收集价格时,通过在插入任何新记录之前分配结束日期时间值来更新以前或历史记录。

update company_prices 
set end_timestamp = getdate() 
where company_name = 'Company A' 
and product_name = 'Widget 1' 
and end_timestamp is null

现在,当您插入新价格时,您将拥有一个历史记录和一个 current/active 公司 A 小部件 1 的记录。

company_name    product_name    price   begin_timestamp         end_timestamp
Company A       Widget 1        13.57   2020-11-05 03:19:11.027 2020-11-05 04:19:11.030
Company A       Widget 1        13.95   2020-11-05 04:19:11.030 NULL
Company B       Widget 2        24.68   2020-11-05 03:19:11.027 NULL
Company C       Widget 3         3.69   2020-11-05 03:19:11.027 NULL