要解决的问题: 我是数据库新手,我试图找出在表中存储更改的最佳方法,即某些状态的每日快照:例如。“hotel_room_rentals”表(有 20 列 - 每列都可以更改)。我希望能够为选定的日期生成该表(例如,生产变化中的数据,所以我必须将其存储在其他地方),或者对其进行一些其他转换(例如,一段时间内租用的平均天数)
我的理论示例 - 详细: 假设我为一家酒店创建了一个数据库。在生产系统中,我有一个表格,显示酒店所有 10 000 间客房的信息。这是每日快照 - 假设该表每天更新一次。
房间的某些属性经常变化:例如 is_rented;customer_number,rate_usd。一些属性不会经常更改:例如 disabled_room、room_color、type_of_furniture。Room_number 显然没有改变(主键)
现在我想找到最好的方法来跟踪这个表的变化;在此表的基础上创建统计数据的最佳方法(例如,一个时期内的平均租用天数)并能够生成选定日期的表(例如 2013-01-01)
我的想法: 由于我对数据库一无所知,我的想法是每天复制整个表,再加上 1 列,称为“DB_dump_date”(带有日期)。这是一种非常简单的方法,可能需要很多空间;由于我的 10k 个房间表,一年内必须复制 365 次。
其他解决方案: 在其他一些网站上,建议我创建两个表:“预订”表,其中包含以下列:Startdate Enddate Room Rate Occupant_name 然后将此表转换为 FactReservations 表:Date Room Is_occupied Rate Occupant_name 我不明白怎么做这对我有帮助......事实上,我假设我必须制作 20 个中间表,然后是 20 个事实表(因为我的数据库中有 20 个列)。
问题: 处理此类问题的推荐方法是什么?是否有任何数据库模式可以处理它,而无需用户制作神奇的 ETL?(例如,可以自行优化问题的数据库)有哪些替代方案?聪明的人,你会怎么做?(最好在 MS Access... 或一些免费软件技术中)
编辑: 还有一件事 - 桌子上的一切都可以改变,不仅仅是房间预订,一切; 我希望能够跟踪更改