前言
sql的语句很简单,但是一些数据处理的逻辑却有点绕,并且sql还有8种范式,对数据库的建表也有很大的要求,今天就简单说一说三大范式,这三大范式已经够用了。其余范式自行了解就可。
三大范式
1.第一范式(1NF)
强调的是列的原子性,即表中每一列的字段属性都是唯一的,不可再分的
学生ID | 姓名 | 性别 | 手机号 |
---|---|---|---|
101 | 大狗蛋 | 男 | 13825074109 |
2.第二范式(2NF)
在满足1NF的基础上再满足依赖性的两个约束:一张表必须有一个主键;非主键类必须完全依赖于主键,而不能只依赖主键的一部分。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
学生ID | 学生姓名 | 学生性别 | 学生手机号 | 老师ID | 老师姓名 | 老师手机号 |
---|---|---|---|---|---|---|
101 | 大狗蛋 | 男 | 13825074109 | 011 | 张大宝 | 16489466283 |
102 | 大猫猫 | 女 | 13814956231 | 011 | 张大宝 | 16489466283 |
103 | 小笨笨 | 女 | 15614954531 | 012 | 王麻子 | 15589466280 |
主键:学生ID
从上表可以看出,内容只要分为学生和老师,一个老师对应多个学生,老师的内容与学生ID这个主键不相关,完全违背了第二范式,所以直接拆分为学生表,老师表就可以。
3.第三范式(3NF)
在满足2NF的基础上再满足一个条件:非主键列必须直接依赖于主键,不能存在传递依赖。也就是说,确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
课程ID | 老师姓名 | 课程名字 | 上课时间 | 老师姓名 | 老师手机号 | 老师职位 |
---|---|---|---|---|---|---|
101 | 大狗蛋 | 马克思理论 | 8:00 | 王麻子 | 16489466283 | 讲师 |
102 | 大猫猫 | 军事理论 | 12:00 | 张大宝 | 16489466283 | 教授 |
主键:课程ID
从上表可以看出,所有内容都与依赖于主键ID,符合第二范式。但是老师电话,老师职位直接依赖的是任课老师,不直接依赖于主键ID,违背了第三范式。所以直接拆分为课程表和教师表就可。
三大范式的作用
三大范式只是一般设计数据库的基本理念,是为了在设计中更好的解决数据冗余,数据有效性检查,提高存储效率。
注意:所谓的范式,是用来学习参考的,设计的时候根据情况来设计数据库,不用完全按照范式设计