数据库设计 – 为什么维度建模中的事实表需要(不)主键?

前端之家收集整理的这篇文章主要介绍了数据库设计 – 为什么维度建模中的事实表需要(不)主键?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我听说过一些参考资料,事实表上不需要pk.我相信每张桌子都应该有一个PK.

如果没有pk和10个外键,一个人怎么能理解事实表中的一行呢?

解决方法

主键在那里

…但是不需要在数据库级别强制执行主键约束.

如果您考虑这一点,从技术上讲,唯一键或主键是唯一定义每行特征的键.它可以由该实体的多个属性组成.现在,在Fact表的情况下,从其他维度表流入的外键已经充当复合主键.并且这些外键组合可以唯一地标识事实表中的每个记录.因此,这个外键组合是事实表的主键.

为什么不是代理钥匙呢?

现在,如果您愿意,您可以为事实表定义一个代理键.但是这个目的是什么?您永远不会从引用其代理键的事实表中检索一条记录(而是使用索引).您不会使用该代理键将事实与其他表联系起来.这样的代理键将完全浪费数据库中的空间.

实施数据库约束

数据库级别定义此概念主键时,数据库需要确保在通过它执行的任何DML操作中不会违反此约束.确保此约束是数据库的开销.对于OLTP系统而言可能无关紧要,但对于批量加载数据的大型OLAP系统,这可能会导致严重的性能损失.此外,为什么您希望数据库在数据加载阶段(通常通过ETL编码)确保相同时确保约束的完整性.

猜你在找的MsSQL相关文章