1.软件开发流程
-
需求分析
-
主要了解用户想要的是什么东西,做什么用
-
即把软件的功能搞清楚
-
-
概要设计
-
根据用户的负载要求,用户的软硬件环境,用户的网络环境来决定开发软件要使用的语言、数据库等
-
-
详细设计
-
把软件的功能都分解开及数据库设计
-
-
编码实现
-
测试
-
测试贯穿整个流程
-
-
安装维护
2.设计数据库的步骤
-
属于概要设计和详细设计阶段的作业
-
收集系统信息,选择数据库以及明确用户需求涉及到哪些内容
-
根据需求找出实体类,比如学生、课程、老师、成绩等,实体类一般是实实在在存在的事物,都是名词
-
针对每一个实体,来了解用户关心的内容,确定实体的属性
-
标识实体之间的关系,主要是主从关系。
-
绘制E-R图(Entity-Relationship),即实体关系图
-
实体:矩形,一般是名词
-
属性:椭圆,一般是名词
-
关系:菱形,一般是动词
-
-
将E-R图转换为数据库中的表
-
实体对应表
-
属性对应表的字段
-
-
关系一般是通过主外键来建立
-
3.数据库表的关系
-
一对一、一对多、多对多
-
例:
-
员工-->部门 :一对一
-
部门-->员工:一对多
-
一对一、一对多一般通过主外键关联
-
-
课程--->学生 :多对多(创建第三张表来关联这两张表)
-
学生-->成绩:一对多
-
课程-->成绩:一对多
-
成绩-->学生:一对一
-
成绩-->课程:一对一
-
4.主键
-
可以唯一标识一条记录的一个或多个字段
-
如果主键由多个字段构成,则称之为复合主键,例成绩表的主键是学号和课程编号
-
-
作用:
-
唯一标识一条记录,不能重复,不能为空,用来保证行完整性,做为一个可以被外键有效引用的对象,和其他表建立联系
-
5.外键
-
A表中的一个字段是B表的主键,那么它可以做A表的外键
-
emp表的deptno(部门编号)是dept表的主键,在emp表中deptno就可以做外键
-
如果两张表(A、B)有主外键关系,表A的列被添加了外键约束,要删除2张表时,需要先删A,因为A中引用了B的数据,如果先删B,那么A中的数据都是错误数据了,违反了约束,所以不能先删B
-
删除主键表的数据时也要注意,外键表是否有引用该条数据,如果有引用,也不能删,要先把外键表中引用到该条数据的记录删除,在去主键表里删
-
主键表就是在连接时用到了其主键的表
-
外键表就是在连接时用到了其外键的表
-
6.三大范式
-
第一范式
-
列不可再分,要保证列的原子性
-
-
以下不满足第一范式,因为第三列可以再分
-
姓名 地址 性别 年龄
-
-
第二范式
-
在第一范式的基础上,表的每一列都和主键相关(一张表只能说一件事)
-
-
以下不满足第二范式,因为一张表中有2个实体(学生、成绩)
-
学号 姓名 地址 性别 课程号 课程名 成绩 -
此时课程名会出现大量冗余
-
课程名只和课程号相关,与主键不相关
-
应该将其拆分成2个表,使其满足第二范式
-
学生表
-
学号 姓名 地址 性别 -
成绩表
-
学号 课程号 成绩 -
课程表
-
课程号 课程名 -
判断步骤:
-
确定表的主键列(如果没有主键,不符合第二范式)
-
如果主键只有一列,不用其他判断,就符合第二范式
-
如果主键有多列(复合主键),先找出非主属性(除了主键列之外的其他属性),判断非主属性和逐渐直接的依赖时部分依赖还是完全依赖
-
-
-
第三范式
-
在第一范式和第二范式的基础上,确保表中的每列都和主键直接相关,而不是间接相关,要消除传递依赖
-
什么是依赖:
-
在一个表中,如果X确定了,那么Y的值就能确定,不存在某两行X的值相同,但Y的值不同
-
-
-
以下不符合第三范式
-
学号 姓名 年龄 所在学院编号 学院地址 学院电话 -
学院地址依赖于学院编号,学院编号依赖于学号,所以学院地址间接依赖于学号(主键)
-
应该将其拆分成2个表,使其满足第三范式
-
学生表
-
学号 姓名 年龄 所在学院编号 -
学院表
-
所在学院编号 学院地址 学院电话
-
-
注意:
-
允许必要的冗余
-
如果拆分成很多表,可以减少冗余,但是会增加查询时间,所以为了减少查询所需时间,可以允许必要的数据冗余。
-
7.数据库的备份和还原
-
plsql导入导出
-
导出:工具--->导出表-->插入sql-->选择要导出的表、导出路径--->导出
-
导入:工具--->导入表-->插入sql--->选择sql文件--->导入
-