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

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

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

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

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

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

!NOTE 3NF范式:

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

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

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

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

1、唯一性

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

2、查询性能

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

3、关联性

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

4、数据完整性

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

5、表约束

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

给数仓带来的问题

1、管理成本

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

2、存储空间

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

3、查询效率

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

总结

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

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

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

相关推荐
jnrjian7 小时前
DRG-50857 ORA-30576 drixmd.PurgeKGL CTXSYS
数据库·oracle
Francek Chen7 小时前
【大数据处理与分析】数据仓库Hive:04 数据仓库Hive概述
大数据·数据仓库·hive·hadoop·分布式
志栋智能8 小时前
集成是关键:让巡检超自动化融入现有工具链
运维·服务器·数据库·架构·自动化
IvorySQL8 小时前
PostgreSQL 日报|逻辑解码竞态条件修复(9 月 20 日)
数据库·人工智能·postgresql
adinnet20269 小时前
为什么 RAG 需要 Milvus?向量数据库到底存了什么
大数据·数据库
Elastic 中国社区官方博客9 小时前
使用 Elasticsearch 和 Jina 进行 AI 视频搜索:精准找到你需要的视频片段秒数
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
Omics Pro9 小时前
新型条件传输模型!虚拟细胞扰动预测
数据库·人工智能·算法·机器学习·自然语言处理
实验室管理云平台9 小时前
环境检测实验室管理系统:提升效率与数据准确性的关键工具
大数据·数据库·科技
SelectDB技术团队10 小时前
快手基于 Apache Doris 千亿多模态检索的实践
数据库·数据分析·全文检索·快手·apache doris·向量索引·多模态检索
政企项目老覃10 小时前
金融转账“幽灵失败“排查实录:从本地消息表到 Seata TCC 的选型与权衡
数据库·程序人生·性能优化·数据分析·系统架构