一. 基本知识
- 实体:现实世界中客观存在并可以被区别的事。一个学生,一名老师等。
- 属性:实体所具有的某一特性。学生的:学号,性别,姓名等。
- 元组:表中的一行就是一个元组。
- 码:表中可以唯一确定一个元组的某个属性(或者属性组)。如果这样的码有不止一个,那么大家都叫候选码,我们从候选码中挑一个出来做老大,它就叫主码。
- 全码:如果一个码包含了所有的属性,这个码就是全码。
-
- 外码:一个属性(或属性组),它不是码,但是它别的表的码,它就是外码。
- 主属性:一个属性只要在任何一个候选码中出现过,这个属性就是主属性。
- 非主属性:与上面相反,没有在任何候选码中出现过,这个属性就是非主属性。
二. 范式
- 什么是范式:
的话:实际上你可以把它粗略地理解为一张数据表的表结构所符合的某种设计标准的级别。 - 数据库范式分为1NF,2NF,3NF,BCNF,4NF,5NF。
- 第一范式:
- 1NF 的定义为:数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。(保持数据的原子性)。但仅仅符合 1NF 的设计,仍然会存在数据冗余过大,插入异常,删除异常,修改异常的问题。
学号 | 学生姓名 | 所在的系 | 系主任 |
---|---|---|---|
12 | A | xx | qaz |
13 | B | xx | qaz |
14 | C | yy | wsx |
- 每个学生所在系与系主任重复很多次:数据冗余;
- 如果新成立了一个系,但是还未招生,那么新成立的系与系主任无法加入数据库:插入异常;
- 如果系主任换人了,在修改时,要修改整个系得所有学生对应的系主任名字,如果漏了则:修改异常;
- 如果这批学生毕业了,删除学生的数据会导致系与系主任的数据也一并删除:删除异常。
- 第二范式:
- 在 1NF 的基础上,非码属性必须完全依赖于候选码(在 1NF 基础上消除非主属性对主码的部分函数依赖)。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。
学号 | 学生姓名 | 所在的系 |
---|---|---|
12 | A | xx |
13 | B | xx |
14 | C | yy |
系 | 系主任 |
---|---|
xx | qaz |
yy | wsx |
- 第三范式:
- 满足第二范式的条件下不存在传递函数依赖。
三. 事务与ACID:
- 什么是事务: