概述
随着互联网技术的高速发展,网民的数量也急剧增加,并带动了电商、社交、微博,网络视频等产业的发展。那么,随之而来的就是庞大的海量数据。
为了高效且条理分明地存储数据,人们引入了数据库的概念,使用数据库让人们能够更加迅速和方便地管理数据。
接下来,我来总结一下关系型数据库——MySQL,MySQL 是一种开放源代码的关系型数据库管理系统,它有如下优点和缺点:
优点:
1、性能卓越服务稳定,很少出现异常宕机;
2、开放源代码且无版权制约,自主性强,使用成本低;
3、历史悠久、社区及用户非常活跃,遇到问题可以很快获取到帮助;
4、软件体积小,安装使用简单,并且易于维护,安装及维护成本低;
5、支持多种操作系统,提供多种API接口,支持多种语言开发。
缺点:
1、MySQL最大的缺点就是它的安全系统,主要是复杂而非标准,只有调用mysqladmin来重读用户权限才会发生改变;
2、MySQL不允许调试存储过程,开发和维护存储过程很难;
3、MySQL不支持热备份,但是在MySQL5.5版本之后引入了InnoDB(事务型数据库引擎),InnoDB支持在线热备份。
MySQL数据库的基本操作
注:我们在写SQL语句时,要知道SQL语句是不区分大小写的,并且要以分号;结尾。
1、查看数据库
SHOW DATABASES [LIKE '数据库名'];
LIKE是可选项 ,用于匹配指定名称的数据库。如果没有LIKE关键字,则查询所有的数据库。
2、创建数据库
CREATE DATABASE [IF NOT EXISTS] <数据库名>
[[DEFAULT] CHARACTER SET <字符集名>]
[[DEFAULT] COLLATE <校对规则名>];
[DEFAULT] CHARACTER SET:指定数据库的字符集。指定字符集的目的是为了避免在数据库中存储的数据出现乱码的情况。如果在创建数据库时不指定字符集,那么就使用系统的默认字符集。[DEFAULT] COLLATE:指定字符集的默认校对规则。
3、删除数据库
DROP DATABASE [ IF EXISTS ] <数据库名>
数据库设计的三大范式
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵守一定的规则。在关系型数据库中,这种规则就是范式。范式是符合某一种级别的关系模式的集合。关系型数据库中的关系必须满足一定的要求,即满足不同的范式。
1NF 第一范式
第一范式(1NF):每个字段都是最小字段,具有原子性,不可再分。
例如:家庭住址字段中包含省市区街道小区门牌号,就不符合第一范式,应当拆分成若干字段分别保存省市区等信息;
用户编号 | 用户名称 | 家庭住址 |
1 | 周伯通 | 陕西省西安市长安区郭杜街道办终南嘉园1号楼 |
2 | 王重阳 | 四川省广元市利州区滨河南路利州小区5号楼B座 |
修改:拆分家庭住址字段
用户编号 | 用户名称 | 省份 | 城市 | 区域 | 街道 | 地址 |
1 | 周伯通 | 陕西省 | 西安市 | 长安区 | 郭杜街道 | 终南嘉园1号楼 |
2 | 王重阳 | 四川省 | 广元市 | 利州区 | 滨河南路 | 利州小区5号楼B座 |
2NF 第二范式
第二范式(2NF):每张表必须存在主键,并且其它字段也必须与全部主键直接依赖,不能仅仅与主键的某一部分依赖(联合主键)。
例如:订单表中包含(订单号、商品编号、商品名称、商品价格),订单编号+商品编号为主键,商品名称和商品价格仅仅与商品编号之间存在直接依赖关联,与订单编号之间不存在直接依赖关系,没有全部依赖于主键(订单编号+商品编号),因为无论商品名称或商品价格,都不能代表这个订单中的商品信息(订单中会包含多种商品和多个价格),因此不符合第二范式。
订单编号 | 商品编号 | 商品名称 | 商品价格 |
001 | A18 | iphone13 | 9880 |
002 | B17 | Macbook Pro | 17800 |
修改方法:拆分成两张表,订单表和商品表
订单编号 | 商品编号 |
001 | A18 |
002 | B17 |
商品编号 | 商品名称 | 商品价格 |
A18 | iphone13 | 9880 |
B17 | Macbook Pro | 17800 |
3NF 第三范式
第三范式(3NF):第三范式在第二范式的基础上更进一层,它是确保每个字段都与主键直接依赖,而不是间接依赖,每张表只保存一种数据,即限制列的冗余性,表和表之间使用外键关系关联。
反范式化
不满足范式的数据库设计,就是反范式化。我们需要知道对于项目的最终用户来说,用户关心的是便于操作和清晰的数据结果。所以在设计数据库时,设计人员和客户在数据库的设计规范化和性能之间的选择会有一定的矛盾。
因为如果我们为了满足三大范式,则会分出很多张表出来,而我们在表连接查询时,又需要将分开的表连接起来查询,这样就会影响数据操作的性能。所以,在实际的数据库设计中,既要考虑三大范式,避免数据的冗余和各种数据操作异常,又要考虑数据访问性能。
有时我们为了减少表连接,提高数据库的访问性能,也可以采取反范式化,允许适量的数据冗余列。
总之,范式化和反范式化各有优缺点,我们一定要根据自己的需求会去选择最合适的数据库设计方案。