数据仓库中的Fact表上是否需要Surrogate主键?

Cha*_*adD 3 database-design business-intelligence

当我问我们的数据库设计者为什么我们的Fact表没有PK时,我被告知表中没有唯一标识记录的列集,即使所有列都被选中.当我建议我们在这种情况下成为一个标识栏时,我被告知"我只是浪费空间而且不需要它."

我的感觉是源系统中的每个表都应该有一个PK,即使它是一个标识列.鉴于数据仓库(DW)是来自其他系统的数据的接收者 - 如果无法绑定单个记录,我将如何确保DW中的数据准确反映源系统中的数据?如果你有一个失控的加载程序搞砸数据并运行了一个星期,那么你如何协调这些差异与实时交易源系统没有比较的某种独特约束?

dkr*_*etz 9

数据仓库不一定是关系数据存储,尽管您可以选择将其设置为一个,因此关系定义不一定适用.

只有当您想要对需要唯一标识符的数据执行某些操作时才需要主键(例如,将其跟踪到源,但这并不总是必需或必要,甚至可能无论如何); 数据仓库中的数据通常可以以不需要主键的方式使用.具体而言,您可能不需要区分行.通常用于构建聚合值.

时间不是构建数据仓库表所必需的维度.

它可能在心理上不舒服,浪费空间是一个微不足道的问题,但你的同事是正确的 - PK是没有必要的.


emp*_*mpi 1

没有主键的数据库表似乎是一个糟糕的设计选择,并且为不同类型的异常留出了很大的空间,即如何删除或更新此类表中的单个记录?

  • 事实表不需要主键 (6认同)