Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 事实数据表可更新/可删除行_Database_Data Warehouse_Dimensional Modeling_Star Schema_Fact Table - Fatal编程技术网

Database 事实数据表可更新/可删除行

Database 事实数据表可更新/可删除行,database,data-warehouse,dimensional-modeling,star-schema,fact-table,Database,Data Warehouse,Dimensional Modeling,Star Schema,Fact Table,好吧,最佳实践表明,您永远不应该更新事实表行,至少对于事务和定期快照粒度。在阅读时,发现了更新的概念: 某些用于更新事实行的ETL技术只有在 代理项键被分配给事实行。具体来说,一个 将更新加载到事实行的技术是插入要更新的行 更新为新行,然后作为第二步删除原始行 作为单一交易。该技术的优点来自ETL 透视图包括改进的负载性能、改进的恢复 能力和改进的审计能力。的代理项键 事实表行是必需的,因为需要多个相同的主键 通常存在更新事实行的旧版本和新版本 插入更新的行和删除 老一排 Bob Becker的

好吧,最佳实践表明,您永远不应该更新事实表行,至少对于事务和定期快照粒度。在阅读时,发现了更新的概念:

某些用于更新事实行的ETL技术只有在 代理项键被分配给事实行。具体来说,一个 将更新加载到事实行的技术是插入要更新的行 更新为新行,然后作为第二步删除原始行 作为单一交易。该技术的优点来自ETL 透视图包括改进的负载性能、改进的恢复 能力和改进的审计能力。的代理项键 事实表行是必需的,因为需要多个相同的主键 通常存在更新事实行的旧版本和新版本 插入更新的行和删除 老一排


Bob Becker的意思是从事实表中进行更新/删除吗?这是一种常见做法吗?

您可能需要不时更新事实表,原因很简单,因为加载了错误的数据

不确定代理密钥在这里有什么帮助 -必须根据自然关键点查找要更改的行

但是可以,可以使用
插入
删除
(可能只有设置取消标志的逻辑删除) 基本上出于可试听性和恢复性的原因,更喜欢简单的
更新。同样,我不确定这会如何影响性能

最重要的是,2006年的最佳实践不一定是当前的最佳实践——现在 非平凡的事实表通常没有主键,因为唯一索引使滚动分区窗口的概念更难实现。(如果需要,在ETL过程中检查唯一性)