文章目录
- 前言
- 简介
- 特点
- SQL
-
- DDL:操作数据库、表
- DML:增删改表中数据
- DQL:查询表中的记录
- 后记
- 拓展
-
- 范式
-
- 第一范式 1NF
- 第二范式 2NF
- 第三范式 3NF
- B+树
-
- 节点结构
- 插入
- 删除
- 参考答案
前言
本博文专用于软件创新实验室课堂,请上课的同学们先自行安装 MySQL,可参考群里发的视频,也可以参考博文MySQL安装教程,在开发这条路上,数据库将会一直陪伴着我们!
简介
什么是数据库/strong>
数据库是一个以某种有组织的方式存储的数据集合,它是一个按数据结构来存储和管理数据的计算机软件系统。理解数据库的一种最简单的办法是将其想象为一个文件柜,这个文件柜只是一个存储数据的空间,而数据库就是这么一个空间。
数据库管理系统(Database Management System, DBMS)是用于创建、管理、和维护数据库时所使用的软件,用以管理数据库,一定程度上,用户都是在操作 DBMS,所以日常的数据库概念一般就是指 DBMS。
常见的数据库软件 DBMS 有甲骨文的 Oracle DB、微软的 Access、MongoDB等,
什么是MySQL/strong>
MySQL 是一款安全、跨平台、高效的,并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 MySQL AB 公司开发、发布并支持,由 MySQL 的初始开发人员 David Axmark 和 Michael Monty Widenius 于 1995 年建立的。
MySQL 的象征符 是一只名为 Sakila 的海豚,代表着 MySQL 数据库的速度、能力、精确和优秀本质。
DDL:操作数据库、表
- 客户端图形化工具:SQLYog,Navicat
DML:增删改表中数据
DQL:查询表中的记录
后记
本博文借鉴了MySQL 简介和MySQL数据库简介,上述只是简单的对数据库进行介绍以及略微讲解了 SQL 语句,数据库还是很博大精深的,感兴趣的同学可以深入探究一番,比如事务,B+树等,冲冲冲!
拓展
范式
通常我们在创建数据库需要一定的规则去遵守,在 RDBMS 中,这种规则就是范式。而规范化目的就是使结构更合理,消除存储异常,使数据冗余尽量小,便于插入、删除和更新,使得它符合第一范式的规则,然后是第二范式,最后是第三范式。一般来说,数据库只需满足第三范式就行了。这里只介绍三大范式,当然还有 BCNF 等,感兴趣的同学自行了解。
第一范式 1NF
-
每个表具有一个主键,主键可以由一个列或多个列组成,是记录的唯一标识符;
-
数据库表中的任何字段都是单一属性,不可再分。
例题
如下是记录学生家庭信息的数据库表,
学 | 姓名 | 性别 | 家庭地址 |
---|---|---|---|
001 | 小明 | 男 | 浙江省金华市婺城区 |
002 | 小红 | 女 | 广东省深圳市南山区 |
003 | 小王 | 男 | 江苏省南京市江宁区 |
从图中我们可以发现:学 、姓名、性别都是具有唯一性的,是不可在分割的部分,而家庭住址则是由省、市、区三部分组成,因此可以被细分,如下图所示:
学 | 姓名 | 性别 | 省 | 市 | 区 |
---|---|---|---|---|---|
001 | 小明 | 男 | 浙江省 | 金华市 | 婺城区 |
002 | 小红 | 女 | 广东省 | 深圳市 | 南山区 |
003 | 小王 | 男 | 江苏省 | 江宁区 | 南京市 |
这样子就是符合第一范式的数据库表了。
第二范式 2NF
-
第二范式是在第一范式的基础上建立起来的,即满足第二范式必须先满足第一范式;
-
要求数据表里的所有数据都要和该数据表的主键有完全依赖关系,即不存在部分函数依赖。
例题1
如下是记录学生课程信息的数据库表,其中有四个字段,分别为学生学 ,课程编 ,最终成绩 ,课程学分 ,
sno | cno | grade | credit |
---|---|---|---|
001 | 1 | 76 | 3 |
002 | 1 | 98 | 3 |
003 | 1 | 45 | 3 |
004 | 2 | 86 | 4 |
如此以来,学分被大量重复存储,造成数据冗余:
-
如要某课程学分,则要大量重复操作;
-
如要加新课程,由于 和 共同做为主键,则在加入新课程时,必须有人选该课;
总之,这种设计不太好,非关键字属性 仅函数依赖于 ,也就是 部分依赖组合关键字 而不是完全依赖!
解决方法:分为两个关系模式,如下图所示,通过 进行关联,
课程信息表
cno | credit |
---|---|
1 | 3 |
2 | 4 |
学生成绩表
sno | cno | grade |
---|---|---|
001 | 1 | 76 |
002 | 1 | 98 |
003 | 1 | 45 |
001 | 2 | 86 |
例题2
如下是学生信息表,
学 | 姓名 | 性别 | 年龄 | 专业编 | 课程编 | 课程名称 | 任课教师 | 上课地点 | 上课时间 |
---|---|---|---|---|---|---|---|---|---|
001 | 小明 | 男 | 19 | 134 | 13401 | 计算机导论 | 张三 | 20幢 | 8:30 |
002 | 小红 | 女 | 18 | 069 | 06913 | 拉拉操 | 李四 | 19幢 | 14:00 |
003 | 小王 | 男 | 20 | 208 | 20832 | 毛概 | 王五 | 17幢 | 10:45 |
从这个表中可以看出:学 和专业编 是学生信息表的联合主键,而任课教师、上课地点等信息都与主键没有直接关联,违反了第二范式的原则,因此我们要对这个表进行一些改动,使之符合第二范式的要求。
解决方法:根据两个主键的主要信息将该数据库表分割为学生信息表和专业信息表两个表,将上课专业的具体信息再分为课程信息表。学生所在专业作为了一个唯一性的列(一个学校只具有这一个专业),而专业所往下又可划分为不同信息,不同的课程所上课时间、地点、老师又都各不相同。
学生信息表
学 | 姓名 | 性别 | 年龄 |
---|---|---|---|
001 | 小明 | 男 | 19 |
002 | 小红 | 女 | 18 |
003 | 小王 | 男 | 20 |
专业信息表
学 | 专业编 | 课程编 |
---|---|---|
001 | 134 | 13401 |
002 | 069 | 06913 |
003 | 208 | 20832 |
课程信息表
课程编 | 课程名称 | 任课教师 | 上课地点 | 上课时间 |
---|---|---|---|---|
13401 | 计算机导论 | 张三 | 20幢 | 8:30 |
06913 | 拉拉操 | 李四 | 19幢 | 14:00 |
20832 | 毛概 | 王五 | 17幢 | 10:45 |
第三范式 3NF
- 符合第二范式;
- 消除了传递依赖关系,任何两个非主键字段之间不存在依赖关系,即关系模式 R(U,F)中的所有非主属性对任何候选关键字都不存在传递依赖。
例题
学生信息表
学 | 姓名 | 性别 | 年龄 | 课程编 |
---|---|---|---|---|
001 | 小明 | 男 | 19 | 13401 |
002 | 小红 | 女 | 18 | 06913 |
003 | 小王 | 男 | 20 | 20832 |
课程信息表
课程编 | 课程名称 | 任课教师 | 上课地点 | 上课时间 |
---|---|---|---|---|
13401 | 计算机导论 | 张三 | 20幢 | 8:30 |
06913 | 拉拉操 | 李四 | 19幢 | 14:00 |
20832 | 毛概 | 王五 | 17幢 | 10:45 |
从这两张表中我们都可以明显的发现:不管哪一字段都与表当前的主键是紧密相连的,都依赖它。比如:一个学生的学 是唯一的,当你从数据库中要查找一个学生所选的课程时,你只需使用 子句指定查找学 即可查出,课程信息表也是如此。
所以对于建好一个数据库来说,这三个范式是多么的重要啊。不仅使我们避免了大量的数据冗余,节省了存储空间,而且保持了数据的一致性。要查询不同表中的数据只需进行 联合查询即可!
B+树
B+ 树是一种树数据结构,通常用于数据库和操作系统的文件系统中。B+ 树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。B+ 树元素自底向上插入,这与二叉树恰好相反。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!