Skip to content

数据库 (6 分 51 ~ 56 题)

基本概念

1.数据库与数据库管理系统

  • 数据库系统 DBS :广义上讲是由数据库、硬件、软件和人员组成的,其中管理的对象是数据

    • 数据库 长期存储在计算机内的、有组织的、可共享的数据集合
    • 硬件 构成计算机系统的各种物理设备,包括存储数据所需要的外部设备
    • 软件 包括操作系统、数据库管理系统及应用程序
    • 人员 系统分析员和数据库设计人员,应用程序员,最终用户,数据库管理员

2.数据库管理系统的分类

  • 关系数据库 RDBS
  • 面向对象数据库系统 OOBS
  • 对象关系数据库系统 ORDBS

3.数据库的三级模式结构

三级模式结构

是数据库管理系统内的系统结构

  • 模式

    • 也称概念模式。是数据库中全体数据的逻辑结构和特征的描述。由若干个概念记录类型组成,只涉及行的描述,不涉及具体的值。
    • 对应数据库的基本表
  • 外模式

    • 也称用户模式或子模式。是用户与数据库系统的接口。是用户用到的那部分数据的描述,有若干个外部记录类型组成。
    • 对应数据库的视图
  • 内模式

    • 也称存储模式,是数据物理结构和存储方式的描述。是数据在数据库内部的表示方式,定义所有的内部记录类型、索引和文件的组织方式以及数据控制等方面的细节。
    • 对应数据库据的存储文件

两级映像

数据库系统在三级模式之间提供了两级映像,即模式/内模式映像和外模式/模式映像。

  • 模式/内模式映像 。该映像存在于 概念级和内部级 之间,实现了 概念模式到内模式 之间的相互转换。( 物理 独立性 )

    • 修改概念模式和内模式之间的映像,以保证物理独立性。
  • 外模式/模式映像 。该映像存在于 外部级和概念级 之间,实现了 外模式到概念模式 之间的相互转换。( 逻辑 独立性 )

    • 修改外模式和概念模式之间的映像,以保证逻辑独立性。

数据模型

1.分类

  • 概念数据模型

    • 也称信息模型。是按用户的观点对数据和信息建模,是现实世界到信息世界的第一层抽象, 强调其语义表达功能,易于用户理解,是用户和数据库设计人员交流的语言,主要用于数据库设计。
    • 这类模型中最著名的是实体联系模型,简称 E-R 模型
  • 基本数据模型

    • 它是按计算机系统的观点对数据建模,是现实世界数据特征的抽象,用于 DBMS 的实现。
    • 基本的数据模型有层次模型、网状模型、关系模型和面向对象模型(OOM)

2.数据模型三要素

  • 数据结构

    • 所研究的对象类型的集合,对系统静态特性的描述。
  • 数据操作

    • 对数据库中各种对象(型)的实例(值)允许执行的操作集合,包括操作及操作规则。数据操作是对系统动态特性的描述。
  • 数据的约束条件

    • 是一组 完整性规则的集合
    • 对于具体的应用数据必须遵循特定的语义约束条件,以保证数据的正确、有效、相容。

3.ER 模型

实体-联系模型简称为 E-R 模型。

主要概念是实体、联系和属性。

  • 实体

    • 现实世界中可以区别于其他对象的“事件”或“物体”。
    • 每一个实体由一组特定属性来表示,其中的某一部分属性可以唯一表示实体。
    • 实体集是具有相同属性的实体集合。
  • 联系

    • 实体之间的对应关系可以称为联系。

    • 实体的联系分为实体内部的联系和实体与实体之间的联系。实体集内部的联系反映数据在同一记录内部各字段之间的联系。

    • 实体集之间的联系类型

      • 一对一联系

        • 一个人一个脑袋
      • 一对多联系

        • 一个老师多个学生
      • 多对多联系

        • 多门课程有不同的学生选修
  • 属性

    • **是实体某方面的特性。**在同一实体集中,每个实体的属性及其域是相同的,但是可能取不同的值。

    • E-R 模型中属性分类:

      • 简单属性和复合属性

        • 简单属性是原子的 不可再分的
      • 复合属性是可以细分为更小的部分

      • 单值属性和多值属性

        • 如果定义的属性对于一个特定的实体只有一个值,这样的属性叫做单值属性。
        • 如果定义的属性对应一组值,这样的属性叫做多值数型。
      • NULL 属性

        • 实体上某个属性没有值或者属性未知时,使用 NULL,表示无意义
      • 派生属性

        • 可以由其他属性得来的属性
  • E-R 方法

    • 直接从现实世界中抽象出实体和实体间的联系,直观的用 E-R 图来表示。
