数据研发基础 | 数仓中需要主键吗

俗话说,周一周一奄奄一息。昨天去演唱会嗨过头了,今天上班脑袋里还在:你不是真正的快乐。废话,谁上班会快乐!但是时间紧任务重,这周有个项目ddl,不得不专注下来开始建模。一思考,脑袋就打结了,在第一步确定数据粒度就出了点小问题。又要能下钻到提交每个报告的状态、类型,又要能在看板侧计算未提交报告的人数。为了保证所有指标都能计算出来,粒度必须保证最小,人月粒度过于粗糙,无法保留报告状态。报告粒度粒度最小,但是无法计算某些人数指标。如果将两者杂糅,模型的粒度太模糊,并且用什么做唯一标识主键呢?

最后在小本本上列了所有指标才琢磨出来,对当月未提交报告的人可以维护一个虚拟报告号,这样保证粒度最小,同时人数指标也便于计算了。

突然想到,之前建模的时候从来没有规定必须设定主键,但是数据库的表主键是必要的,那么数仓中到底需不需要主键呢?

--------学习区--------

主键的来源于数据库中第二范式(2NF):要求数据库表中每个实例或记录必须可以唯一地区分,要选一个标识唯一区分实体,这就是主键。

!NOTE 3NF范式:

i.原子性。每个属性必须唯一,不具有多义性(不能拆分成其他几列)

ii.必须存在主键。每个非主属性必须完全依赖于主键,而非主键的一部分。

iii.消除传递依赖。另外非主键列必须直接依赖于主键,不能存在传递依赖

传统数据库中的主键的必要性:

1、唯一性

主键必须保证表中的每一行都有唯一的标识。这样可以避免数据冗余和不一致性。

2、查询性能

数据库系统通常会使用主键来加速数据检索。主键通常会被索引,这样可以更快速地找到特定行的数据,提高查询效率。

3、关联性

主键常常用于建立表与表之间的关系。在关系数据库中,一个表的主键通常与其他表中的外键建立关联,这种关系对于数据的一致性和完整性非常重要。

4、数据完整性

主键的存在有助于确保数据的完整性。主键要求每一行都有一个唯一标识,这可以防止重复或无效的数据插入。

5、表约束

主键通常用作表的约束,确保表中的数据满足特定的条件。这有助于维护数据的质量和一致性。

给数仓带来的问题

1、管理成本

传统数据库需要频繁的事务操作,但是数仓主要存储大量历史数据,维护主键会给引擎带来压力。

2、存储空间

前面提到主键自动建立索引可以加快查询,但是索引会膨胀,带来存储压力,降低磁盘存储和计算效率,数据量大地数仓中尤为明显。在目前的开发中,我还没有使用过数仓的索引,希望以后有机会学习。

3、查询效率

数仓是OLAP(在线分析处理) 不是OLTP(在线事务处理) ,场景多为分析类的,所以很多数据库引擎会使用列存。而主键是面向对象==(行存)==的,反而会降低列存的查询优势。而且查询时又要逐条校验主键的唯一性,就算有索引加速,在大表中也可能会产生性能问题。通过避免使用主键,可以简化数据仓库的设计和维护。

总结

主键是传统关系型系统的产物,因为数仓的特性,需要酌情使用主键。应用中需要在便利性和性能、存储间找到一个平衡。

通过合理设计表结构、选择合适的约束条件和优化性能,可以在不使用主键的情况下,确保数据的唯一性和完整性。例如,在订单系统中,可以使用订单ID和产品ID的组合键来唯一标识每一行记录,而无需单独的主键字段。通过这种方式,可以确保数据的唯一性和完整性,同时避免了单一主键带来的复杂性。

所以正式开发前一定要好好建模,符合维度建模规范,确保表结构能够满足业务需求,同时具备良好的性能和可扩展性。

相关推荐
广州灵眸科技有限公司2 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
憧憬成为web高手4 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学5 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
罗政5 小时前
基于AI工作流的多渠道销售数据仓库清洗统计实践
数据仓库
oradh7 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z123456789868 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD8 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo8 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
TlSfoward9 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记9 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