期末复习-数据库原理(全英教材)

embedded/2024/12/19 16:54:48/

目录

第二章:关系模型

1.Candidate key

2.superKey

3.关系代数表达式

选择(Selection):

投影(Projection):

自然连接(Natural Join):

笛卡尔积(Cartesian Product):

并集(Union):

练习:


第二章:关系模型

考试范围: 2.1 -2.6

考试内容:

1.关系模型的基本概念

Relation, Relation schema, Relation instance, attribute, tuple, Database schema, Database instance, Superkey, Candidate Key, Primary Key等。

考试题型: 计算题、综合题

知识点如下:

1.Candidate key

Candidate key:在数据库中,Candidate Key(候选键)是指能够唯一标识表中每一行数据的最小属性集合。换句话说,候选键是一组属性,这些属性组合起来可以作为表的主键,用来区分表中的每一行记录。

候选键具有以下特点:

唯一性:候选键中的属性组合必须能够唯一标识表中的每一条记录。

最小性:候选键是最小的属性集合,这意味着没有候选键中的任何一个属性可以被移除而不失去唯一标识的能力。

可选性:一个表可以有多个候选键,每个候选键都可以作为主键使用。

例如,假设有一个学生表,包含“学号”和“姓名”两个字段。如果“学号”字段已经能够唯一标识每个学生,那么“学号”就是一个候选键。如果“姓名”字段不能唯一标识每个学生(因为可能有同名的学生),那么“姓名”单独就不能作为候选键。

在实际应用中,数据库设计者会从候选键中选择一个作为表的主键(Primary Key),并且通常会为这个主键创建索引,以提高查询效率。选择哪个候选键作为主键可能会基于性能、业务逻辑和数据完整性等因素。

2.superKey

superKey:在数据库理论中,SuperKey(超键)是指能够唯一标识数据库表中每一行记录的属性集合。超键的定义比候选键(Candidate Key)更广泛,因为超键可以包含一些不必要的属性,即使它们不是最小集合,也能确保记录的唯一性。

超键的特点:

唯一性:超键中的属性组合必须能够唯一标识表中的每一条记录。

冗余性:超键可能包含一些不必要的属性,这些属性对于区分记录来说并不是必需的。

包含候选键:任何候选键都是超键,但不是所有的超键都是候选键。

超键的例子:

假设有一个学生表,包含以下字段:

学号(StudentID)

姓名(Name)

出生日期(DOB)

专业(Major)

在这个例子中:

学号:如果学号是唯一的,那么它是一个候选键,也是超键。

学号 + 姓名:即使姓名不是必需的,因为学号已经足够唯一标识每条记录,这个组合仍然是一个超键。

姓名 + 出生日期 + 专业:如果这个组合可以唯一标识每条记录,那么它也是一个超键。但如果这个组合实际上是一个候选键,那么它就是最小超键。

超键与候选键的区别:

候选键是最小的超键,即没有冗余属性的超键。

超键可以包含额外的属性,这些属性对于区分记录来说并不是必需的。

数据库设计中,了解超键的概念很重要,因为它有助于识别和选择适当的主键(Primary Key)。主键通常是从候选键中选择的,以确保数据的唯一性和最小冗余。超键的概念也有助于理解数据库的完整性约束,如实体完整性和参照完整性。

3.关系代数表达式

选择(Selection):

假设有一个名为 employees 的表,包含员工的 ID, Name, 和 Salary。

员工信息表

ID

Name

Salary

1

Alice

70000

2

Bob

80000

3

Charlie

90000

4

David

85000

选择操作:σ_Salary≥80000(employees)

结果:

员工信息表

ID

Name

Salary

2

Bob

80000

3

Charlie

90000

投影(Projection):

使用相同的 employees 表,如果我们只想要 Name 和 Salary。
 

投影操作:Π_Name, Salary(employees)

结果:

员工薪资表

Name

Salary

Alice

70000

Bob

80000

Charlie

90000

David

85000

自然连接(Natural Join):

假设有两个表,employees 和 departments,它们都有一个共同的属性 DepartmentID。

员工信息表

ID

Name

DepartmentID

1

Alice

101

部门信息表

DepartmentID

DepartmentName

101

HR

自然连接操作:employees ⨝ departments

结果:

员工信息表

ID

Name

DepartmentID

DepartmentName

1

Alice

101

HR

笛卡尔积(Cartesian Product):

使用 employees 表和 departments 表。

笛卡尔积操作:employees × departments

结果:

员工信息表

ID

Name

DepartmentID

DepartmentID

DepartmentName

