数据库系统概念第二章–关系模型介绍

Aki 发布于 2023-02-19 259 次阅读


引言、

关系模型仍然是用于商用数据处理应用的主要数据模型。它之所以占据主要位置,是因为与诸如网络模型或层次模型那样的早期数据模型相比,关系模型以其简易性简化了程序员的工作。它在半个多世纪以来,通过融合各种新的特点和功能,保持了这一地位。在这些新纳入的特性与功能中包括诸如复杂数据类型与存储过程那样的对象--关系特性,对XML数据的支持以及半结构化数据的各种工具。

常见的关系数据库包括:

  1. Oracle:Oracle是一种商业的关系数据库管理系统 (RDBMS),它是全球最大的企业级数据库解决方案之一。它支持事务处理、复制、集群、数据备份和恢复等高级功能。
  2. MySQL:MySQL是一种开源的关系数据库管理系统,它支持跨平台,可在多种操作系统上运行。MySQL通常用于Web应用程序,因为它易于安装、部署和使用。
  3. Microsoft SQL Server:Microsoft SQL Server是一种商业的关系数据库管理系统,它是Microsoft的主要产品之一。它支持存储和检索大量的数据,并且具有强大的数据分析和报告功能。
  4. PostgreSQL:PostgreSQL是一种开源的关系数据库管理系统,它支持高级的数据类型和功能,如复杂查询、事务处理、外键和触发器等。它通常用于企业应用程序和科学计算。
  5. IBM DB2:IBM DB2是一种商业的关系数据库管理系统,它支持多个平台和操作系统。它具有可扩展性、可靠性和安全性,因此被广泛应用于企业级应用程序。

除了以上列出的关系数据库,还有一些其他的关系数据库,如SQLite、Ingres等。

关系数据库的结构、

关系数据库由表(table)的集合构成,每张表被赋予了一个唯一的名称。

下面这张表中,有五个列标题。每一行记录了一组关系。每组关系都有唯一的标识符,如id。

ID姓名身高年龄电话
0乐乐18015null
1小明19212114514
2小刚17241919180

一般来说,表中的一行代表了一组值之间的某种关系,由于一张表就是这种联系的一个集合,从而表这个概念和数学上的关系概念之间有着密切的关联,这也正是关系数据模型名称的由来。

在关系模型中,术语关系(relation)被用来指代表,而术语元组(tuple)被用来指代行。术语属性(attribute)指代的是表中的列,术语关系示例(relation instance)指代一个关系的特定示例,也就是说关系示例包含一组特定的行。上述例子有2个元组,有2个关系示例。

由于关系是元组的集合,所以元组在关系中出现的顺序是无关紧要的。两个关系是相同的表示它们拥有相同的元组集合。

对于关系的每一个属性都存在一个允许取值的集合,成为该属性的域(domain)。上述例子中,年龄属性的域就是所有可能出现的年龄的集合。

我们要求对所有关系r而言,r的所有属性的域都是原子的。如果一个域中的元素被认为是不可再分的单元,则该域就是原子的。例如上述表中的电话属性,它可以存放一组电话,那么电话属性就不是原子的。因为其中的一个元素是电话号码的一个集合,并且它是由子成分的,即集合中的单个电话号码。重点不在于域本身是什么,而在于我们怎样在数据库中使用域中的元素。

空值(null value)是一个特殊的值,他表示值未知或者不存在。如上述关系所示。空值在我们访问和更新数据库时会带来很多困难,因此应尽量避免使用空值。

数据库模式和数据库实例、

当我们谈论数据库时,必须在数据库模式和数据库示例之间进行区分,前者是数据库的逻辑设计,后者是在给定时刻数据库中数据的快照。

数据库模式是指数据库的结构,它定义了在数据库中存储的数据的类型、关系和约束。数据库模式通常使用数据库模式语言(如SQL)来定义。

数据库示例是指数据库中实际存在的数据。它是模式的实例化,是模式的具体应用。数据库示例可以包括表、行、列、记录、索引等实际的数据和元数据。

