Skip to content

Lecture 2 关系数据模型

:material-circle-edit-outline: 约 1280 个字 :material-clock-time-two-outline: 预计阅读时间 4 分钟

主要内容

数据模型是数据库系统的一个根本特性。关系数据模型因为其简单有效而在数据库领域占据主导地位。讲授关系模型的数学模型,包括关系模型的数据结构、数据完整性、数据操作;重点讲授关系代数及基本关系操作及附加关系操作,学习用关系代数表达式表达数据查询要求。

我们学的重点是关系模型,图视化就是表格

这节课信息量超级巨大,需要课后再反复看一下,重新整理

Basic Structure

image-20240304133911047

Relation Schema and Instance

image-20240304133859036

Attributes

image-20240304133850667

Relations are Unordered

Order of tuples is irrelevant (tuples may be stored in an arbitrary order)

Database Schema

image-20240304134921656

image-20240304134926482

Keys

image-20240304135016568

关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键

比如:

  • 学生表(学号,姓名,性别,班级)
    • 其中每个学生的学号是唯一的,学号就是一个主键
  • 课程表(课程编号,课程名,学分)
    • 其中课程编号是唯一的,课程编号就是一个主键
  • 成绩表(学号,课程号,成绩)
    • 成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以 学号和课程号的属性组是一个主键

成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键

即,A是R1的主键,但在R2里不是主键,那么R2里的A是R1的外键

同理 成绩表中的课程号是课程表的外键

定义主键和外键主要是为了维护关系数据库的完整性,总结一下:

  1. 主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。

身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。

  1. 外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。

比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

image-20240304135523347

实体完整性

保证关系中的每个元组都是可识别的和惟一的

指关系数据库中所有的表都必须有主键,而且表中不允许存在如下记录: – 无主键值的记录 – 主键值相同的记录 原因:实体必须可区分

参照完整性

也称为引用完整性

现实世界中的实体之间往往存在着某种联系,在关系模型中,实体以及实体之间的联系都是用关系来表示的,这样就自然存在着关系与关系之间的引用

参照完整性就是描述实体之间的联系的

参照完整性一般是指多个实体或关系之间的关联关系

此完整性涉及到了外键:

  • 参照完整性规则就是定义外键与被参照的主键之间的引用规则
  • 外键一般应符合如下要求:

– 或者值为空 – 或者等于其所参照的关系中的某个元组的主键值

6

Database

image-20240304135505277

Relational Algebra

image-20240304141941626

Basic Operation

Select Operation

横向选择

image-20240304142056179

image-20240304142022838

Project Operation

纵向选择

image-20240304142605555

image-20240304142208822

Union Operation

image-20240304142619383

不能乱并,得相容

image-20240304142624313

Set difference

image-20240304142951537

image-20240304142955716

交集可以用此操作体现,r^s = r-(r-s)

Cartesian-Product Operation

image-20240304143255897

image-20240304143249360

Rename Operation

image-20240304143642164

Example Queries

image-20240304143902654

显然第二种效率更高,中间量少很多,这属于夏学期的优化问题

不过很多语句DBMS会自动优化

image-20240304144406715

image-20240304144614770

image-20240304144717436

不是所有的想法都能用关系代数实现

Formal Definition

image-20240304144851974

Additional Operations

image-20240304145110843

Natural-Join Operation

image-20240304145706516

image-20240304145724644

image-20240304145737732

Outer Join

image-20240304145757953

image-20240304145820405

image-20240304145829591

image-20240304145837154

花括号表示临时构造一个关系,圆括号表示一个元组

Semijoin(半连接) Operation

没听懂,15:14

image-20240304151103725

image-20240304151200905

Null Values

image-20240304151809695

Assignment Operation

image-20240304151826452

Division Operator

就是看r-s中的tuple,如果一个r-s的tuple在r中所处的tuple包含了所有s中的tuple,那它就是满足条件的结果之一

image-20240304151713620

image-20240304151723791

image-20240304151916318

Extended Relational-Algebra-Operations

后面懒得看了,之后再看

上面的addition都没有增强查询功能,只是简化一些,接下来的就是能增强的

Generalized Projection

image-20240304152818633

Aggregate Functions and Operations

image-20240304153037537

image-20240304153052268

image-20240304153042798

image-20240304153141544

Modification of the Database

image-20240304153728581

Multiset Relational Algebra

image-20240304153923699

SQL and Relational Algebra

image-20240304154007375

image-20240304154025069

1、不能。因为目前的关系只能直接地获取某个特定课程的上一级预修课,而关系代数只支持有限次的操作,如果没有预修课级数限制可能会出现无穷情况,这是无法实现查询的。

2、设需要查询的课程的ID为myID,则: $$ prereqA\leftarrow \Pi_{prereq_id}( \sigma_{coures_id=myID}(prereq))\ prereqB\leftarrow \Pi_{prereq_id}( \sigma_{coures_id=prereqA.coures_i}(prereq\times prereqA))\ prereqC\leftarrow \Pi_{prereq_id}( \sigma_{coures_id=prereqB.coures_i}(prereq\times prereqB))\ allPrereqOfmyID\leftarrow prereqA\cup prereqB\cup prereqC $$