【数据库复习】第二章 关系数据库

关系数据库

关系数据结构及形式化定义

“关系结构与形式化定义”是数据库理论中的一个重要概念。它涉及如何组织和描述数据库中的数据以及定义数据之间的关系。以下是对这一概念的详细介绍:

关系结构

关系结构(Relational Structure)是指在关系数据库中,数据被组织成一系列的关系(通常称为表),每个关系由若干元组(tuple)组成,元组又由若干属性(attribute)构成。具体来说,关系结构包含以下几个基本要素:

  1. 关系(表):一个关系对应一个表,表的名字即为关系的名字。
  2. 元组(行):每一个元组对应表中的一行,表示一个数据记录。
  3. 属性(列):每个属性对应表中的一列,表示数据记录的一个字段或特征。
  4. 域(Domain):属性的取值范围,表示某一属性所有可能的值的集合。

例如,假设有一个名为“学生”的关系表,其结构可以定义为:

学号姓名年龄专业
1张三20计算机
2李四22数学
3王五21物理

这里,“学生”表就是一个关系,学号、姓名、年龄、专业是属性,每一行是一个元组。

形式化定义

关系结构的形式化定义通常使用数学符号来表示,主要包括以下部分:

  1. 关系模式(Relational Schema):关系模式描述了关系的名字及其属性。形式化表示为:R(A1, A2, …, An),其中R是关系名,A1, A2, …, An是属性名。

    例如,学生表的关系模式可以表示为:

    学生(学号, 姓名, 年龄, 专业)
    
  2. 关系实例(Relational Instance):关系实例是特定时间点上关系中的数据集合,表示为一个元组的集合。关系实例是关系模式的一个具体化。

    例如,学生表的关系实例可以表示为:

    学生 = { (1, '张三', 20, '计算机'), (2, '李四', 22, '数学'), (3, '王五', 21, '物理') }
    
  3. 键(Key):键是能唯一标识关系中元组的属性或属性集合。最常见的是主键(Primary Key)。

    例如,在学生表中,“学号”可以作为主键,因为每个学生的学号是唯一的。

  4. 完整性约束(Integrity Constraints):完整性约束是保证数据的正确性和一致性的一组规则,包括实体完整性、参照完整性等。

    • 实体完整性:主键不能为空。
    • 参照完整性:外键值必须为NULL或引用另一个关系中的一个有效元组。

通过形式化定义,可以更加严格和清晰地描述和管理数据库中的数据结构及其关系,确保数据库系统的可靠性和一致性。
PS:这部分GPT讲的比一般的教科书直观多了,中国教科书是这样的,啰啰嗦嗦讲不清楚还晦涩难懂。

关系操作

“关系操作”是关系数据库管理系统(RDBMS)中的核心概念,用于操作和查询关系(表)中的数据。这些操作基于关系代数和关系演算,提供了一套用于数据检索和操作的基本工具。以下是对主要关系操作的详细介绍:

关系代数操作

关系代数操作是一种基于集合理论的操作,用于从一个或多个关系中导出新的关系。主要的关系代数操作包括:

  1. 选择(Selection):选择操作从一个关系中选出满足特定条件的元组。用符号σ表示。

    • 例如,σ年龄 > 20(学生)表示从学生表中选择所有年龄大于20的学生。
  2. 投影(Projection):投影操作从一个关系中选出特定的属性,去掉其他属性。用符号π表示。

    • 例如,π姓名, 专业(学生)表示从学生表中选择姓名和专业两个属性。
  3. 并(Union):并操作将两个关系的元组合并在一起,去除重复的元组。用符号∪表示。

    • 例如,R ∪ S表示关系R和关系S的并集。
  4. 差(Difference):差操作从一个关系中去除在另一个关系中也出现的元组。用符号−表示。

    • 例如,R − S表示关系R中有但关系S中没有的元组。
  5. 笛卡尔积(Cartesian Product):笛卡尔积操作将两个关系的元组合并,产生所有可能的组合。用符号×表示。

    • 例如,R × S表示关系R和关系S的笛卡尔积。
  6. 连接(Join):连接操作将两个关系的元组合并在一起,条件是满足特定的连接条件。连接操作有多种类型,包括内连接、外连接、自然连接等。

    • 例如,R ⨝ S表示关系R和关系S的内连接。
  7. 自然连接(Natural Join):自然连接是一种特殊的连接,它通过自动匹配两个关系中同名的属性来合并元组。

    • 例如,R ⨝ S表示关系R和关系S的自然连接。
  8. 交(Intersection):交操作返回两个关系中共有的元组。用符号∩表示。

    • 例如,R ∩ S表示关系R和关系S的交集。

