3.1 名词
考点:会区分各种码(候选码,主码,外码,全码)
属性分类
数据库实体属性分类主要包括以下几个方面:
-
单一属性 (Simple Attribute)或简单属性:
- 单一属性只能取一个值,比如年龄、工资等。
-
复合属性 (Composite Attribute):
- 复合属性由多个子属性组成,这些子属性共同描述了一个整体概念。例如,地址可以是一个复合属性,包含街道、城市、省份、邮政编码等多个部分。
-
多值属性 (Multivalued Attribute):
- 在某些情况下,一个属性可以有多个值。在关系数据库中,这类属性通常通过关联表来实现,比如一个人有多部电话号码。
-
派生属性 (Derived Attribute):
- 派生属性的值可以根据其他属性的值计算得出,而不是直接存储在数据库中。例如,年龄可以从出生日期计算得到。
3.2 关系代数
表达式:
R在前S在后为例
1. 选择:根据选择条件获取列(sql中:where)。
2. 投影
选择想要的列(类似于select),针对列进行计算。
3. 并
R与S 相同的合并,R与S 不同的元组放下面
4. 交
R与S 相同的合并,不同的不要
5. 差
R与S 相同的减掉,R不同的留着
6. 笛卡尔积
R表中的每一行都与S表中的每一行组合一次 R X S,select * form a,b
图片指路—写的非常易懂
7. 除
如果把笛卡尔积看作“乘法”运算,则除法运算可以看作这个“乘法”的逆运算。
R
÷
S
R÷S
R÷S
网上好多写步骤的真的好难懂,易懂图解指路
假设我们手里面有一张数据库如下:
现在我们有一个问题,就是我们想要找出学习最积极的那位学生,也就是选修了所有课程的那个学生,先暂时放弃除法运算,以我们最朴素的情感,用自己的逻辑来解决这道题目,按照自己的想法,就像设计一个程序一样,需要几步做出这个问题以下是按照我自己的想法:
首先,把SC表拆了,把每个学生单独做成一个表,如下:
然后问题就变成了拆开之后的表格和C表一一比对,找出拆开之后的三个表格中的Course属性和C表一模一样(也就是拆开之后包含了所有课程的表),然后找出那个人是谁,然后问题就解决了
实际上,我们的除法运算就是这个逻辑,但是除法运算的更为严谨,以下是除法运算的的步骤(SC ÷ C),这里我们仍然采用我们上面使用的数据库,直接说结论(SC ➗ C)能找出答案
第一步:找出C表中和SC表中相同的属性,也就是C属性,对C属性做投影操作(也就是找出总的课程有多少门)
第二步:找出SC表中和C表不相同的属性,也就是S属性,也对S属性做投影操作(找出一共有几个学生)
第三步:找出SC表中S的象集(每个学生分别都选了些什么课)
最后一步就是进行比对,只有张三的象集包含了所有C表中的所有课程,所以(SC ➗ C = 张三)
再来看一下步骤:
1.取S中和R相同的属性(投影),去重
2.找R中不同于S的属性,取不同的属性列,对该列进行去重
3. 求R中2中列对应的像集
4. 判断包含关系(哪个像集包含1中所有值)
8. 重命名
9. 连接
1. θ \theta θ 连接
笛卡尔积之后选择
2.等值连接
3. 自然连接
相同属性值值相同的留下,去掉重复属性。
10. 外连接
左连接(left join) 左侧为准右侧填充
右连接(right join)
3.3 元组演算
3.4 域演算
3.5 查询优化
3.6 关系规范化
这一章主要学习四大范式
第一范式
若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一范式
第二范式
第三范式
BCNF范式
第四范式
3.7
3.7.1 Armstrong 公理系统
自反率
增广率