数据库基础
# 数据库三大范式
# 第一范式(属性不可再分)
如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
# 第二范式(每个非主属性完全依赖于主属性集)
完全依赖:
A中的所有属性唯一决定B,属性少了就不能唯一决定,属性多了则有冗余(叫依赖不叫完全依赖)。举例:(学号,课程名)这个主属性集可以唯一决定成绩,但是对于学生姓名
这个属性,(学号,课程名)这个属性集就是冗余的,所以学生姓名
不完全依赖于(学号,课程名)这一属性集;
第二范式要求:
第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关。**也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。**比如将(学号,课程名,成绩)做成一张表;(学号,学生姓名)做成另一张表,避免大量的数据冗余;
# 第三范式(非主属性不传递依赖于主属性)
**传递依赖:**如果C依赖于B,B依赖于A,那么C传递依赖于A
3NF在2NF的基础上,消除了非主属性之间的依赖;比如一个表中,主属性有(学号),非主属性有(姓名,院系,院长名),可以看到院长名这个非主属性依赖于院系,传递依赖于学号。消除的办法是分解。 必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键);
# 候选码、主码、超码、外码、主属性、非主属性
- 候选码的定义:如果关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码;
- 主码的定义:如果一个关系有多个候选码,则选定其中一个为主码;
- 主属性定义:候选码的诸属性称为主属性;
- 非主属性定义:不包含在任何候选码中的属性称为非主属性;
- 实体完整性规则:如果属性(一个或者一组属性)A是基本关系R的主属性,则A不能取空值。
- 码是数据库中的基本概念,用于唯一表示实体属性,是整个实体集的性质,而不是单个实体
- 超码是一个或多个属性的集合,这些属性可以让我们在一个实体集中唯一地标识一个实体
- 候选码是从超码中选出的,自然地候选码也是一个或多个属性的集合。
# 不符合范式会出现什么异常
- 冗余数据:某些同样的数据多次出现(如学生姓名);
- 修改异常:修改了一个记录中的信息,另一个记录中相同的信息却没有修改;
- 删除异常:删除一个信息,那么也会丢失其它信息(删除一个课程,丢失了一个学生的信息);
- 插入异常:无法插入(插入一个还没有课程信息的学生)
# 数据类型
# varchar与char的区别
- char表示定长字符串,长度是固定的;
- 如果插入数据的长度小于char的固定长度时,则用空格填充;
- 因为长度固定,所以存取速度要比varchar快很多,甚至能快50%,但正因为其长度固定,所以会占据多余的空间,是空间换时间的做法;
- 对于char来说,最多能存放的字符个数为255,和编码无关
- varchar表示可变长字符串,长度是可变的;
- 插入的数据是多长,就按照多长来存储;
- varchar在存取方面与char相反,它存取慢,因为长度不固定,但正因如此,不占据多余的空间,是时间换空间的做法;
- 对于varchar来说,最多能存放的字符个数为65532
- 从性能角度选char,节省磁盘角度选varchar
# FLOAT和DOUBLE的区别
- FLOAT类型数据可以存储至多8位十进制数,并在内存中占4字节。
- DOUBLE类型数据可以存储至多18位十进制数,并在内存中占8字节。
# 数据库三级模式和两级映像
数据库三级模式中,模式对应基本表,外模式对应视图(虚表),内模式用于存储文件
# 数据库两级映像
外模式/模式映像(保证数据库的逻辑独立性): (1)模式描述的是数据的全局逻辑结构;外模式描述的是数据的局部逻辑结构 (2)一个数据库可以有多个外模式;同一个应用只有一个外模式;一个外模式可以为多个应用使用 (3)外模式是模式的子集(模式与外模式:一对多);外模式与应用:一对多 模式/内模式映像:(保证数据库的物理独立性)(唯一的) (1)该映像定义了数据全局逻辑结构与存储结构之间的对应关系 (2)一个数据库只有一个内模式(也叫存储模式),也只有一个模式
一、DB相关基本概念——(3)数据库系统结构_csdn_yaohailong的博客-CSDN博客 (opens new window)