【数据库】关系模式概念
2:关系模式(3)
1 基本概念
关系、候选键、外部键、主属性、⾮主属性、关系模式、关系数据库。
关系模式完整性
候选码:候选码就是可以区别⼀个元组(即表中的⼀⾏数据)的属性或属性的集合,⽐如学⽣表student(id,name,age,sex,deptno),其中的id是可以唯⼀标识⼀个元组的,所以id是可以作为候选码的,既然id都可以做候选码了,那么id和name这两个属性的组合可不可以唯⼀区别⼀个元组呢?显然是可以的,此时的id可以成为码,id和name的组合也可以成为码,但是id和name的组合不能称之为候选码,因为即使去掉name属性,剩下的id属性也完全可以唯⼀标识⼀个元组,就是说,候选码中的所有属性都是必须的,缺少了任何⼀个属性,就不能唯⼀标识⼀个元组了。
候选码的定义:可以唯⼀标识⼀个元组的最少的属性集合。
主码:⼀个表的候选码可能有多个,从这些个候选码中选择⼀个做为主码,⾄于选择哪⼀个候选码,这个是⽆所谓的,只要是从候选码中选的就⾏。
主属性:能作为候选码的属性称为主属性;****
⾮主属性:关系中不组成候选码的属性均为⾮主属性。==》⼀个关系中,除去主属性,其它都是⾮主属性。
关系数据库中,关系模式是型,关系是值。关系模式是对关系的描述。
关系是元组的集合,因此关系模式必须指出这个元组集合的结构,即它由那些属性构成。这些属性来⾄那些域。
关系数据库:例如导师实体、研究⽣实体、导师和研究⽣⼀对多联系都可以分别⽤⼀个关系表⽰,在⼀个给定的应⽤领域,所有关系的集合构成⼀个关系数据库。
说明:关系:就是元组的集合;
2 关系代数及其运算
任何⼀种运算都是将⼀定的运算符作⽤于⼀定的运算对象上,得到预期的运算结果。所以运算对象、运算符、运算结果是运算的三⼤要素。
关系代数的运算对象是关系,运算结果也是关系。关系代数⽤到的运算符包括两类:集合运算符和专门运算符。如下图所⽰。
正在上传…
关系代数运算符
并差交笛卡⼉积运算:
集合运算符案例:
1:并
2:差
差:R-S的解释:R中有,且S中没有的记录。
3:交
4:笛卡⼉积
关系R为n列,k1元组、关系S为m列,k2元组。R中每个k1与S每个k2组成新的关系。
形成的新的关系⼀共有K1*K2条记录
专门的关系运算符:
专门的关系运算符案例:
选择:
假设Student关系表如下:
投影:
连接:
关系R (4条)
A B C
a b c
b a d
c d e
d f g
关系S(3条)
A C D
a c d
d f g
b d g
交叉连接 (4*3=12条记录)—》笛卡⼉积
SELECT * FROM  R  CROSS  JOIN  S
R.A R.B R.C S.A S.C S.D a b c a c d
a b c d f g
a b c b d g
b a d a
c d
b a d d f g
b a d b d g ….
等值连接
⾃然连接
3:完全外
理论:
左外:先⾃然连接,成为ABCE。以左边的为基准,所以B列的b5没了。
右外:
先⾃然连接,以右边的S为基准,保留B列共同的值,R中的b4没有所以删除了。完全外
不满⾜R.B=S.B 的元组保留。
实战
搭建本节课环境,创建如下两张表
学⽣表(学号,姓名)  和  选课成绩表(课程号,学号,分数)
create table student
学号 varchar(10)  primary key,
姓名  varchar(20)
create table course
(
课程号 varchar(5) primary key,
学号 varchar(10),
分数 float
)
insert into student values('01','罗'),('02','张');
insert into course values('010','01',90),('020','03',85);
知识点1:左外连接【以左边的表为主表】
语法:select student.学号,student.姓名,course.课程号,course.分数
from student  left  join course
on  student.学号 = course.学号
总结:左边的表的记录完全输出,右边的边仅输出满⾜条件的
on后⾯的语句就是条件
知识点2:右外连接【以右边的表为主表】
语法:select student.学号,student.姓名,course.课程号,course.分数
from student right  join course
on  student.学号 = course.学号
知识点3:完全外连接【两个表的记录全部输出】
语法:select student.学号,student.姓名,course.课程号,course.分数      from student full join course
on  student.学号 = course.学号
⼩结:
左外链接:查看【学⽣】的选课情况
数据库属性的概念
右外连接:  查看【课程】的选课情况
完全外连接:查看【学⽣】 和 【课程】的选课情况