赞
踩
数据库大体可以分为 关系型数据库 和 非关系型数据库。
关系型数据库与非关系型数据库的 区别:
关系型数据库 | 非关系型数据库 | |
---|---|---|
常见数据库 | Oracle、MySQL、SQL Server | memcached、redis |
使用SQL | 是 | 不强制要求,一般不基于SQL实现 |
事务支持 | 支持 | 不支持 |
复杂操作 | 支持 | 不支持 |
海量读写操作 | 效率低 | 效率高 |
基本结构 | 基于表和列,结构固定 | 灵活性比较高 |
使用场景 | 业务方面的OLTP系统 | 用于数据的缓存、或基于统计分析的OLAP系统 |
注:OLTP(On-Line Transaction Processing)是指联机事务处理,OLAP(On-Line Analytical Processing)是指联机分析处理。
范式是数据库设计时遵循的一种规范,不同的规范要求遵循不同的范式。
最常用的三大范式:
第一范式(1NF)
:属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列)
第二范式(2NF)
:满足第一范式;且不存在部分依赖,即非主属性必须完全依赖于主属性。(主属性即主键;完全依赖是针对于联合主键的情况,非主键列不能只依赖于主键的一部分)
第三范式(3NF)
:满足第二范式;且不存在传递依赖,即非主属性不能与非主属性之间有依赖关系,非主属性必须直接依赖于主属性,不能间接依赖主属性。(A -> B, B ->C, A -> C)
不符合第一范式的表:属性还可以再分割
id | name | message |
---|---|---|
001 | 张三 | 13岁,五年级 |
002 | 李四 | 14岁,六年级 |
003 | 王五 | 15岁,七年级 |
修改后的表:每个字段原子性,不可再分割
id | name | age | class |
---|---|---|---|
001 | 张三 | 13岁 | 五年级 |
002 | 李四 | 14岁 | 六年级 |
003 | 王五 | 15岁 | 七年级 |
在满足1NF的前提下,表中不存在部分依赖,非主键列要完全依赖于主键。(主要是说在联合主键的情况下,非主键列不能只依赖于主键的一部分)
注意:这张表中的stu_id和kc_id构成了联合主键。score没问题,它完全依赖于联合主键,stu_id和kc_id两个值才能决定score的值。但是kc_name只依赖于kc_id,这是部分依赖关系,不符合第二范式。
stu_id (学号) | kc_id (课程号) | score (分数) | kc_name (课程名) |
---|---|---|---|
001 | 101 | 85 | 高数 |
001 | 102 | 79 | C语言 |
002 | 101 | 79 | 高数 |
修改后的表:分为两张表,每张表都符合第二范式。
stu_id (学号) | kc_id (课程号) | score (分数) |
---|---|---|
001 | 101 | 85 |
001 | 102 | 79 |
002 | 101 | 79 |
kc_id (课程号) | kc_name (课程名) |
---|---|
101 | 高数 |
102 | C语言 |
在满足2NF的前提下,不存在传递依赖。(A -> B, B -> C, A->C)
sex_desc不直接依赖于主键,而是通过依赖于非主键列而依赖于主键,属于传递依赖,不符合3NF。(id -> sex_code -> sex_desc)
id | name | sex_code | sex_desc | phone |
---|---|---|---|---|
001 | 张三 | 1 | 男 | 178XXXXXXXX |
002 | 李四 | 1 | 男 | 177XXXXXXXX |
003 | 王五 | 0 | 女 | 188XXXXXXXX |
修改后的表:分为两张表,每张表都符合第三范式。
id | name | sex_code | phone |
---|---|---|---|
001 | 张三 | 1 | 178XXXXXXXX |
002 | 李四 | 1 | 177XXXXXXXX |
003 | 王五 | 0 | 188XXXXXXXX |
sex_code | sex_desc |
---|---|
1 | 男 |
0 | 女 |
总结:
提示:这里对文章进行总结:
以上就是今天的学习内容,本文是MySQL的学习,认识了数据库的三大范式,并且可以分辨表属于第几范式。之后的学习内容将持续更新!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。