简易数据库学习-1
关系型数据库的基本概念
最简单的关系型数据库
组成:字段(属性)、关系模式、记录(元组)
要求
-
列与行是无序的
-
同一列的类型相同
-
元组不能完全相同
-
一个属性值必须是原子值
KEY
主KEY(必需)*
唯一标识符
候选KEY
其他标识符
外KEY
一个表的候选KEY是其他表主KEY
数据库的组成
一般由多张表组成
之间相互有联系
关系中的数据约束
实体完整性约束
即主KEY不为空
参照完全性约束
即外KEY不能为NULL(类似于指向空指针)
用户定义的完整性约束
即属性值必须在规定范围内
关系代数(对表的元素进行运算)
交并差 不叙
笛卡尔积
离散中学过了A={a,b,c} B={a,b} AxB={<a,a>,<a,b>,<b,a>,<b,b>,<c,a>,<c,b>}
组成新的序列
在这里,理解起来也类似,只是A和B的元素变成了行

投影
就是筛选
选择
除法

可以看成是乘法逆运算
但是如果不符合的就被丢掉了

连接
就是做笛卡尔积时再进行筛选
多个条件使用∧∨
∧是且∨是或,这个不必多说
自然连接
不提供条件,但是要有列名相同的列,同时还会进行合并
数据库设计
实体(Entity)-联系(Relationship)模型(E-R模型)
一对一、一对多和多对多
属性->关系图的列
每一个联系和属性都要有一个表
设计原则
一对一的在一张表中
一对多:”多“方表增加一列,存放”一“方表的主键
多对多:增加一张表,变成两个”一对多“的表
例如学生和老师,一个学生有多个老师,一个老师有多个学生
那么学生信息一张表,老师信息一张表,新增了一张(老师,学生)的表
关系型数据库设计规范化
满足不同级别要求的的规范就是范式,最低要求第一范式(1NF),进一步(2NF),第三范式(3NF)
第一范式
如果每个列都是不可分解的,称第一范式,这是最基本的要求。
函数依赖
表中一列或者几列的组合决定其他列,例如学号决定姓名,学号和学科决定成绩等等
主属性/非主属性(和KEY不一样)
如果表中某列是属于某个候选键中的属性,称主属性,否则称非主属性
这里有一点难以理解,从网上cp了一段
先说候选键,候选键就是可以区别一个元组(即表中的一行数据)的属性或属性的集合,比如学生表student(id,name,age,sex,deptno),其中的id是可以唯一标识一个元组的,所以id是可以作为候选键的,既然id都可以做候选键了,那么id和name这两个属性的组合可不可以唯一区别一个元组呢?显然是可以的,此时的id可以成为键,id和name的组合也可以成为键,但是id和name的组合不能称之为候选键,因为即使去掉name属性,剩下的id属性也完全可以唯一标识一个元组,就是说,候选键中的所有属性都是必须的,缺少了任何一个属性,就不能唯一标识一个元组了,给候选键下一个精确的定义就是:可以唯一标识一个元组的最少的属性集合。而键是没有最少属性这个要求的。另外,一个表的候选键可能有多个,从这些个候选键中选择一个做为主键,至于选择哪一个候选键,这个是无所谓的,只要是从候选键中选的就行。
至于主属性,刚才提到了,一个表可以有多个候选键,那么对于某个属性来说,如果这个属性存在于所有的候选键中,它就称之为主属性。
非主属性 不包含在任一候选键中的属性称为非主属性。
还不懂?举一个例子来说明一下各个键的含义–(超键、候选键、主键、外键)
学号 | 身份证 | 姓名 | 性别 | 身高 | 宿舍号 |
---|---|---|---|---|---|
100 | 410 | 张三 | 男 | 155 | A201 |
101 | 411 | 李四 | 女 | 155 | B202 |
宿舍号 | 楼号 |
---|---|
201 | A |
202 | A |
201 | B |
202 | B |
203 | B |
那么这里
超键:(学号)、(身份证)、(学号、身份证)、(学号、姓名)、(学号、宿舍号)
- 可以唯一标识元组的属性集
候选键(候选关键字,候选码,最小超键):(学号)、(身份证)
- 不能有多余属性的超键,且缺少任一属性不能表示元组,例如在(学号|学科|成绩)的表中(学号、学科)就是候选键,缺少了学号或者学科都不能确定该元组。
主键:(学号)
- 候选键中选出来一个键就行,例如这里可以二选一(学号)或者(身份证),同时主键必须要唯一,比如名字就不可以,然后主键不能有空,尽可能简短等性质。
外键:这里(宿舍号)就是外键,在另一个表中作为主键存在
Other:
主属性:身份证,学号
- 候选键中的任一属性都是主属性
非主属性:姓名、性别、身高、宿舍号
- 即候选键以外的为非主属性
第二范式
在1NF的条件下,且当候选键是多列的组合时,每个非主属性都决定于候选键的所有属性的组合,而没有仅决定于候选键中一部分属性的情况(称没有部分依赖),称第二范式
- 只有唯一候选键(由于只有一个候选键,也可以说唯一主键)的,符合第二范式
比如上面那个例子,学号和身份证号都是可以查到一个学生的所有信息的,那么就不符合第二范式,但是例如成绩表
班级 | 姓名 | 成绩 |
---|---|---|
A | 1 | 93 |
那么非主属性-成绩依赖于主键-(班级、序号)的组合,这样是符合第二范式的。
第三范式
在2NF的条件下,且每个非主属性都不传递依赖于候选键,称第三范式。
即,非主属性中不能一个决定另一个
学号 | 办理时间 | 办理区域 | 学院院长 |
---|---|---|---|
例如该表,(学号)是主键,那么可以得知班级和学院,由非主属性-学院可以知道另一个非主属性-学院院长,这就是传递依赖。
我们更改为
学号 | 班级 | 学院 |
---|---|---|
学院 | 学院院长 |
---|---|
那么就符合第三范式了
BCNF范式(扩充3NF)
每个属性都不传递依赖于候选键,则为BCNF范式(扩充的第三范式)
满足和不满足各举一例