加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:23:03 所属栏目:MsSql教程 来源:网络整理
导读:我听说过一些参考资料,事实表上不需要pk.我相信每张桌子都应该有一个PK. 如果没有pk和10个外键,一个人怎么能理解事实表中的一行呢? 解决方法 主键在那里 …但是不需要在数据库级别强制执行主键约束. 如果您考虑这一点,从技术上讲,唯一键或主键是唯一定义每行
我听说过一些参考资料,事实表上不需要pk.我相信每张桌子都应该有一个PK.

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

解决方法

主键在那里

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

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

为什么不是代理钥匙呢?

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

实施数据库约束

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读