关系模型
关系数据库的结构
层次模型
表示数据间的从属关系结构, 数据以树形结构(有向树)组织, 父节点与子节点之间存在一对多的关系.
网状模型
表示数据间的多对多关系结构, 数据以网状结构组织, 允许一个子节点有多个父节点.
关系模型
关系模型使用二维表格(关系)来表示数据及其之间的关系. 每个表格由行和列组成, 行表示记录(元组), 列表示属性(字段).
- 关系模型: 用二维表格表示实体集以及实体集之间联系的模型
- 关系: 二维表格, 由行和列组成
- 元组: 表格中的一行, 代表一个实体或实体间的联系
- 属性: 表格中的一列, 代表实体的某个特征或性质
- 关系实例: 一个关系的特定实列, 省流: 行
- 域: 属性值的取值范围(集合)
数据库模式
数据库的逻辑设计
- 数据库实例: 在给定时刻数据库中数据的一个快照
eg:
模式: Student(Sno, Sname, Ssex, Sage, Sdept) 实例: 一个表格
关系的定义
- 域(Domain): 一组具有相同数据类型的值的集合, 又称为值域.(用D表示)
域中所包含的值的个数成为域的基数(用m表示)
关系中用域表示属性的取值范围
关系的性质
- 关系中每一分量不可再分, 是最基本的数据单位
- 每一竖列的分量是同属性的, 列数根据需要而设, 且各列的顺序是任意的
- 每一横行由一个个体事物的诸多属性构成, 且各行的顺序可以是任意的
- 一个关系是一张二维表, 不允许有相同的字段名, 也不允许有相同的记录
键(码, key)
- 超码: 在一个关系中, 能唯一标识元组的属性集称为超码
{学号}, {学号, 姓名},
- 候选码: 如果一个属性集能唯一标识元祖, 且该属性集的任何真子集都不能唯一标识元组(最小性), 则称该属性集为候选码
{学号},
- 主码: 在多个候选码中, 选定的用作元组唯一标识的属性集称为主码
从候选码挑一个
- 主码约束(主键约束): 关系中每行的主键的值必须为一
- 外码(外键): 如果A表的一个字段是另一个表的主键, 那这个字段就是A表的外键
- 外键约束: 外键的值必须出现在另一个表里(或者为空)
- 引用关系: 去引用别人的主键
- 被引用关系: 主键被别人引用
- 引用完整性约束: 要求引用关系中的任意元组在指定属性上出现的取值也必然出现在被引用关系中至少一个元组的指定属性上
省流: 不能引用一个不存在的东西: 如果表A的外键引用了表B的主键, 那么外键的值要么为空, 要么在表B的主键中存在
模式图
一个关系的属性名的集合R(A1, A2, ..., An)叫做关系模式, 其中R是关系名, Ai是属性名.
关系模式是关系的框架, 或者称为表框架, 指出了关系由哪些属性构成, 是对关系结构的描述
一组关系模式的集合叫做关系数据库模式
eg:
Student(Sno, Sname, Ssex, Sage, Sdept)关系查询语言
- 命令式查询语言
- 函数式查询语言
- 声明式查询语言
关系代数
一种抽象的查询语言, 用对关系的运算来表达查询
- 三要素: 运算对象, 关系运算结果, 关系运算符
- 运算符: 集合运算符, 专门的关系运算符, 算术比较符和逻辑运算符
- 分类:
传统的集合运算: 并, 交, 差, 笛卡尔积
把关系看作元祖的集合, 只有行运算
专门的关系运算: 选择, 投影, 连接, 赋值, 更名, 等价
关系运算不仅涉及行运算, 也涉及列运算. 专为数据库的应用设计

选择运算(select)
从一个关系中选出满足给定条件的元祖, 表示为
选择运算是从行的角度进行的运算, 选择条件通常使用=, !=之类的进行比较. 也可以使用与或非将多个简单的布尔表达式连接.
选择运算是单目运算.
F通常由运算对象(属性名, 常数, 简单函数), 比较运算符, 逻辑运算符连接
eg:
<=>
SELECT * FROM Student WHERE Sdept='计算机系';投影运算(projection)
也是单目运算. 关系R上的投影是从R中选择出若干属性列, 组成新的关系.
其中A为R中的属性列, t[A]表示元组t在属性列A上的投影.
eg:
<=>
SELECT Sname, Sdept FROM Student;可以跟选择运算一起用:
<=>
SELECT Sname FROM Student WHERE Sdept='计算机系';笛卡尔运算
两个关系R和S的笛卡尔积R×S是由所有可能的将R中的元组与S中的元组配对所组成的元组集合.
其中, R是n目关系, 有k1个元祖, S是m目关系, 有k2个元祖, 则R×S是(n+m)目关系, 有k1*k2个元祖.

eg:
<=>
-- SELECT * FROM Student, Course;
SELECT * FROM Student CROSS JOIN Course;直接使用几乎没有任何意义, 一般搭配上选择运算, 如
SELECT * FROM 学生, 选课 WHERE 学生.学号 = 选课.学号;得到学生的选课情况SELECT * FROM 学生 JOIN 选课 ON 学生.学号 = 选课.学号;
连接运算
连接运算是笛卡尔积和选择运算的结合.
其中F为连接条件, 是R和S中属性之间的比较谓词.
eg:
<=>
SELECT * FROM Student JOIN SC ON Student.Sno = SC.Sno;集合运算
给定两个关系R, S, 若满足:
- R和S具有相同的属性个数(具有相同的度n)
- R和S在对应属性上的域相同(属性类型相同), 则称R和S是兼容的, 可以进行集合运算.
并运算
R和S的并运算R ∪ S是由所有属于R或属于S的元组所组成的元组集合. 结果仍为n目关系.
差运算
R-S表示属于R但是不属于S的所有元祖集合.
交运算
赋值运算
将一个关系代数表达式中的一部分赋值给临时的关系变量, 方便编写表达式
eg: 找出物理系和音乐系的所有老师
更名运算
不同于数据库中的关系, 关系代数表达式的结果并没有可以用来指代它们的名称, 可以给它们取名.
给定一个关系代数表达式E, 更名运算操作为:
返回以x命名的表达式E的结果
等价查询
使用关系代数编写数据查询的方式通常不止一种, 两条关系代数表达式不同, 但查询目的相同的查询操作称为等价查询.