从数据到信息
从信息到洞察

数据库三范式

认识范式

范式是关系数据库理论的基础,也是设计数据库结构过程中所要遵循的规则和指导方法。范式的种类比较多,其中最主要的有三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。

为什么要介绍范式?如果没有实地做过数据库设计、或者建模经验比较少,是不容易理解范式这种抽象概念的。但是随着你接触 Power BI 时间的增加、使用的表越来越多、表之间的关系越来越复杂,会逐渐体会到一个设计合理的模型结构是多么的重要。毫不夸张的说,很多时候写不出 DAX 公式不是因为公式用法没掌握,而是模型结构有问题。了解范式理论,有助于在建模过程中识别并纠正不合理的结构,防患于未然

这也是 Power BI 和其他 BI 工具一个显著的区别,搞定可视化之前,必须先搞定模型。对于大型项目,一个设计不合理的模型,会让公式越写越复杂,越来越难以维护

不必担心,这部分内容我会写的尽可能简单,用案例帮助你理解。

第一范式(1NF):列的原子性,保证表的每一列都是不可分割的原子项

编号 姓名 性别 所在地
0001 张三 广东省,深圳市
0002 李四 海南省,海口市

所在地这一列不符合第一范式,需要拆分为下面的结构

编号 姓名 性别 所在省 地市
0001 张三 广东省 深圳市
0002 李四 海南省 海口市

第二范式(2NF):在 1NF 的基础上,非关键字段必须依赖唯一的主键

工牌编号 工牌姓名 饭卡编号 饭卡姓名 饭卡余额
0001 张三 A001 A1 号员工 100
0002 李四 B001 B1 号员工 80

工牌姓名依赖于工牌编号,饭卡姓名和余额依赖于饭卡编号,两个主键违反了第二范式。如果使用这种结构,删除工牌编号记录的同时也会删除饭卡信息,这是不合理的。如果一个工牌可以办理多张饭卡,表格会产生冗余数据。所以我们需要将其拆分为工牌和饭卡两张表,这样每张表都有唯一的主键

第三范式(3NF):在 2NF 的基础上,表中的每一列都和主键直接相关,不能存在传递依赖

用户编号 姓名 性别 城市 城市人口
0001 张三 深圳市 1300W
0002 李四 海口市 230W

城市人口依赖于城市,城市依赖于用户编号,城市人口与用户编号是传递依赖,违反了第三范式。解决方法是将城市相关信息拆分到一个单独的表。

范式设计的问题和对策

本文隐藏内容查看价格为2G币,请先
单独购买的内容长期有效,不受时间限制(购买前先刷新当前页面)。加入VIP会员可享受全站权益,性价比更高。

既然范式设计在某些情况下可能带来问题,那么反范式设计也有其存在的必要,这就是我们常说的模型的规范化与反规范化,在优化数据模型章节,我将介绍模型的反规范化。

8
说点什么

1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
3 评论数
5 被回复的评论
4 订阅评论的人数
 
查看最近回复
查看最热评论
  订阅本文评论  
最新 最旧 得票最多
提醒
游客
咖啡君

感觉第二范式和第三范式没什么差别呢?

成员
crcw

范式的英文怎么说?刚开始看的时候以为是有三种表的式样,其实是设计表的时候要遵循三个原则。

成员
135****5073

请问为什么删除工牌编号记录的同时也会删除饭卡信息,这之间是什么关系呢,没有看明白。

DAX 圣经

导读

初识 DAX

DAX 基础知识

DAX 原理

DAX 高级原理

基础函数类型

迭代函数

CALCULATE 函数

CALCULATE 调节器

基础表函数

条件判断函数

查找匹配函数

时间智能函数

统计类函数

投影函数

分组/连接函数

集合函数

其他函数