范式
第一范式
第二范式
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。如图3-2 员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。
第三范式
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在图3-2的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。
事务
事务的概念
事务是用户定义的一个数据库操作序列,这些操作要么全做要么不全做,是一个不可分割的工作单位。例如,在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或者整个程序。
事务的开始和结束可以由用户显示控制。如果用户没有显示的定义事务,则有DBMS按照缺省规定自动划分事务。在SQL中定义事务的语句有三条:
Begin Transaction—事务的开始;
Commit—表示提交,即提交事务的所有操作。就是说将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。
RollBack—表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已经完成的操作全部撤销,回滚到事务开始的状态。
事务的特性
四个特性:
(1)原子性(Atomicity),它是数据库的逻辑单位,要么全做,要么全部做;
(2)一致性(Consistency),事务的执行结果必须是使数据库从一个一致性状态变到另一个一致性状态。比如说,某公司的再银行中有A,B两个账号,现在存A中取1万元钱存入B账号中,则A账户减掉1万元,B账户增加一万元。这两个操作要么全做,要么全部做。
(3)隔离性(Isolation),一个事务的操作不会被其他事务打扰。即一个事务的内部操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能相互干扰。
(4)持续性(Durability),指一个事务一旦提交,它对数据库中数据的改变应该是永久性的。