美文网首页
数据库(一),范式

数据库(一),范式

作者: dy2903 | 来源:发表于2018-01-27 11:36 被阅读49次

范式

为什么要用范式

我们在学习关系型数据库的时候一定有感觉,关系数据库不就是一个二维表格吗,那么数据库有什么用?

数据库看上去像一个表格,其实不然,比如如下的订单表,一个订单号X2001对应一个用户,但是还对应了两行产品,非常不规范。

image.png

要想把这个表规范化,可以使用范式。引入范式的主要目的在于:解决冗余的问题

第一范式

那么如何规范化呢?可以拆分成两个表格。

一个是订单表

image.png

一个订单号可以唯一的确定一行

一个是细节表,一个订单号+产品编码才可以唯一的确定一行。

image.png

拆分以后就可以保证一个单元格只有一个值了

所以我们说订单表的主键是 (订单号), 细节表的主键是(订单号,产品编码), 这是一个复合主键

第二范式

再看看订单细节表产品名称单价 实际上并不依赖于 订单号
如果想添加一个新的产品, 你会发现没法放入这张表, 因为没有订单号!

image.png

所以还需要再次拆分。

image.png

拆分以后,表4.1订单细节表的主键还是(订单号,产品编码),但是剩下的属性(数量)肯定是完全依赖于主键的。

表4.2产品表也类似,主键是产品编码,剩下的属性都依赖于产品编码

所有属性都依赖于主键的情况就是第二范式

第三范式

我们再回过头来看一下表格3 订单表,它的主键是订单号,所有的属性都依赖于主键,已经是第二范式。 但是我们发现,订单号能决定用户ID,用户ID能决定用户名称,这就出现了依赖传递订单号->用户ID->用户名称

image.png

那么可以再拆分

image.png

没有传递依赖了, 我们可以称之为 第三范式

为了满足范式要求,需要把一张大表拆分开,到时候查询岂不是非常麻烦?是的,需要将这些表Join起来,如果数据量大的时候,连接非常耗时。有时我们需要违反范式,做点数据冗余。

总结

总结一下:

  • 第一范式:字段是不可再分的,也就是不存在一个字段中存在两个及以上的情况。

  • 第二范式:所有属性都依赖于主键,其他不相关的都拆分出去了。

  • 第三范式:不存在某个列不依赖于非主键的列,没有依赖传递了

参考

主要改编自张大胖学数据库

相关文章

  • 范式

    数据库(第一范式,第二范式,第三范式)

  • 数据库范式

    1. 什么是数据库范式?为什么要学习数据库范式? 数据库范式(database normal form):数据库表...

  • (系列7)数据库

    MySQL 数据库概念 范式 范式是数据库设计规范,范式越高则数据库冗余越小,但查询也更复杂,一般只需满足第三范式...

  • 设计数据持久层(上):理论分析

    关系数据库 关系 事务 数据库范式 第一范式(1 NF): 第一范式要求每个属性值都是不可再分的。 第二范式(2 ...

  • 数据库范式概念解析(第一范式,第二范式,第三范式)

    再次强化数据库范式,别在犯迷糊: 大部分数据库从业人员都知道关系数据库有三个基本的范式,即:第一范式,第二范式,第...

  • python学习笔记-数据库07_高级操作_数据库设计

    数据库设计之三范式 范式:对设计数据库提出的一些规范,目前有迹可循的共有8中范式,一般遵循3范式即可。第一范式(1...

  • MySQL数据库基础知识

    数据库三大设计范式 其实,目前的关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、...

  • MySQL的多表间关系

    一、数据库三范式 1.1 第一范式:确保每列保持原子性 第一范式是最基本的范式。如果数据库表中的所有字段值都是不可...

  • 数据库四大范式

    参考来源 解释一下关系数据库的第一第二第三范式? 第一,二,三和四范式 数据库设计范式2——BC范式和第四范式 主...

  • 57、【数据库技术】【MySQL】数据库范式

    1、概述 数据库范式是关系型数据库理论中比较重要的概念。“范式”可以理解成是“规则”、“规范”,数据库范式就是设计...

网友评论

      本文标题:数据库(一),范式

      本文链接:https://www.haomeiwen.com/subject/dblnaxtx.html