先提醒一下不努力的自己,加油
先付一个链接,本文参考下面的文章
范式是关系数据库理论的基础,也是设计数据库结构过程中所要遵循的规则和指导方法。范式的种类比较多,其中最主要的有三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。
范式的意义
很多时候写不出 DAX 公式不是因为公式用法没掌握,而是模型结构有问题。
了解范式理论,有助于在建模过程中识别并纠正不合理的结构,防患于未然。
第一范式(1NF)
- 列的原子性,保证表的每一列都是不可分割的原子项
翻译一下:能拆的列全拆了
举个例子
第二范式(2NF)
-
在 1NF 的基础上,非关键字段必须依赖唯一的主键
翻译一下:主键只能有一个,其他的都得依附它(他是老大是国王其他都得围着他转)
举个例子
此时
工牌姓名依赖于工牌编号
饭卡姓名和余额依赖于饭卡编号
那么实际上他是存在两个主键
所以我们尽量把他拆分成两个表如上图所示
不一定要和我一样具体情况具体分析
那么违反了有什么坏处呢
举个例子
1.删除工牌编号记录的同时也会删除饭卡信息
2.
红色部分其实是浪费的空间没必要出现的!
比如关于工牌的信息有100列,10w个工牌那就浪费了多少空间
如果一个工牌可以办理多张饭卡,表格会产生冗余数据(也就是浪费很多空间,拖慢速度啊、变卡啊、空间不足啊,反正开始折磨你)
第三范式(3NF)
- 在 2NF 的基础上,表中的每一列都和主键直接相关,不能存在传递依赖
先看看大佬怎么写的
城市人口依赖于城市,城市依赖于用户编号,城市人口与用户编号是传递依赖,违反了第三范式。解决方法是将城市相关信息拆分到一个单独的表。
按我的理解其实和第二范式差不多,就是比如
但你不能说这层层以来的关系你就全放在一起,没有间接依赖这一说,这个国家很小只有一级官员,应该拆成国王、大臣;大臣、地方官员;地方官员、村长;村长、村民
所有的范式不一定全要遵守
比如,向上面的国王村长,当我们查询一个国王管辖多少个村民时需要频繁的join连接,此时虽然空间节省了但是会大大增加查询的时间
再比如,数据量不大只需要100买个硬盘扩容,但是设计一个范式需要10000那么就没有必要了