📜  DBMS 中的关系模型

📅  最后修改于: 2021-09-09 16:23:33             🧑  作者: Mango

关系模型由 EF Codd 提出,以关系或表格的形式对数据进行建模。使用ER图设计数据库的概念模型后,我们需要将概念模型转换为可以使用任何RDBMS语言(如Oracle SQL、MySQL等)实现的关系模型。所以我们将看到什么是关系模型。

什么是关系模型?

关系模型表示数据在关系数据库中的存储方式。关系数据库以关系(表)的形式存储数据。考虑具有属性 ROLL_NO、NAME、ADDRESS、PHONE 和 AGE 的关系 STUDENT,如表 1 所示。

学生

ROLL_NO NAME ADDRESS PHONE AGE
1 RAM DELHI 9455123451 18
2 RAMESH GURGAON 9652431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH DELHI   18

重要术语

  • 属性:属性是定义关系的属性。例如; ROLL_NO姓名
  • 关系模式:关系模式表示关系的名称及其属性。例如; STUDENT (ROLL_NO, NAME, ADDRESS, PHONE and AGE) 是 STUDENT 的关系模式。如果模式具有 1 个以上的关系,则称为关系模式。
  • 元组:关系中的每一行都称为元组。上述关系包含 4 个元组,其中之一如下所示:
1 RAM DELHI 9455123451 18
  • 关系实例:在特定时间实例的关系的元组集合称为关系实例。表 1 显示了 STUDENT 在特定时间的关系实例。只要数据库中有插入、删除或更新,它就会改变。
  • 学位:属性的关系的数字是被称为关系的程度。上面定义的STUDENT关系的度数为 5。
  • 基数:关系中元组的数量称为基数。上面定义的STUDENT关系的基数为 4。
  • 列:列表示特定属性的值集。 ROLL_NO列是从关系 STUDENT 中提取的。
ROLL_NO
1
2
3
4
  • NULL 值:未知或不可用的值称为 NULL 值。它由空格表示。例如; ROLL_NO 4 的 STUDENT 的 PHONE 为 NULL。

关系模型中的约束

在设计关系模型时,我们定义了一些必须满足数据库中数据的条件,称为约束。在数据库中执行任何操作(插入、删除和更新)之前检查这些约束。如果违反任何约束,操作将失败。

域约束:这些是属性级别的约束。属性只能采用域范围内的值。例如,;如果对 STUDENT 关系应用约束 AGE>0,则插入 AGE 的负值将导致失败。

键完整性:数据库中的每个关系都应该至少有一组属性,这些属性唯一地定义了一个元组。这些属性集称为键。例如; STUDENT 中的 ROLL_NO 是一个键。没有两个学生可以有相同的卷号。所以一个键有两个属性:

  • 对于所有元组,它应该是唯一的。
  • 它不能有 NULL 值。

参照完整性:当一个关系的一个属性只能从同一关系或任何其他关系的其他属性中取值时,称为参照完整性。让我们假设我们有 2 个关系

学生

ROLL_NO NAME ADDRESS PHONE AGE BRANCH_CODE
1 RAM DELHI 9455123451 18 CS
2 RAMESH GURGAON 9652431543 18 CS
3 SUJIT ROHTAK 9156253131 20 ECE
4 SURESH DELHI   18 IT

分支

BRANCH_CODE BRANCH_NAME
CS COMPUTER SCIENCE
IT INFORMATION TECHNOLOGY
ECE ELECTRONICS AND COMMUNICATION ENGINEERING
CV CIVIL ENGINEERING

STUDENT 的 BRANCH_CODE 只能取 BRANCH 的 BRANCH_CODE 中存在的值,称为参照完整性约束。引用其他关系的关系称为 REFERENCING RELATION(本例中为 STUDENT),其他关系所引用的关系称为 REFERENCED RELATION(本例中为 BRANCH)。

异常

异常是不规则,或偏离预期或正常状态的东西。在设计数据库时,我们确定了三种类型的异常:插入、更新和删除。

引用关系中的插入异常:

如果引用的属性值中不存在引用属性的值,则我们无法在 REFERENCING RELATION 中插入一行。例如;在 STUDENT 关系中插入 BRANCH_CODE ‘ME’ 的学生将导致错误,因为 BRANCH 的 BRANCH_CODE 中不存在 ‘ME’。

引用关系中的删除/更新异常:

如果 REFERENCED ATTRIBUTE 的值用于 REFERENCING ATTRIBUTE 的值,则我们无法从 REFERENCED RELATION 中删除或更新行。例如;如果我们尝试从 BRANCH_CODE ‘CS’ 的 BRANCH 中删除元组,则会导致错误,因为 ‘CS’ 被 STUDENT 的 BRANCH_CODE 引用,但是如果我们尝试从 BRANCH 中删除带有 BRANCH_CODE CV 的行,它将被删除为引用关系未使用值。可以通过以下方法处理:

ON DELETE CASCADE:如果 REFERENCING ATTRIBUTE 使用的值从 REFERENCED RELATION 中删除,它将从 REFERENCING RELATION 中删除元组。例如;如果我们从 BRANCH 中删除带有 BRANCH_CODE ‘CS’ 的一行,那么与 BRANCH_CODE CS(在这种情况下为 ROLL_NO 1 和 2)的 STUDENT 关系中的行将被删除。

ON UPDATE CASCADE:如果 REFERENCING ATTRIBUTE 使用的属性值在 REFERENCED RELATION 中更新,它将更新 REFERENCING RELATION 中的 REFERENCING ATTRIBUTE。例如;如果我们将 BRANCH 中的一行从 BRANCH_CODE ‘CS’ 更新为 ‘CSE’,那么与 BRANCH_CODE CS 具有 STUDENT 关系的行(在本例中为 ROLL_NO 1 和 2)将更新为 BRANCH_CODE ‘CSE’。

超级钥匙:
任何允许我们在给定关系中识别唯一行(元组)的属性集都称为超级键。在这些超级键中,我们总是可以从中选择一个合适的子集作为主键。此类键称为候选键。如果有两个或多个属性的组合用作主键,则我们将其称为复合键。