在星型模式中设置分辨率的时间维度

Aji*_*ity 3 database-design data-warehouse star-schema

我一直在阅读一些有关 OLAP 处理的体系结构类型的文章,特别是星型模式概念。我目前正在建立一个数据库进行测试。

我的情况

我有 750 个传感器,每个传感器每分钟都会将数据发布到 SQL 数据库。目前,我的方法是在值发生变化发布。进一步思考这一点让我想知道它是否会在确定是否存在数据丢失与未更改的值时造成问题,并使我重新考虑预定的发布。

插入传感器值的软件会以 格式发布时间戳2020-01-23 13:48:52。除此之外,还发布了传感器名称和传感器值。因此,如果算上主键,我的事实表中有 4 列。

我知道我需要对我的数据进行一些中间处理(可能是按计划处理的表,以使其符合架构,然后将其删除),但现在我正在尝试保持这种高级别并一次解决一个问题。

这是我目前的设想,但考虑到我需要的分辨率,我不知道如何处理时间维度。

星型架构模型

我的问题

目前,我的方法是发布值是否发生变化。进一步思考这一点让我想知道它是否会在确定是否存在数据丢失与未更改的值时造成问题,并使我重新考虑预定的发帖。

这是识别数据丢失的合理担忧还是有其他方法来解决这个问题?

考虑到我所需的分辨率,样本时间维度会是什么样子?

RAD*_*ADO 5

如果我正确理解您的情况,您正在记录代表某个时间点的某些系统状态的值。换句话说,您正在及时捕获系统的快照。在星型模式中,您应该使用“定期快照事实表”。此类事实表捕获值,无论它们是否已更改,因为它们的粒度是日期/时间单位,而不是事务。

时间维度可以通过多种方式建模。我会做以下事情:

创建维度“日期”来处理日历日期。谷物:一个历日。跨度:从您拥有数据之日起,直到今天(包括今天)。

创建维度“时间”来处理一天中的时间。谷物:一分钟。跨度:24 小时(因此该表中的总记录为 60 分钟 * 24 小时)。

将日期和时间键添加到事实表中。

我还将时间戳保留为事实表中的退化维度,以便在需要时可以访问秒数。