数据库总章
数据库简介
概念:存储和管理数据的仓库,数据按照一定的格式进行存储, 可以高效得对数据库中的数据进行增加、修改、删除、查询等操作
作用: 更方便、更高效的对数据进行管理和持久化储存。
分类:关系型(二维结构)和非关系型
特点:持久化存储;读写速度极高;保证数据的有效性
关系型数据库
通过二维表格来表示数据与数据之间的关系,一个数据库可以包含多个表。
- 二维表的行 称为 记录 或 元组
- 二维表的列 称为 字段 或 属性,可以用来标识记录的字段称为关键词
- 多行记录和多列字段组成一张表
- 多个表组成一个数据库
姓名 | 工号 | 性别 | 出生日期 | 手机号 |
---|---|---|---|---|
阿大 | 001 | 男 | 1989.02.03 | 188****1214 |
阿二 | 002 | 男 | 1989.05.21 | 137****6254 |
阿三 | 003 | 男 | 2000.03.06 | 137****9562 |
如表3-1所示:
三名员工所占有的三行都是记录,
每列表头(如:工号,姓名等)皆为字段。
其中每个记录中的工号是唯一的,也就是字段工号可以用来标识记录,所以工号可为关键词
数据库管理系统
数据库管理系统(RDBMS)是为管理关系型数据库而设计的应用软件,若要使用关系型数据库就需要安装数据库管理系统。
其分为: 服务端软件 和 客户端软件
关系型数据库服务端软件
作用:主要负责接受客户端的请求,管理数据,和操作数据,每个数据库里面会有一系列 数据文件(存储有数据)。 其实数据库就是一系列数据文件的集合
关系型数据库客户端软件
作用:主要负责和关系型数据库服务端软件进行通信, 例如:发送用户请求至服务端,并显示请求结果
分类:shell
终端 和 图形化界面(navicat
)
工作流程
实现过程:
- 用户操作关系型数据库客户端,实现数据库相关操作。
- 关系数据库客户端借助网络使用SQL语言和关系型数据库服务端进行数据通信
- 关系型数据库服务端管理着不同的数据库,根据用户的操作指令去操作指定数据库中的数据文件里的数据
注意:SQL语言是数据库客户端和服务端通讯的唯一语言
数据库存储数据要求
为了更加准确的存储数据,保证表中数据的准确性和完整性,可以在创建表的时候,为表字段添加一些强制性的验证(如:数据类型和约束)
数据类型
作用:在创建表的时候为表中字段指定数据类型,只有数据符合类型要求才能存储起来
使用原则
- 大小选择 看数据的表示范围 选择尽可能小的数据类型
- 有无符号 看数据由没有负数
- 定长变长 看数据长度是否固定
数据库明细连接
数据库设计三范式
第一范式(1NF): 强调的是字段的原子性,即列不能够再分成其他几列。
第二范式(2NF): 满足 1NF,另外包含两部分内容,一是表必须有一个主键;二是非主键字段 必须完全依赖于主键,而不能只依赖于主键的一部分。
第三范式(3NF): 满足 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。
第一范式
如图所示的表结构:
说明:
- 不满足第一范式,
- 要符合 1NF 我们只需把列拆分,即:把 contact 字段拆分成 name 、tel、addr 等字段。
第二范式
如图所示的表结构:
说明:
- Discount(折扣),Quantity(数量)完全依赖于主键(OrderID)
- 而 UnitPrice单价,ProductName产品名称 只依赖于 ProductID
- 所以 OrderDetail 表不符合 2NF
- 可以把【OrderDetail】表拆分为【OrderDetail】(OrderID,ProductID,Discount,Quantity)和【Product】(ProductID,UnitPrice,ProductName)这样就符合第二范式了。
第三范式
如图所示的表结构:
说明:
- OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键列都完全依赖于主键(OrderID),所以符合 2NF
- 但是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF
- 可以把【Order】表拆分为【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。
E-R模型
E-R模型即实体-关系模型,E-R模型就是描述数据库存储数据的结构模型。
- 实体: 用矩形表示,并标注实体名称
- 属性: 用椭圆表示,并标注属性名称,
- 关系: 用菱形表示,并标注关系名称
- 一对一:一个人对应一张身份证,一张身份证对应一个人
- 一对多:一个班级拥有多个学生,一个学生只能够属于某个班级
- 多对多:一个学生可以选修多门课程,一个课程可以被多个学生选修
关系处理
-
一对一
在数据库建表的时候可以将人表的主键放置与身份证表里面,也可以将身份证表的主键放置于人表里面 -
一对多
班级是1端,学生是多端,多端里面应该放置1端的主键,即学生表里面放置班级表中的主键 -
多对多关系
对于多对多关系,需要转换成1对多关系,那么就需要一张中间表来转换,这张中间表里面需要存放学生表里面的主键和课程表里面的主键,此时学生与中间表示1对多关系,课程与中间表是1对多关系,学生与课程是多对多关系