举例来说,假设我们有一个名为“学生”的数据库,它包括以下两个表:

  • 学生表(Student)
    • 学号(ID):整数,主键
    • 姓名(Name):字符串
    • 年龄(Age):整数
    • 成绩(Grade):实数
  • 课程表(Course)
    • 课程号(ID):整数,主键
    • 课程名称(Name):字符串
    • 学生号(StudentID):整数,外键,参考学生表中的学号
    • 成绩(Grade):实数

这是一个关系数据库的模式,它定义了学生和课程之间的关系,以及学生和课程的属性和约束条件。

如果我们向学生和课程表中添加一些实际数据,例如:

  • 学生表(Student)
    • (101, "张三", 20, 90.5)
    • (102, "李四", 19, 85.0)
  • 课程表(Course)
    • (1, "数学", 101, 88.0)
    • (1, "数学", 102, 79.0)
    • (2, "物理", 101, 92.0)
    • (2, "物理", 102, 88.5)

这是一个关系数据库的示例,它包含了实际的学生和课程数据。这些数据符合模式中定义的结构和约束条件。

码(key)、

我们必须由一种方式来区分一个给定关系中的不同元组。这种区分是用它们的属性来表示,一个元组的所有属性必须能够唯一标识元组。换句话说,一个关系中不可以有两个元组在所有属性上取值完全相同。

在关系数据库中,超码(superkey)、候选码(candidate key)和主码(primary key)是用来定义表的属性和约束的重要概念。

超码(Superkey):一个或多个属性的组合,可以唯一地标识一条记录。超码可以包含不必要的属性,但必须包含唯一标识记录的最小属性集。例如,在一个学生表中,包含学生ID、姓名和电话号码的组合可以唯一标识每个学生,因此这是一个超码,因为学生ID是唯一的。如果使用姓名加电话号码的组合则不是超码,因为这两个东西是有可能相同的!!!

候选码(Candidate Key):在超码的基础上,去掉任何一个属性后仍然可以唯一标识一条记录的属性组合。候选码是最小的超码。在一个学生表中,学生ID是唯一标识每个学生的最小属性集,因此它是一个候选码。

主码(Primary Key):从候选码中选择一个作为主码,主码用来唯一标识一条记录,并且在表中具有唯一性和非空性的属性。主码通常是在设计阶段就确定好的,它可以作为其他表的外键使用。在学生表中,如果选择学生ID作为主码,则学生ID是唯一标识每个学生的属性,而且在表中具有唯一性和非空性,因此它是主码。

接下来考虑关系内容上的另一种类型的约束,成为外码约束。外键约束(Foreign Key Constraint)是一种用于保证数据完整性的约束条件,它确保一个表中的外键值必须匹配另一个表中的主键值。

外键通常在一个表中定义,它引用另一个表的主键,以建立两个表之间的引用关系。被引用的表称为父表(Parent Table),引用的表称为子表(Child Table)。

引用关系是指子表的外键引用了父表的主键。一个子表可以引用多个父表,但一个父表只能被一个子表引用。在一个引用关系中,如果一个子表的外键引用了父表中不存在的主键,则引用关系被破坏,这违反了外键约束。

被引用关系是指父表中的主键被子表的外键引用。在一个被引用关系中,如果父表中的某个主键被子表的一个或多个外键引用,则父表的这个主键就不能被删除或修改,除非同时删除或修改子表中引用该主键的所有外键。

外键约束是一种数据库约束条件,它用于确保引用关系和被引用关系的完整性。外键约束要求在插入或更新数据时,子表的外键必须引用父表中存在的主键。如果子表中的外键值不在父表中,则插入或更新操作将失败,从而保证了数据完整性。

举个例子,假设我们有一个学生表(Student)和一个课程表(Course),学生表包含学生的ID、姓名和年龄,课程表包含课程的ID、名称和授课老师。我们可以在课程表中添加一个外键(TeacherID),引用一个教师表(Teacher)中的主键(ID),以建立课程表和教师表之间的引用关系。这样,每个课程就与一个教师关联起来了。同时,我们可以为课程表中的外键(TeacherID)添加外键约束,以确保在插入或更新课程数据时,课程表中的TeacherID必须引用教师表中存在的ID,从而保证了数据完整性。