数据库学习(一):数据库系统概述
关系模型
基本概念
- 关系:关系模型的数据结构,二维表,笛卡儿积的有限子集。是元组的集合。
- 元组:关系中的每个元素(一行),也称记录。
- 属性:关系中的列,也称字段
- 候选码:简称码。属性组,可以唯一地标识一个元组,而其子集不能。注意它是一个集合。
- 主属性:在候选码中的属性
- 非主属性:不在候选码中的属性
- 主键/码:选定的候选码中一个。
- 全码:候选码包含所有属性。
- 主属性:包含在某一个候选码中的属性。
- 非主属性:不包含在每一个候选码中的属性。
- 域:一组具有相同数据类型的值的集合。
- 关系数据库:所有关系(表)的集合。
关系有三种类型:基本表(数据存储的逻辑表示),查询表(查询结果),视图表(虚的,外模式)
关系操作
有两种:查询(query)操作 与 插入(insert)、删除(delete)、修改(update)操作
其中查询:包括选择(select)、投影(project)、连接(join)、除(divide)、并(union)、差(except)、交(intersection)
操作对象和结果都是集合。
关系数据语言
- 关系代数:用代数表达式表示查询
- 关系演算:用谓词表达查询要求。
- sql:结构化查询语言(structured wuery language),集查询、数据定义、操纵、控制语言与一体。介于关系代数、关系演算之间。
关系的完整性
关系的完整性为对关系的某种约束条件,三种:
- 实体完整性:主属性不能为空。保证了每个元组是唯一的。
- 参照完整性规则:由下述,外码在p中的值只能为空值或c中主码的值。
- 用户自定义完整性:由用户自己设定约束条件,如某个属性不能为空等。上两个是所有数据库系统都支持的,而用户定义完整性为自定义
- 外码:关系p中有一个不是主码的属性t,而t在另一个关系c中的主码,则t为p外码。p为参照关系,c为被参照关系。p与c可以是同一个。t在c中可改名,且与c主码在一个域。
如(1)学生(学号,密码,专业名)
专业(专业名,代号)
专用名是学生表外码,是专业表主码。关系学生是参照关系,专业是被参照关系。
(2)学生(学号,姓名,班级,班长)
班长是外码,关系学生即是参照又是被参照关系。
关系代数
关系代数运算符:
五种基本运算:∪、- 、×、σ、Π
而∩、÷、可以由它们推出
集合运算符:
- 并:∪
- 差:-
- 交:∩
- 笛卡尔积:× (直接相连,所以可能会有重复列)
专门的关系运算符:
- 选择:σ
- 投影:Π (去除重复元组)
- 除:÷
- 连接: 从两个关系笛卡儿积中挑选满足比较关系的元组。
等值连接:
自然连接为特殊的等值连接,会自动去重。
悬浮元组:在自然连接中,Student表中某些元组的Sno可能在SC表中找不到相同的,则该元组就会被舍弃,反过来一样,这样的元组即为悬浮元组。
外连接:把悬浮元组也保存在结果关系中,没有的属性列设为空
左外连接:把Student悬浮元组也保存在结果关系中,没有的属性列设为空
右外连接:把SC悬浮元组也保存在结果关系中,没有的属性列设为空
R表: S表:
则R÷S算法:R中不在S中的属性列为A,A中有4个值{a1,a2,a3,a4}
a1的象集:{(b1,c2),(b2,c3),(b2,c1)}
a2的象集:{(b3,c7),(b2,c3)}
a3的象集:{(b4,c6)}
a4的象集:{(b6,c6)}
而S在(B,C)上的投影为{(b1,c2),(b2,c1),(b2,c3)},显然只有a1包含了他,所以除的结果为
一些概念:
- 关系笛卡尔儿积
- 象集:关系R(是外码,关系学生即是参照又是被参照X,Z),则对t[X]=x,x在R中象集为Zx={t[Z] | t[Z]=x} (即所有为x行的z值)
例子
一般用σ、Π、、÷、∪、-运算就够
- 查询计算机系全体学生
σ Sdept='CS' (Student)
- 查询学生姓名和所在系
Π Sname,Sdept (Student)
- 查询至少选修了一门其先修课为5号课程的学生姓名
Π sname(σ pno=5 (course) >< sc >< s)
//简化一下
Π sname(σ pno=5 (course) >< sc >< Π sno,sname(s))
- 查询选修了全部课程的学生号码和姓名
Π sno,cno(sc) ÷ Π cno(sc) >< Π sno,sname(s)
- 检索不学2号课的学生姓名与年龄
Π sno,sage((Π sno(sc) - Π sno(σ cno=2 (sc)) >< s)
- 将新学习关系元组(10,'PHYSICS',2,2)插入到关系course中
course ∪ (10,'PHYSICS',2,2)
- 将学号4选修课程号为10的成绩改为85分 [?用法]
(SC-(4,10,?)∪(4,10,85))