SQL中的关系操作

关系代数的操作在SQL(结构化查询语言)中得到了具体实现,SQL是关系数据库中使用的主要查询语言。以下是一些常用的SQL操作:

  1. 选择(SELECT):从表中选择特定的列和行。

    • 例如,SELECT * FROM 学生 WHERE 年龄 > 20;表示从学生表中选择所有年龄大于20的学生。
  2. 投影(SELECT DISTINCT):选择特定的列,并去除重复的行。

    • 例如,SELECT DISTINCT 专业 FROM 学生;表示选择学生表中的所有专业,并去除重复值。
  3. 并(UNION):合并两个查询的结果,去除重复行。

    • 例如,SELECT * FROM R UNION SELECT * FROM S;表示关系R和关系S的并集。
  4. 差(EXCEPT):返回一个查询的结果中不包含在另一个查询结果中的行。

    • 例如,SELECT * FROM R EXCEPT SELECT * FROM S;表示关系R中有但关系S中没有的元组。
  5. 交(INTERSECT):返回两个查询结果中共有的行。

    • 例如,SELECT * FROM R INTERSECT SELECT * FROM S;表示关系R和关系S的交集。
  6. 连接(JOIN):连接两个表,根据指定条件合并行。

    • 例如,SELECT * FROM R INNER JOIN S ON R.id = S.id;表示关系R和关系S的内连接。
  7. 笛卡尔积(无条件JOIN):在SQL中,通常使用CROSS JOIN来表示笛卡尔积。

    • 例如,SELECT * FROM R CROSS JOIN S;表示关系R和关系S的笛卡尔积。

通过关系操作,可以灵活地查询和操作数据库中的数据,构建复杂的数据分析和应用。理解这些操作及其在SQL中的实现,是使用关系数据库的基础。

关系的完整性

关系的完整性是关系数据库管理系统(RDBMS)中用于确保数据准确性和一致性的一组规则和约束条件。完整性约束可以防止不正确的数据进入数据库,维护数据库的有效性。主要的关系完整性包括实体完整性、参照完整性和域完整性。

实体完整性(Entity Integrity)

实体完整性确保每个关系(表)中的每个元组(行)都有一个唯一的标识符,这通常是主键(Primary Key)。主键的值必须唯一且不能为空。

  • 主键约束(Primary Key Constraint):主键是一个或多个属性的组合,其值能够唯一标识关系中的每个元组。
    • 例如,在“学生”表中,“学号”可以作为主键,因为每个学生的学号是唯一的。
CREATE TABLE 学生 (
    学号 INT PRIMARY KEY,
    姓名 VARCHAR(50),
    年龄 INT,
    专业 VARCHAR(50)
);

参照完整性(Referential Integrity)

参照完整性确保关系之间的引用是一致的。具体来说,当一个关系中的一个属性引用另一个关系中的主键时,参照完整性要求引用必须有效,即引用的值必须存在。

  • 外键约束(Foreign Key Constraint):外键是一个属性或属性的组合,它引用另一个关系中的主键。
    • 例如,“成绩”表中的“学号”是“学生”表中的外键,它引用“学生”表中的“学号”。
CREATE TABLE 学生 (
    学号 INT PRIMARY KEY,
    姓名 VARCHAR(50),
    年龄 INT,
    专业 VARCHAR(50)
);

CREATE TABLE 成绩 (
    成绩ID INT PRIMARY KEY,
    学号 INT,
    课程 VARCHAR(50),
    分数 INT,
    FOREIGN KEY (学号) REFERENCES 学生(学号)
);

域完整性(Domain Integrity)

域完整性确保每个属性的数据值必须在其定义的域内,即属性的值必须符合其数据类型和约束条件。

  • 检查约束(Check Constraint):检查约束用于限制属性的值必须满足特定条件。
    • 例如,在“学生”表中,可以限制“年龄”必须在0到120之间。
CREATE TABLE 学生 (
    学号 INT PRIMARY KEY,
    姓名 VARCHAR(50),
    年龄 INT CHECK (年龄 >= 0 AND 年龄 <= 120),
    专业 VARCHAR(50)
);