ER图主要构件

关系数据库的基本概念

  • 属性和域
    • 描述一个事物,常常取其若干特征来表示。这些特征成为属性。
    • 每个属性的取值范围的集合,才成为该属性的域。

对于关系数据模型中,对域增加了一个限制,所有的域都应是原子数据的结合。关系数据模型的这种限制称为第一范式条件1NF

基本术语

  • 关系

    • 一个关系就是一张二维表。每个关系有一个关系名。
  • 元组

    • 表中的一行即为一个元组,对应存储文件中的一个记录值。
  • 属性

    • 表中的列称为属性。每一列有一个属性名。属性值相当于记录中的数据项或者字段值。
  • 关系模式

    • 对关系的描述成为关系模式。由关系和其属性集合构成。
    • 关系模式的格式为
      • 关系名(属性名 1,属性名 2,...,属性名 n)

关系相关的名词

  • 目或度

    • R 表示关系的名字,n 表示关系的目或度
  • 候选码

    • 若关系中的某一属性或属性组的值能唯一标识一个元组,则称该属性或属性组为候选码
  • 主码

    • 若一个关系有多个候选码,则选定其中一个为主码
  • 主属性

    • 所有候选码都是主属性,其他都是非主属性
  • 外码(外键)

    • 如果关系模式 R 中的属性或者属性组非该关系的码。但他是其他关系的码,那么该属性集对关系模式 R 而言是外码。
  • 全码

    • 关系模式的 所有属性组是这个关系模式的候选码,则称为全码。
  • 超码(超键)

    • 一个包含码的属性集称为超码。
    • 若 学号为码,则(学号,姓名)为超码。

完整性约束

关系的描述成为关系模式

  • 实体完整性

    • 关系中主码的值不能为空或部分为空。
    • 主码中的属性即主属性不能为空值。
  • 参照完整性

    • 外码的值必须在关系中找到或者为空。
  • 用户定义的完整性

    • 用户对某一具体数据指定的约束条件进行校验。

笛卡尔积、并、差、交

在集合论和关系数据库中,笛卡尔积、并、差、交是基本的集合运算。这些运算在关系型数据库查询(如 SQL)中特别有用。以下是这些运算的简要描述:

  1. 笛卡尔积(Cartesian Product):

    • 定义:对于两个集合 A 和 B,A 和 B 的笛卡尔积是 A 中所有元素与 B 中所有元素的所有可能有序对的集合。
      • 符号:A × B
      • 示例:如果 A = {1, 2} 且 B = {a, b},则 A × B = {(1, a), (1, b), (2, a), (2, b)}
      • 在 SQL 中,CROSS JOIN 类似于笛卡尔积,但可能受到 WHERE 子句或其他条件的限制。
  2. 并(Union):

  • 定义:对于两个集合 A 和 B,A 和 B 的并集是包含 A 和 B 中所有元素(但不重复)的集合。
    • 符号:A ∪ B
    • 示例:如果 A = {1, 2, 3} 且 B = {2, 3, 4},则 A ∪ B = {1, 2, 3, 4}
    • 在 SQL 中,使用 UNION 或 UNION ALL 来合并两个或多个 SELECT 语句的结果集。
  1. 差(Difference):
  • 定义:对于两个集合 A 和 B,A 与 B 的差集是包含 A 中存在但 B 中不存在的所有元素的集合。
    • 符号:A - B 或 A \ B
    • 示例:如果 A = {1, 2, 3, 4} 且 B = {2, 3},则 A - B = {1, 4}
    • 在 SQL 中,使用 NOT IN 或 LEFT JOIN ... WHERE ... IS NULL 来获取差集。
  1. 交(Intersection):
  • 定义:对于两个集合 A 和 B,A 与 B 的交集是包含 A 和 B 中都存在的所有元素的集合。
    • 符号:A ∩ B
    • 示例:如果 A = {1, 2, 3} 且 B = {2, 3, 4},则 A ∩ B = {2, 3}
    • 在 SQL 中,使用 INTERSECT 来获取两个或多个 SELECT 语句的结果集的交集。

在关系数据库中,这些集合运算通常应用于关系(表)和元组(行),而不是简单的集合元素。在这些情况下,可能还需要考虑属性(列)的匹配和比较。

投影、选择

