1.数据建模
1.1 软件开发
软件开发流程,其实就是软件的设计思路和方法的一般过程,其实包括
- 分析
- 设计
- 编码
- 测试
- 部署
- 上线
- 运维
1.2 数据建模
在需求分析过程中,有一些重要的工作给系统进行建模,它为后续的设计和实现工作提供了支持
数据建模主要是要抽象出系统中所涉及到的实体,以及它们之间的关系。
此过程一般需要经过三个阶段:
- 概念建模
- 逻辑建模
- 物理建模
通常最后以E-R图的形式进行展现,根据E-R图就可以进行数据库设计了
概念建模:
此阶段主要进行的步骤有:
- 客户交流
- 理解需求
- 形成实体
在业务复杂的时候,我们通常不能很快理解这个业务流程中的每个步骤,并且可能在客户的很多业务 中,会有一些相同的步骤,这些都是需要我们反复和客户进行沟通后,才有可能有一个比较全面的掌 握
所以,这一般是一个迭代的过程,需要反复多次的和客户沟通、理解和确认。
逻辑建模:
此阶段主要是对概念建模阶段的实体进行细化、优化、测试等。
最后形成具体的E-R图(实体关系图),这张关系图中详细记录了实体信息,同时展示了实体与实体之 间的关系。
到此为止,还和具体使用的是什么数据库没有关系
物理建模:
此阶段中,将在逻辑建模阶段创建的实体关系图基础上,根据选择使用的数据库,转为相应的 SQL代码,以便 在在数据库中,创建相应数据库对象。
由于之后系统中的功能,主要就是围绕数据库进行实现的,所以此时还需要在数据库中,模拟测试数据 并插入到表中,然后对前期需求分析中的功能,进行测试,以便能及时发现问题并处理。
最后,还可以针对系统的实际业务特点,考虑是否需要对数据库中的表进行拆分、读写分离等
1.3E-R图
E-R图(Entity Relationship Diagram),也称为实体关系图,是用来描述现实世界的概念模型
构成E-R图的三大要素有:
- 实体
- 属性
- 关系
实体:
用来表示据有相同特征和性质的事物,实体由实体名和实体属性组成。
属性:
实体所具有的某一特性就是它的属性,一个实体可以拥有多个属性
关系:
实体彼此之间的关系
实现关系的类型:
-
一对一关系
例如,妻子和丈夫
-
一对多关系
例如,班级和学生
-
多对多关系
例如,学生和老师
假设有俩个实体,A和B,判断它们俩个是什么关系,一定要从A到B,然后在从B到A,来判断它们 俩的关系
2.数据库设计
2.1概述
数据建模完成之后,可以把E-R图转换成数据库中的表:
- 实体的名字转换为表的名字
- 实体的属性转换为表中的列
- 具有唯一特点的属性设置为表中的主键
- 根据实体之间的关系,设置表中某列为外键列(主外键关联)
2.2 主键
主键的作用,就是用来唯一标识一行数据的
特点:
-
能做主键的列必要满足非空唯一的特点
-
可以让表中一个有意义的列做主键
例如学号,既可以表示学生的学号,又作为表中的主键,因为这个列满足非空唯一的条件
-
可以找一个没有意义的列做主键
其作用就是标识一行数据,大部分情况下都是用没有意义的列去做主键,例如ID列
-
可以让多个列联合在一起做表中的主键
这个主键就是一个联合主键,要求这几个列的值联合在一起是非空唯一的.
2.3 外键
外键的作用,就是用来标识这个类中的数据,是引用另一种表的字段值
特点:
- 表中的某一个列声明为外键列,一般这个外键列都会引用另外一张表的主键列的值
- 一张表的主键列中出现过的值,都可以在另一张表的外键列中使用
- 外键列值也可以为空,前提是这个外键列没有做主键或联合主键
- 如果把B表中的联合主键,引用到A表中做外键,那么这个外键就是一个联合外键
2.4 范式
设计关系数据库时,要遵从规范要求,才能设计出更加合理的表结构
这些不同的规范要求被称为不同的范式,各种范式依此递进,越高的范式数据库冗余越小**.**
目前关系数据库有六种范式:
- 第一范式(1NF)
- 第二范式(2NF)
- 第三范式(3NF)
- 巴斯-科德范式(BCNF)
- 第四范式(4NF)
- 第五范式(5NF,又称为完美范式)
满足最低要求的范式是第一范式,在第一范式的基础上,进一步满足更多规范要求的称为第二范式,其余范式以此类推.
一般来说,数据库只需要满足第三范式就行了
第一范式:
一个表中,每个列里面的值是不能再分割的.
能在oracle或者mysql建表则肯定是符合第一范式的.
第二范式:
第二范式是在满足第一范式的基础上,表中的非主键列都必须依赖于主键列
第三范式:
第三范式是在满足第二范式的基础上,表中的非主键列都必须直接依赖于主键列,而不能间接的依赖,也就是不能出现依赖传递.
3.建表
3.1 格式
建表的格式有两种:
-- 格式1
create table 表名(
字段名 数据类型 [列约束类型],
字段名 数据类型 [列约束类型],
字段名 数据类型 [列约束类型],
字段名 数据类型 [列约束类型],
字段名 数据类型 [列约束类型]
);
-- 格式2
create table 表名(
字段名 数据类型 [列约束类型],
字段名 数据类型 [列约束类型],
字段名 数据类型 [列约束类型],
字段名 数据类型 [列约束类型],
[表级约束],
[表级约束]
);
括号中是可选项
根据以上格式,可以看出,建表过程中,需要以下几种东西:
- 关键字
- 表名
- 列名
- 数据类型
- 约束
- 固定格式
列级约束,表级约束都是对列中的值进行约束限制的
3.2 命名
对应表和列的名字:
- 必须是字母开头
- 必须是1-30个字符之间的长度
- 表名中只能出现字母、数字、_、#
- 不能和数据库中己有对象的名字重复
- 不能是数据库中的关键字
3.3 数据类型
-
char varchar varchar2 都是存储字符串
char 存储数据的长度是固定的。varchar2 存储数据的长度是可变的。
char 效率比 varchar2效率高。 varchar是数据库标准类型,varchar2类型是oracle数据库中特有的
varchar2不能存空字符串,可以存null。varchar可以存空字符串
Oracle建议使用VARCHAR2
-
number(p,s)
p 表示最大位数(整数位+小数位), s表示保留的小数位(四舍五入),也可以为负数。
例如,number(5,2)
存进去123.456,取出来为123.46
存进去12345.456,运行报错:值大于为此列指定的允许精度
注意1,其实这时候整数位最大只能有3位,因为要留俩位给小数位
注意2,可以直接使用number,不加参数,描述没有默认没限制
-
date
日期类型
-
blob
存二进制对象,例如视频,音频,图片等(基本不用 )
-
clob
存储大文本,例如文章
实际使用较多的数据类型,就是数字、字符、日期
4.DML语句
4.1 概述
DML (Data Manipulation Language),数据操纵语言。
DML用于改变数据库中的数据,主要是包括:
- insert
- update
- delete
DML和数据查询都是数据库中最常见的操作。
4.2使用
4.2.1 insert
向表中插入数据
insert into 表名(列1,列2,..) values(值1,值2,...);
默认是向表中的每一个列中【依次】插入数据,需要和列声明的顺序一致
insert into t_user values(1,'tom','abc1@qq.com','f',20,'11-8月-98');
违反任意一种约束那么就插入数据失败
可以使用 desc t_user 来查看表结构、表中列的声明顺序
也可以指明向表中的哪些列插入数据
insert into t_user(id,name,email,gender,age,birthday)
values(2,'tom','abc2@qq.com','f',20,'11-8月-98');
注意,insert语句中,最后面的那个关键字是 values ,而不是 value
4.2.2 update
修改表中的数据
update 表名 set 列1=值1,列2=值2,.... where 条件;
如果不加条件,就表示把表中所有数据更新
例如,修改表中所有数据,更新age值为20
update t_user set age=20;
4.2.3 delete
删除表中的数据
delete from 表名 where 条件;
同样的不加条件会把表中的所有数据删除
示例,删除表中id大于20的用户信息
delete from t_user where id>20
5. 事务
5.1 概述
事务(Transaction),是由一系列对数据库表中数据,进行访问与更新的操作,所组成的一个执 行逻辑单元
- 只有DML语句才会产生事务,其他语句不会产生事务
- DML语句执行的时候,如果当前有事务,那么就使用这个事务。如果当前没有事务,则产生一个新 事务
- commit、rollback、DDL语句都可以把当前事务给结束掉
- commit和DDL语句结束事务的方式是把这个事务给提交了,然后DML操作永久生效
- rollback结束事务的方式是把这个事务给回滚了,默认回滚到事务开始的状态
5.2 特征
事务特征(ACID):
-
原子性:Atomicity
一个事务中所有的DML操作,同时成功或者同时失败
-
一致性:Consistency
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态
-
隔离性:Isolation
事务操作应该相互独立
-
持久性:Durability
事务所做的影响 ,在事务结束之后应该能够是持久的
DML语句 产生事务 DDL语句结束事务
DML语句:
数据操纵语言,用于改变数据库中的数据,主要是 INSERT , UPDATE , DELETE 语句
DDL语句:
用来建立、修改、删除数据库对象,主要是 CREATE 、 ALTER 、 DROP 、 TRUNCATE 语句
例如:
insert ....产生事务A
update ... 这个操作是事务A中的操作
insert .. 这个操作是事务A中的操作
commit; 让事务A里面的三个操作生效、事务A结束
delete ... 产生新的事务B
insert .. 这个操作是事务B中的操作
insert .. 这个操作是事务B中的操作
insert .. 这个操作是事务B中的操作
rollback; 让事务B中的四个操作都撤销,事务B结束
例如:
try{
DML-sql;
commit;
}catch(Eecption e){
rollback;
}
执行成功提交,执行失败全部回滚 体现了事务的原子性。