第二章 关系数据库
2.1 关系数据库及形式化定义
- 关系数据库系统是支持关系模型的数据库系统
- 3 要素
- 关系数据结构
- 关系操作集合
- 关系完整性约束
2.1.1 关系数据结构
- 数据结构---关系----二维表
- 域(Domain) 一组具有相同数据类型的值得集合
- 笛卡尔积(Cartesian Product)
- 关系(Relation): 就是实体的属性
候选码(Candiate key) 主码(Primary key) 非主属性(Nonprimary attribute) 非码属性(Non-key attribute) 全码(All-key)
- 关系的三种类型: 基本关系(基本表,基表),查询表, 视图表
- 基本表: 实际存在的表, 它是实际存储数据的逻辑表示
- 查询表: 是查询结果对应的表
- 视图表: 由基本表或其他视图表导出的表, 是虚表, 不对应实际存储的数据
在实际的sql server 数据库中工程中, 也会显示这三种表
关系模式
- 关系模式是型, 关系是值
- 关系的描述称为关系模式(Relation Schema) 表示为 R(U,D,DOM, F)
R: 关系名 U: 关系的属性名集合 D: 属性组U中属性所带来的域 DOM: 属性向域的映像集合 F: 属性间数据的依赖关系集合
2.1.3 关系数据库
- 关系数据库的值是这些关系模式在某一时刻对应的关系的集合
- 若干域的定义
- 在这些域上定义的若干关系模式
2.2 关系操作
2.2.1 基本关系操作
- 关系操作
- 查询(Query)
- 选择(Select) 投影(Project) 链接(Join) 除(Divide) 并(Union) 差(Except) 交(Intersection) 笛卡尔积
- 插入(Insert) 删除(Delete) 修改(Update)
- 查询(Query)
2.2.2 关系数据语言分类
关系代数: 对关系的运算来表达查询要求
关系演算: 用谓词来表达查询要求
关系演算: 可按谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算,
-
关系数据语言分类:
- 关系代数语言 例如 ISBL
- 关系演算语言
- 元组关系演算语言 例如 APLHA, QUEL
- 域关系演算语言 例如 QBE
- 基友关系代数和关系演算双重特点的语言 例如 SQL
关系完整性
关系的三类完整性约束
- 实体完整性 (必要)
- 参照完整性 (必要)
- 用户定义的完整性
2.3.2 实体完整性(Entity Integrity)
- 规则: 实体完整性规则 若属性(指一个或一组属性)A 是基本关系 R 的主属性, 则 A 不能取空值
2.3.3 参照完整性
- 定义: 设 F 是基本关系 R 的一个或一组属性, 但不是关系 R 的码. Kt 是基本关系 S 的主码, 如果 F 与 Kt 相对应, 则称 F 是 R 的外码(Foreign Key) 并称基本关系 R 为参照关系(Referencing Relation) , 基本关系 S 为被参照关系(Referenced Relation) 或目标关系(Target Relation), 关系 R 和 S 不一定是不同的关系
- 规则 参照完整性规则: 若属性(或属性组) F 是基本关系 R 的外码, 它与基本关系 S 的主码 Kt 相对应(基本关系 R 和 S 不一定是不同的关系), 则对于 R 中每个元祖在 F 上的值必须为:
- 或者取空值( F 的每个属性值均为空值)
- 或者等于 S 中某个元组的主码值
2.3.4 用户定义的完整性(User-defined Integrity)
- 用户定义的完整性是针对 某一具体关系数据库的约束条件. 它反映某一具体应用所涉及的数据必须满足的语义要求
2.4 关系代数
- 关系代数是一种抽象的查询语言, 它用对关系的运算来表达查询
2.4.1 传统的集合运算
- 并(Unicon)
- 差(Except)
- 交(Intersection)
- 笛卡尔积(Cartesian Product)
2.4.2 专门的关系运算
- 选择(Selection)
- 投影(Projection): 取表中的某几列重新组成一个表
- 链接(Join): 对笛卡尔积的结果进行筛选
- 等值链接: 找到两个表中相同的列, 这两个列中值相同的行的集合
- 自然链接: 对等值链接的变形, 把等值链接中那两个相同的列合并成一列
- 除运算(Division) : R(X,Y) ÷ S(Y,Z) , 结果是一个元组. 这个元组在 X 上分量值 x 的 象集为 Yx, S 在 Y 上的投影集合为 Ys, Ys 是 Yx 的子集.