数据库 三范式

先提醒一下不努力的自己,加油

先付一个链接,本文参考下面的文章

了解数据库三范式 - DAX圣经 - Power BI极客 (powerbigeek.com)

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

范式的意义

很多时候写不出 DAX 公式不是因为公式用法没掌握,而是模型结构有问题。
了解范式理论,有助于在建模过程中识别并纠正不合理的结构,防患于未然。

第一范式(1NF)

  • 列的原子性,保证表的每一列都是不可分割的原子项
    翻译一下:能拆的列全拆了
    举个例子
    所在地列按1NF转换

第二范式(2NF)

  • 在 1NF 的基础上,非关键字段必须依赖唯一的主键
    翻译一下:主键只能有一个,其他的都得依附它(他是老大是国王其他都得围着他转)
    举个例子

    违反第二范式

  • 此时
    工牌姓名依赖于工牌编号
    饭卡姓名和余额依赖于饭卡编号
    那么实际上他是存在两个主键
    所以我们尽量把他拆分成两个表如上图所示
    不一定要和我一样具体情况具体分析

那么违反了有什么坏处呢

举个例子
1.删除工牌编号记录的同时也会删除饭卡信息


删除工牌编号记录的同时也会删除饭卡信息

2.

image.png

红色部分其实是浪费的空间没必要出现的!
比如关于工牌的信息有100列,10w个工牌那就浪费了多少空间

如果一个工牌可以办理多张饭卡,表格会产生冗余数据(也就是浪费很多空间,拖慢速度啊、变卡啊、空间不足啊,反正开始折磨你)

第三范式(3NF)

  • 在 2NF 的基础上,表中的每一列都和主键直接相关,不能存在传递依赖
先看看大佬怎么写的

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

按我的理解其实和第二范式差不多,就是比如


但你不能说这层层以来的关系你就全放在一起,没有间接依赖这一说,这个国家很小只有一级官员,应该拆成国王、大臣;大臣、地方官员;地方官员、村长;村长、村民

所有的范式不一定全要遵守

比如,向上面的国王村长,当我们查询一个国王管辖多少个村民时需要频繁的join连接,此时虽然空间节省了但是会大大增加查询的时间

再比如,数据量不大只需要100买个硬盘扩容,但是设计一个范式需要10000那么就没有必要了

最后没有最好的范式设计,只有最适合的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容