数据库中的历史记录

时间:2020-11-04 14:51:37

标签: database powerapps

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

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

2。万一我不得不使用那些旧记录,可以通过脚本或PowerApps之类的应用程序访问吗?

3。创建/管理该数据库会多么复杂?

4。Azure有这种解决方案吗?如果不是,也许还有其他一些云提供商(没有VM解决方案)?

我为什么需要那个? 我想为Company1创建一个解决方案(出于培训目的),在该解决方案中,员工将使用一些值输入Client1的数据,并将其发送给Company2,Company3和Company4,然后检查其中哪个值最好。价格或报价。相比之下,它将数据保存在数据库中,并每小时重复相同的过程。在一周结束时,它将生成报价最高的公司文件。我还想查看每个历史记录。

这仅用于培训,所以请告诉我是否有更好的数据库解决方案:) 谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

现在,当您插入新价格时,将具有历史记录和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
相关问题