其他约束

除了上述主要的完整性约束外,还有一些其他常用的约束条件:

  • 唯一约束(Unique Constraint):唯一约束确保一个属性或属性组合的值在关系中是唯一的,但允许有空值。
    • 例如,可以限制“学生”表中的“姓名”列中的每个名字在整个表中是唯一的。
CREATE TABLE 学生 (
    学号 INT PRIMARY KEY,
    姓名 VARCHAR(50) UNIQUE,
    年龄 INT,
    专业 VARCHAR(50)
);
  • 非空约束(Not Null Constraint):非空约束确保属性的值不能为空。
    • 例如,可以限制“学生”表中的“姓名”列不能为空。
CREATE TABLE 学生 (
    学号 INT PRIMARY KEY,
    姓名 VARCHAR(50) NOT NULL,
    年龄 INT,
    专业 VARCHAR(50)
);

通过这些完整性约束,可以有效地确保数据库中数据的一致性、准确性和可靠性,防止错误数据的插入和维护数据的完整性。

关系代数

关系代数(Relational Algebra)是关系数据库管理系统(RDBMS)中一种形式化的查询语言,用于操作和检索关系(表)中的数据。它基于集合论和逻辑运算,提供了一组操作,通过这些操作可以从一个或多个关系中导出新的关系。关系代数的操作可以分为基本操作和复合操作。

基本操作

  1. 选择(Selection)

    • 选择操作从一个关系中选出满足特定条件的元组。用符号σ表示。
    • 例如,σ年龄 > 20(学生)表示从学生表中选择所有年龄大于20的学生。
  2. 投影(Projection)

    • 投影操作从一个关系中选出特定的属性,去掉其他属性。用符号π表示。
    • 例如,π姓名, 专业(学生)表示从学生表中选择姓名和专业两个属性。
  3. 并(Union)

    • 并操作将两个关系的元组合并在一起,去除重复的元组。用符号∪表示。
    • 例如,R ∪ S表示关系R和关系S的并集。
  4. 差(Difference)

    • 差操作从一个关系中去除在另一个关系中也出现的元组。用符号−表示。
    • 例如,R − S表示关系R中有但关系S中没有的元组。
  5. 笛卡尔积(Cartesian Product)

    • 笛卡尔积操作将两个关系的元组合并,产生所有可能的组合。用符号×表示。
    • 例如,R × S表示关系R和关系S的笛卡尔积。
  6. 重命名(Rename)

    • 重命名操作为关系中的属性或关系本身赋予新的名称。用符号ρ表示。
    • 例如,ρ(新学生, 学生)表示将学生关系重命名为新学生。

复合操作

  1. 交(Intersection)

    • 交操作返回两个关系中共有的元组。用符号∩表示。
    • 例如,R ∩ S表示关系R和关系S的交集。
  2. 自然连接(Natural Join)

    • 自然连接是一种特殊的连接,它通过自动匹配两个关系中同名的属性来合并元组。用符号⨝表示。
    • 例如,R ⨝ S表示关系R和关系S的自然连接。
  3. 条件连接(Conditional Join)

    • 条件连接根据指定的条件将两个关系中的元组合并。用符号⨝表示。
    • 例如,R ⨝ (R.id = S.id) S表示关系R和关系S中满足条件R.id = S.id的元组的连接。
  4. 外连接(Outer Join)

    • 外连接包括左外连接(Left Outer Join)、右外连接(Right Outer Join)和全外连接(Full Outer Join),用于保留不匹配的元组。
    • 例如,左外连接R ⟕ S表示关系R中的所有元组和匹配的S中的元组,以及R中不匹配的元组。

示例

假设有两个关系:学生(Student)和课程(Course),其模式如下:

学生(Student)

学号姓名年龄
1张三20
2李四22
3王五21

课程(Course)

课程号学号成绩
101190
102285
103188
选择(Selection)
σ年龄 > 20(学生)

结果:

学号姓名年龄
2李四22
3王五21
投影(Projection)
π姓名, 年龄(学生)

结果:

姓名年龄
张三20
李四22
王五21
自然连接(Natural Join)
学生 ⨝ 课程

结果:

学号姓名年龄课程号成绩
1张三2010190
1张三2010388
2李四2210285

关系代数为数据库查询提供了一个强大且灵活的工具集,通过组合这些基本操作,可以构建复杂的查询以满足各种数据检索需求。

  • 27
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值