【发布时间】:2014-04-02 08:35:30
【问题描述】:
背景
我正在使用 SQL Server 2012 和 SSIS 设计数据仓库。源系统处理酒店预订。保留在两个表之间拆分,即标题和标题行项目。事实表将位于行项目级别,其中包含标题中的一些数据。
问题
我面临的挑战是预订(及其订单项)会随着时间而改变。
一个例子是:
- 预订已创建。
- 房间被添加到预订中(作为标题行项目)。
- 客户到达并将食物/饮料添加到他们的预订中(更多订单项)。
- 将付款添加到预订中(作为行项目)。
- 房间随后可能会被取消并从预订中移除(订单项被删除)。
- 房间中的人数可能会发生变化,从而影响该订单项。
- 预订状态在其生命周期的某个时刻从“临时”变为“已确认”。
最后三点是关键,我不确定如何在不查找记录和更新记录的情况下保持该行的更新。企业希望跟踪更新和删除。
我拒绝更新,因为:
- 根据我所读到的有关 Fact 表的内容,一旦将行写入表中,重新访问它们并不是一个好习惯。
- 我可以使用查找组件执行此操作,但行数超过 4500 万行,这是最好的方法吗?
问题
- 我应该选择哪种类型的 Fact 表或加载解决方案?
- 我是否应该更新记录,如果是的话,我怎样才能最好地做到这一点?
我愿意接受任何建议!
其他问题(根据 ElectricLlama 的回答):
- 事实确实与来源有 1:1 的关系。您谈到了未来发展可能受到的限制。您能否详细说明我将面临的限制类型?
- 每个订单项都有一个修改(和创建日期)。您是说我应该从事实表中删除自上次导入以来已修改的所有记录并重新添加它们(听起来合乎逻辑)?
- 如果对 2 的回答是“是”,那么出于审计目的,我会在删除当前事实记录之前将它们写入单独的表吗?
- 在第一点中,您提到根据预订日期删除/插入最近 x 天的预订。我可以理解插入新预订。我只是想了解我为什么要删除?
【问题讨论】:
标签: sql-server ssis sql-server-2012 data-warehouse business-intelligence