投影和选择在数据库和关系代数中有着不同的含义

  • 投影(Projection)是一种在关系代数中的操作,用于从关系表中选择某些列组成新的关系表。

    • 具体来说,投影操作可以帮助用户限制查询结果集的大小,提高查询效率,并且可以简化查询语句的编写。通过投影操作,用户可以只选择所需的列进行查询,从而减少网络传输和数据库的负载。
    • 例如,假设有一个名为 employees 的员工表,包含着许多列,如姓名、年龄、工资等。如果用户只需要查询员工的姓名和工资,就可以使用投影操作来选择这两个列。
  • 选择(Selection)则更多地在数据库管理系统(DBMS)的设计和实施阶段出现。

    • 在这个上下文中,选择指的是根据特定的需求和目标,从多个可用的数据库管理系统(DBMS)中选择最合适的数据库。这是一个战略层面的决策,涉及到对数据库系统整体性能和功能性的考虑。

总的来说,投影和选择在数据库和关系代数中各自扮演着不同的角色,投影关注于从关系表中选择特定的列,而选择则关注于在数据库设计阶段从多个数据库系统中做出选择。

等值连接与自然连接

关系数据库中的等值连接和自然连接是两种常见的连接操作,用于在多个表之间建立关系并检索数据。以下是它们之间的区别和联系:

等值连接(Equijoin)

  • 定义:等值连接是条件连接(或称 θ 连接)在连接运算符为“=”号时的一个特例。具体来说,它是从两个关系的笛卡尔积中选取属性间满足“相等”条件的元组。这些属性称为联接属性或键属性。
  • 表示:等值连接可以表示为 R.A=S.B,其中 R 和 S 是关系,A 和 B 是属性组,且 A 和 B 的度数相同且可比。
  • 特点:等值连接只要求属性组 A 和 B 的值相等,而不要求属性名相同。此外,等值连接的结果中不会去掉重复的属性列。

自然连接(Naturaljoin)

  • 定义:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组(即属性名和数据类型都必须相同),并且在结果中把重复的属性列去掉。
  • 表示:自然连接可以表示为 R S(注意这里没有明确的属性组表示,因为它基于同名的属性进行连接)。
  • 特点:自然连接在比较属性时,不仅要求值相等,还要求属性名相同。此外,自然连接的结果会去掉重复的属性列,使得结果更为简洁。

区别与联系

  1. 属性要求:等值连接只要求属性值相等,而不要求属性名相同;而自然连接则要求属性值相等且属性名相同。
  2. 结果集:等值连接的结果中不会去掉重复的属性列;而自然连接的结果会去掉重复的属性列。
  3. 使用场景:由于自然连接更为严格且结果更为简洁,因此在实际应用中,我们一般更倾向于使用自然连接。然而,在某些特殊情况下,如当两个表中的属性名不同但值可以匹配时,我们可能需要使用等值连接。

总的来说,等值连接和自然连接都是关系数据库中用于建立表间关系的重要操作。它们之间的主要区别在于对属性和结果集的处理方式。在实际应用中,我们可以根据具体需求选择使用哪种连接操作。

自然连接例子

自然连接(Natural Join)在集合论的视角下可以理解为两个关系(或集合)基于它们的公共属性进行连接,并且结果集中去除重复的公共属性。以下是一个基于集合形式的自然连接例子:

假设我们有两个关系(或集合)R 和 S,它们的属性分别是:

关系 R:

  • A
  • B
  • C
  • D

关系 S:

  • B
  • C
  • E

其中,A、D 是关系 R 特有的属性,E 是关系 S 特有的属性,而 B 和 C 是两个关系的公共属性。

现在,我们想要对这两个关系进行自然连接。自然连接会基于公共属性 B 和 C 进行匹配,并且结果集中只保留一个 B 和一个 C(因为它们是重复的)。

假设关系 R 和 S 的元组如下:

关系 R 的元组:

  • r1: (a1, b1, c1, d1)
  • r2: (a2, b2, c2, d2)
  • r3: (a3, b3, c1, d3) // 注意这里 c1 和 r1 的 c1 相同,但其他属性不同

关系 S 的元组:

  • s1: (b1, c1, e1)
  • s2: (b2, c4, e2) // 注意这里 c4 和 R 中的任何 c 都不相同
  • s3: (b3, c1, e3) // 注意这里 b3 和 c1 与 R 中的 r3 匹配

进行自然连接后,我们得到的结果关系(或集合)将是:

  • (a1, b1, c1, d1, e1) // 来自 r1 和 s1 的匹配
  • (a2, b2, c2, d2, NULL) // r2 在 S 中没有匹配,所以 E 是 NULL
  • (a3, b3, c1, d3, e3) // 来自 r3 和 s3 的匹配

注意:

  • 结果集中只包含了一次 B 和 C 属性,因为它们是重复的。
  • 对于在 R 中有但在 S 中没有匹配的行(如 r2),结果集中对应的 E 属性将是 NULL 或缺失。
  • 自然连接不会包括在 S 中有但在 R 中没有匹配的行(如 s2),因为自然连接是基于两个关系的公共属性进行的。如果你想要包括这些行,你可能需要使用左外连接(Left Outer Join)。

