关于外模式,模式,内模式的理解
可以看到用不同的语句进行表示:
关系的性质
概念模式/内模式映射是物理独立性的关键;
外模式/概念模式映射就是逻辑独立性的关键
候选键 (最小组成的超键)
- 关系中的一个属性组,其值能唯一标识一个元组。若从属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选键
如DEPT中的D#,DN都可作为候选键
如SC中的属性组(S#,C#)可作为候选键
任何一个候选键中的属性称作主属性
如SC中的S#,C#
仅包含唯一标识记录所必需的最小数量列的超键。表的候选键有三个属性:
唯一性:在每条记录中,候选键的值唯一标识该记录。
最小性:具有唯一性属性的超键的最小子集。
非空性:候选键的值不允许为空。
主键
进行数据库设计时,从一个关系的多个候选键中选定一个作为主键
如可选定D#作为DEPT的主键
外部键(外键)
关系R中的一个属性组,它不是R的键,但它与另一个关系S的键相对应,则称这个属性组为R的外部键
如S关系中的D#属性
超键
1)超键:
一个列或者列集,唯一标识表中的一条记录。超键可能包含用于唯一标识记录所不必要的额外的列,我们通常只对仅包含能够唯一标识记录的最小数量的列感兴趣。
一张student表 假设姓名没有重复的 学号(student_id) ,姓名都可以确定唯一一条记录,
学号+姓名的组合也可以确定一条记录,这三种都叫超键
关系模型
数据模型三要素
1.数据结构
单一的数据结构——关系 实体集、联系都表示成关系
2.数据操作(关系模式)
关系模式
- 关系的描述称作关系模式,包括关系名、关系中的属性名、属性向域的映象、属性间的数据依赖关系等,记作R(U, D, dom, F), 简记为R(U) 或 R(A1 , A2 ,…, An )
- 属性向域的映象一般直接说明为属性的类型、长度等
- 某一时刻对应某个关系模式的内容(元组的集合)称作关系
关系模式是型,是稳定的。关系是某一时刻的值,是随时间不断变化的
关系操作
关系操作是集合操作,操作的对象及结果都是集合,是一次一集合的方式
而非关系型的数据操作方式是一次一记录
关系操作可以用关系代数和关系演算两种方式来表示,它们是相互等价的
如用关系代数来表示关系的操作,可以有选择、投影、连接、除、交、差、并等
3.完整性约束
并运算
选择运算
2=5 表示的是选择第二列为数值5的行
投影
广义笛卡尔积
两个关系R,S,其度分别为n,m,则它们的笛卡尔积是所有这样的元组集合:元组的前n个分量是R中的一个元组,后m个分量是S中的一个元组
RXS的度为R与S的度之和, RXS的元组个数为R和S的元组个数的乘积
连接
1 . theta 连接:
A,B为R和S上度数相等且可比的属性列
theta 为算术比较符,为等号时称为等值连接
这个就是先做笛卡尔积,然后再按条件选择
2.自然连接
这里简单理解就是, (也可以先不做笛卡尔积) 找到两个表中相同的列,比较相同列的值,如果相等,则取出。
连接用于连接多个表的应用
示例
查询选修数据库原理课程且成绩在90分以上的学生姓名及成绩。
关系代数案例——差运算的应用
连接两个表使用的是连接符号,但是其实也可以用笛卡尔积来实现
笛卡尔积实现的时候,需要加条件。选择两个表中值相等的数值(这样不会出现 01和02的放到一起,这个数据对我们来说是无用的)
1、设有如下所示的关系:学生表S(S#,SNAME,AGE,SEX)、课程表C(C#,CNAME,TEACHER)和学生选课表SC(S#,C#,GRADE),其中:S#为学号,SNAME为姓名,AGE为年龄,SEX为性别,C#为课程号,CNAME为课程名,GRADE为成绩, TEACHER为教师。
2、设有如下所示的关系:学生表S(S#,SNAME,AGE,SEX)、课程表C(C#,CNAME,TEACHER)和学生选课表SC(S#,C#,GRADE),其中:S#为学号,SNAME为姓名,AGE为年龄,SEX为性别,C#为课程号,CNAME为课程名,GRADE为成绩, TEACHER为教师。
试用关系代数表达式表示下列查询语句:
(1)检索LIU老师所授课程的课程号和课程名;
πC#,CNAME(σTEACHER=‘LIU’(C))
(2)检索年龄大于23岁的男学生的学号和姓名;
πS#,SNAME(σAGE>23∧SEX=‘男’(S))
(3)检索学号为S3学生所学课程的课程名与任课教师名;
πCNAME,TEACHER(σS#=‘S3’(SC⋈C))
(4)检索至少选修LIU老师所授课程中一门课的女学生姓名;
πSNAME(σSEX=’女’∧TEACHER=‘LIU’(S⋈SC⋈C))
(5)检索WANG同学不学的课程的课程号;
πC#(C)-πC#(σSNAME=‘WANG’(S⋈SC))
(6)检索既选修了LIU老师的课程、又选修了LI老师课程的学生学号;
π1(σ1=4∧2≠5(SC×SC))
(7)全部学生都选修的课程的课程号与课程名;
πC#,CNAME(C⋈(πS#,C#(SC)÷πS#(S)))
(8)检索选修课程包含LIU老师所授全部课程的学生学号。
πS#,C#(SC)÷πC#(σTEACHER=‘LIU’(C))
聚集运算
max()
sum()
Group by