范式
第1范式
一范式就是属性不可分割。
就是说学生身材信息包含(身高 体重)。这不符合第1范式,因为是可以拆分的,分为身高 体重
第2范式
二范式就是要有主键,要求其他字段都完全依赖依赖于主键。消除了部分依赖。
部分依赖多出现在主见个数大于1的情况,比如学生id,学生姓名,课程 id,课程分数。(不符合)
这儿的主键是(学生 id,课程 id)
(学生 id,课程 id) -> 课程分数,课程分数需要学生 id 和课程 id 共同决定,这儿是完全依赖的关系
但是(学生 id,课程 id) -> 学生姓名,这儿只需要学生 id 就能确定学生姓名,是部分依赖。所以不符合第2范式
第3范式
在2范式的基础上,不存在传递依赖的情况。
比如 学生 id,学生,指导老师,老师地址。
学生 id ->指导老师,指导老师->老师地址,虽然老师地址是完全依赖于学生 id 的,但是这里面是传递依赖,不符合第3范式。
第4范式
一般用不到3范式,不纠结
数据库事务
注意就是原子性 一致性 隔离性 持久性
原子性(Atomic)(Atomicity)
事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
一致性(Consistent)(Consistency)
事务在完成时,必须使所有的数据都保持一致状态。就是比如取了200块钱,那么对应的账户就要少200块钱
隔离性(Insulation)(Isolation)
由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为隔离性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
持久性(Duration)(Durability)
事务完成之后,它对于系统的影响是永久性的。该修改即使出现致命的系统故障也将一直保持。
如果某个字段或多个字段的值可以唯一地标识一条记录,则该字段就称为关键字。
如果一个关键字是用以区别每条记录的唯一性标志,并作为该表与其他表实现关联的,则称为主关键字或主码。
除主关键字以外的其他关键字称候选关键字。
如有一个表,字段为:
id firstname lastname address phone IDcard
那么id或IDcard或firstname+lastname都可以说是关键字。
其中id为主关键字,IDcard和firstname+lastname为候选关键字
主属性
在一个关系中,如一个属性是构成某一个候选关键字的属性集中的一个属性,则称它为主属性。如一个属性不是构成该关系任何一个候选关键字的属性集的成员,就称它为非主属性。例如表1.7中,“学号+课程号”是关键字,那么“学号”是主属性,“课程号”是主属性,分数是非主属性。