左外连接、右外连接、全外连接

当然可以,以下是左外连接、右外连接和全外连接的详细解释及示例:

  1. 左外连接(LEFT OUTER JOIN 或 LEFT JOIN)
  • 定义:左外连接返回左表中的所有记录以及与右表匹配的记录。如果左表的某条记录在右表中没有匹配,则结果中对应右表的部分将包含 NULL 值。

    • 示例:假设有两个表,一个是学生表(students),一个是成绩表(scores)。学生表有一个学生 ID(student_id)和学生姓名(name),成绩表有一个学生 ID(student_id)和成绩(score)。如果我们想知道每个学生的姓名和他们的成绩(如果有的话),我们可以使用左外连接。
  • SQL 查询示例:

sql
SELECT students.name, scores.score
FROM students
LEFT JOIN scores ON students.student_id = scores.student_id;

这个查询将返回学生表中的所有学生,以及与之匹配的成绩(如果有的话)。对于没有成绩的学生,成绩列将显示 NULL。

  1. 右外连接(RIGHT OUTER JOIN 或 RIGHT JOIN)
  • 定义:右外连接返回右表中的所有记录以及与左表匹配的记录。如果右表的某条记录在左表中没有匹配,则结果中对应左表的部分将包含 NULL 值。

    • 示例:使用上面的学生表和成绩表,如果我们想知道哪些成绩有对应的学生(即使学生表中没有该学生的信息),我们可以使用右外连接。但请注意,在实际应用中,右外连接不如左外连接常用,因为你可以通过调换表和连接的方向来实现相同的效果。
  • SQL 查询示例:

sql
SELECT students.name, scores.score
FROM scores
RIGHT JOIN students ON scores.student_id = students.student_id;

这个查询将返回成绩表中的所有成绩,以及与之匹配的学生姓名(如果有的话)。对于没有学生的成绩,学生姓名列将显示 NULL。

  1. 全外连接(FULL OUTER JOIN 或 FULL JOIN)
  • 定义:全外连接返回左表和右表中的所有记录。如果某一边的表中没有匹配的记录,则结果中对应的一边将包含 NULL 值。

    • 示例:再次使用学生表和成绩表,如果我们想知道每个学生的姓名和他们的成绩(无论是否有成绩),以及所有成绩是否有对应的学生(无论是否有学生信息),我们可以使用全外连接。
  • SQL 查询示例:

sql
SELECT students.name, scores.score
FROM students
FULL JOIN scores ON students.student_id = scores.student_id;

这个查询将返回学生表中的所有学生和成绩表中的所有成绩。对于没有成绩的学生,成绩列将显示 NULL;对于没有学生的成绩,学生姓名列将显示 NULL。

区别

左外连接(LEFT OUTER JOIN 或 LEFT JOIN)、右外连接(RIGHT OUTER JOIN 或 RIGHT JOIN)和全外连接(FULL OUTER JOIN 或 FULL JOIN)之间的主要区别在于它们如何处理那些在连接条件中没有匹配的行。

  1. 左外连接(LEFT OUTER JOIN 或 LEFT JOIN)
  • 它会返回左表中的所有记录,以及与右表匹配的记录。
    • 如果左表中的某条记录在右表中没有匹配,则结果集中对应右表的部分将包含 NULL 值。
    • 适用于想要获取左表中的所有记录,并查看它们是否与右表中的记录有匹配的情况。
  1. 右外连接(RIGHT OUTER JOIN 或 RIGHT JOIN)
  • 它会返回右表中的所有记录,以及与左表匹配的记录。
    • 如果右表中的某条记录在左表中没有匹配,则结果集中对应左表的部分将包含 NULL 值。
    • 尽管右外连接在技术上存在,但在实际使用中,它不如左外连接常见。因为你可以通过简单地调换两个表的位置和使用左外连接来达到相同的效果。
  1. 全外连接(FULL OUTER JOIN 或 FULL JOIN)
    • 它会返回左表和右表中的所有记录。
    • 如果某一边的表中没有匹配的记录,则结果中对应的一边将包含 NULL 值。
    • 适用于想要获取两个表中的所有记录,并查看它们之间的匹配情况。

总结

  • 左外连接和右外连接的主要区别在于哪个表被视为“主”表或“左”表。左外连接会返回左表中的所有记录,而右外连接会返回右表中的所有记录。
  • 全外连接则结合了左外连接和右外连接的特点,返回两个表中的所有记录。

在选择使用哪种连接时,你应该根据你的查询需求和你想要获取的数据来决定。