我将尝试笼统地回答与特定数据库技术无关的问题(我是 MS SQL Server DWH 人员)。
为了解决您的具体问题...
“1.我的数据可以像约会一样更改,以后可以将其标记为已取消,我读到在星型模式中更改数据不是一个好主意。如果不是更好的方法是什么。”
DWHes Fact 表和 Dimension 表中有两种主要的表类型。
在星型模式中更改事实或维度数据是完全有效的。从 DWH 中删除维度记录不是一种好的做法。
您需要选择类型 1(覆盖历史记录)或类型 2(保留历史记录)对数据的更改(渐变维度)。
我不确定您是否建议在此处删除事实记录,但更好的方法是在每个事实记录上设置一个标志以指示约会的状态(已预订/已使用/已取消/等)以及患者是否取消了他们的约会然后将事实记录从状态=预订更改为状态=取消;实际上并未删除事实记录。通过这种方式,您还可以跟踪取消约会的数量。
为了增加复杂性,您还可以让事实表保存历史记录,以便您可以显示“as at”位置,即能够显示数据库在特定时间点的状态。这会大大增加数据库的大小,具体取决于发生的更改数量。
“2.当数据添加到我的主数据库时,我的事实表中的数据将由后台任务插入。不断地将数据插入到事实表中是一个问题,因为几乎可以随时在应用程序中看到转发。”
您需要围绕更新频率/拥有最新数据的重要性进行讨论。通常(我相信您是)DWH 不是 OLTP 系统,因此并不意味着不断更新新数据并能够报告最新数据。如果你真的想要,你需要一个 OLTP 系统。
也就是说,我们已经实现了每 20 分钟更新一次的 DWH。这有一个 SQL DWH,顶部有一个 OLAP 多维数据集。我不确定 mysql 是否有 OLAP 技术,但我确信有一些可用的开源版本。OLAP 有几种风格(MOLAP/ROLAP/HOLAP),它们对性能/数据货币有不同的关注。
您通常希望将 DWH 本身与报告数据库层分开,尤其是在有很多用户的情况下。
“3.我打算在 mysql 中实现它,如果有人能指出一些与这种结构的 mysql 性能相关的帖子,那就太好了。这也是实现这种模式 Innodb 或 Myisam 的更好引擎”
我将不得不传递这个问题。我曾经对 innoDB 和 MyISAM 有所了解,但我使用这项技术已经有 8 年了。
一本关于 Star Schema DWH 设计的非常好的书是Ralph Kimball 在 DWH Design Book 上的