数据库理论基本概念
三级模式和两级映像
外模式 > 用户和数据库系统的接口
-------- 外模式-概念模式映射
概念模式 > 数据的逻辑结构和特征的描述
-------- 概念模式-内模式映射
内模式 > 数据物理结构和存储方式的描述三级模式分别对应:视图、基本表、存储文件
两级映像保证了数据的独立性
术语
关系: 一个关系就是一张表,每个关系有个关系名。
元组: 存储文件中的一行记录
属性: 表中的列头(列名、字段)称为属性,属性值相当于记录中的数据项或字段值。
域: 属性的取值范围
关系模式格式: 关系名(属性名1, 属性名2,…)
例:S(id, name, age, sex) 学生S关系模式,属性为学号、姓名、年龄、性别
候选码:能够唯一标识表中记录的最小属性集,一个表可以有多个候选码。
主码: 将最稳定的候选码作为主码
例如,考虑一个名为
Employees
的表,其中包含EmployeeID
、SSN
(社会保险号)和Name
等属性。如果每个员工都有一个唯一的EmployeeID
和一个唯一的SSN
,那么EmployeeID
和SSN
都可以作为候选码。但出于实际考虑(如隐私和稳定性),通常会选择EmployeeID
作为主码。
主/非主属性: 包含在候选码中的属性成为主属性,反之称为非主属性。
外码(外键): 外键是一个字段(或字段组合),其值必须在另一个表的主键(或具有唯一约束的字段)中存在。
当两个表之间存在多对多关系时,通常会引入一个关系表(或称为桥接表、关联表、映射表等)来存储这两个表之间的关系。这个关系表通常会包含两个外键列,分别引用两个原始表的主键列,并且可能还会有一个自己的主键列(尽管在某些数据库系统中,这两个外键的组合也可以作为复合主键)。
全码(了解): 若关系R(H,L,M,P)的主键为全码,则关系R的主键为HLMP。
完整性约束
实体完整性约束:
- 主键约束:候选码的值不能为空(包括主码/主键)
参照/引用完整性约束:
- 外键约束:确保一个表中的数据匹配另一个表中的数据。外键是一个字段或字段组合,其值引用了另一个表的主键。外键字段可以有空值,除非设置了级联更新或删除规则。
域完整性约束:
- 数据类型约束:确保字段中的数据是预期的数据类型。
- 检查约束(Check Constraint):限制字段中的值范围或格式。例如,可以确保年龄字段中的值在0到150之间。
- 默认约束(Default Constraint):当没有为字段指定值时,提供默认值。
- 非空约束(Not Null Constraint):确保字段必须有一个值。
用户自定义完整性约束:
-
触发器(Triggers):基于某个事件(如INSERT、UPDATE或DELETE操作)自动执行或激活的SQL语句或存储过程。触发器可以用于实现复杂的业务规则和数据完整性检查。
-
存储过程和函数(Stored Procedures and Functions):封装的SQL代码块,可以在数据库中执行复杂的逻辑和计算。它们可以用于确保数据满足特定的业务规则或条件。
-
规则和断言(Rules and Assertions):在某些数据库系统中(如SQL Server中的规则或PostgreSQL中的断言),它们可以定义数据的验证逻辑。然而,并非所有数据库系统都支持这些特性。
-
唯一性约束(Unique Constraint):确保字段或字段组合在表中的值是唯一的,但允许有空值。
-
索引约束:虽然索引主要用于提高查询性能,但它们也可以用于确保数据的唯一性(通过创建唯一索引)。
-
序列(Sequences):在某些数据库系统中,序列用于生成唯一的数字,通常用于自动填充主键字段。
关系代数
关系的并: 关系R与关系S的所有元组的合并,再删去重复元组,记为 R ∪ S
。
关系的交: 同时属于关系R与关系S的元组集合,记为R ∩ S
关系的差: 关系R与关系S的差为从关系R中删去与关系S中相同的元组,记为 R - S
。
笛卡尔积: 两个集合R和T,它们的笛卡尔积表示为R × T
,是一个新的集合,其中的每个元素都是R中的一个元素和T中的一个元素组成的有序对。
投影: 从垂直方向进行运算,在关系R中选出若干属性列组成新的关系。记作:π
选择: 从水平方向进行运算,选择满足指定条件的元组,记作:δ
上例中 π A , C ( R ) π_{A,C}(R) πA,C(R) 同理 π 1 , 3 ( R ) π_{1,3}(R) π1,3(R) , δ B = ′ 5 ′ ( S ) δ_{B='5'}(S) δB=′5′(S) 同理 δ 1 = ′ 5 ′ ( S ) δ_{1='5'}(S) δ1=′5′(S) 可以用列序号
θ连接: 按条件进行连接
自然连接: 基于两个关系中共同存在的属性(通常称为主键和外键)来组合这两个关系
外连接:
关系模式
关系模式定义为:R<U,F>
- U为R的属性
- F为属性组U上的依赖
例1:最终目的就是通过候选关键字组合可以表示关系中的所有属性
- 因为A不依赖任何属性,所以候选关键字肯定包括A
- 选择A、B可以把C表示出来(AB→C),故AB是一组候选关键字
- 选择A、C可以把B表示出来(C→B),故AC是一组候选关键字
- 在候选关键字中的属性都为主属性
例2:
- A可推出B、C, C可推出D
- A、E可推出H
例3:
- 52空四个选项的闭包都可以推出A1 A2 A3 A4,但是主键应满足其属性的任意真子集不能表示全集(U)。
- A1→A4是冗余的因为,A1→A2、A2→A4,从而A1和A4存在传递依赖,即A1和A4的关系可以通过其它关系推导出来。
- 注意:如果删除A2→A4,虽说A1的闭包依旧可以推出所有属性,但依旧无法推出A2→A4的依赖关系。
例4: