数据库篇
1 数据库设计的范式
第一范式:每个分项目是不可分割的数据项
天津大学软件学院
每个分项(非主属性)完全依赖于键(码)
不符合第二范式的例子
学生成绩表={学号,姓名,学院编号,教学楼号,课程编号,成绩}
做如下修改符合第二范式的例子
学生信息表={学号,姓名,学院编号,教学楼号}
成绩表= {学号,课程名称编号,成绩}
天津大学软件学院
消除了传递依赖的第二范式
不符合第三范式的例子
学生信息表={学号,姓名,学院编号,教学楼号}
符合第三范式的例子
学生信息表={学号,姓名,学院编号}
学院信息表= {学院编号,教学楼号}
天津大学软件学院
冗余容易带来数据不一致,尽量消除冗余
个别情况下,需要保留冗余
天津大学软件学院
2 数据库的事务(transaction)
所谓事务是用户定义的一个数据库操作序列,这些操作要么全作,要么全不做,是一个不可分割的工作单位。
事务具有原子性、一致性、隔离性、持久性
事务通常以start transaction或者第一个DML语句开始
mit或者rollback结束
多个数据库上的事务,异构数据库的事务
天津大学软件学院
READ MITTED (脏读)
在事务提交前另外一个连接可以读取正在修改的数据
可能产生如下现象
脏读(dirty read):在事务提交前另外一个连接可以读取正在修改的数据
更新丢失(lost update):当系统允许两个事务同时更新同一数据是,发生更新丢失。
天津大学软件学院
MITTED
每次读取到的是提交的数据。
可以产生如下现象
非重复读(nonrepeatable read):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。
天津大学软件学院
REPEATABLE READ
仅仅能看见在本事务开始前由其它事务提交的更改和在本事务中所做的更改
可能产生如下现象
幻像(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。
天津大学软件学院
SERIALIZABLE
仅仅能看见在本事务开始前由其它事务提交的更改和在本事务中所做的更改
不会产生上述读取不一致现象
天津大学软件学院
软件案例分析ch1 来自淘豆网www.taodocs.com转载请标明出处.