1

Alice

101

101

HR

1

Alice

101

102

IT

(这个结果会包含 employees 表中每行与 departments 表中每行的组合)

并集(Union):

假设有两个表,instructor 和 student,它们都有一个 Name 属性。

instructor 表

Name

Alice

student表

Name

Bob

并集操作:Π_Name(instructor) ∪ Π_Name(student)

结果:

Name

Alice

Bob

(这个结果会包含 instructor 表和 student 表中 Name 属性的所有不同值)

练习:

  1. 查找居住在 "Miami" 城市的员工姓名:

答:

1)首先,我们需要从 Employee 表中选择居住在 "Miami" 的员工。这可以通过选择操作来完成。

2)表达式:Πperson_name(σcity='Miami'(Employee))

3)这个表达式首先在 Employee 表上应用选择操作,筛选出 city 为 "Miami" 的行,然后通过投影操作获取 person_name 列。

b. 查找工资大于 $100,000 的员工姓名:
答:

1)这个查询涉及到 Works 表,我们需要选择工资大于 $100,000 的记录,然后投影出 person_name。

2)表达式:Πperson_name(σsalary>100000(Works))

3)这个表达式在 Works 表上应用选择操作,筛选出 salary 大于 $100,000 的行,然后通过投影操作获取 person_name 列。

c. 查找居住在 "Miami" 且工资大于 $100,000 的员工姓名:

答:

1)这个查询需要结合前两个查询的条件,并且需要连接 Employee 和 Works 表来获取员工的居住城市和工资信息。

2)首先,我们需要将 Employee 表和 Works 表通过 person_name 进行自然连接,然后选择居住在 "Miami" 且工资大于 $100,000 的记录,最后投影出 person_name。

3)表达式:Πperson_name(σcity='Miami' ∧ salary>100000(Employee ⨝ Works))

4)这个表达式首先通过自然连接操作将 Employee 和 Works 表连接,然后应用选择操作筛选出满足条件的记录,最后通过投影操作获取 person_name 列。


http://www.ppmy.cn/embedded/147068.html

相关文章

linux上vlc安装

方式一:linux可以连外网的 直接使用命令 sudo snap install vlc方式二:linux连不上外网的 我是在虚拟机中下载的,不太好连接外网,可以直接在Ubuntu Software 中进行搜索下载

【现代服务端架构】传统服务器 对比 Serverless

在现代开发中,选择合适的架构是至关重要的。两种非常常见的架构模式分别是 传统服务器架构 和 Serverless。它们各有优缺点,适合不同的应用场景。今天,我就带大家一起对比这两种架构,看看它们的差异,并且帮助你选择最适…

Android v4和v7冲突

android.useAndroidXtrue android.enableJetifiertruev4转成AndroidX

C# 中 Console.WriteLine($“{DateTime.Now.Date}“); win 和 docker容器输出不同

Console.WriteLine($"{DateTime.Now.Date}"); //windowns输出:2024/12/10 0:00:00 //docker容器输出:12/10/2024 00:00:00 这是由于 不同的文化区域(CultureInfo)设置 导致的时间格式差异。在 Windows 系统…

nginx的简单使用

目录 需求分析 文件配置 全局块配置 events块配置 http块 server1.conf文件配置 server2.conf文件配置 效果演示 访问页面 正确服务页面 ​编辑 ​编辑 错误页面 日志展示 server1日志 server2日志 需求分析 需求一: 当主机访问http://localhost:808…

Gatherer、Collector 自定义 Stream 的中间操作、最终操作

这里写目录标题Gatherer、Collector 自定义 Stream 的中间操作、最终操作 collect(Collector) 自定义终止操作泛型方法示例实现 toList Collectors.CollectorImpl 与工厂方法 Collector.of() gather(Gatherer) 自定义中间操作泛型DownstreamIntegratorGatherer 的实例方法&…

vscode中同时运行两个python文件(不用安装插件)

如何在vscode中同时运行两个python文件呢?今天在工作中遇到了这个问题。 查了网上的方法是安装coder runner插件,后来发现自身就有这个功能。所以记录一下,方便后续查找: 这是我的第一个文件,点击右上角的运行旁边的小箭头,有一…

文件上传—阿里云OSS对象存储

目录 一、OSS简介 二、OSS基本使用 1. 注册账号 2. 基本配置 (1) 开通OSS (2) 创建存储空间 (3) 修改权限 (4) 配置完成,上传一张图片,检验是否成功。 (5) 创建AccessKey 三、Java项目集成OSS 1. 导入依赖 2. Result.java代码: …