数据库原理与应用(SQL Server)笔记——第二章 关系数据库

一、关系数据库的基本概念

(一)关系数据库的定义

关系数据库是一种建立在关系模型的基础上的数据库,通过二维表来表示实体之间的联系。二维表由行与列组成,表中的行、列次序无关。

(二)基本表、视图

在关系数据库中,关系通常表示为一个表,也称为基本表,即一个关系对应一个基本表,每个关系(表)都有其特定的行与列。另外,每个基本表是独立存在的,都有其相应的内容。视图是从一个或多个基本表中导出的表,也可以将这个表称为查询表。视图是基于基本表构建的,当基本表的数据发生变化时,视图中的数据也会相应地发生变化,但当视图变化,基本表不一定变化。

例如,只是对视图的展示方式进行修改时,并不会影响基本表;而对视图通过特定的语句来修改,则会影响到基本表。

对于下面两个表,通过销售员信息表和订单信息表查询所有员工中有订单销售员的信息表:
在这里插入图片描述
所导出来的表即为视图,它是基于表1和表2两个基本表构建的:
在这里插入图片描述

可以根据基本表来查询,也可以根据某一个查询来建立新的查询,即嵌套查询,也称为子查询,后面的知识会学到。

(三)元组、属性、域

简单的来说,行是元组,列是属性。元组就是数据表中的一行,即表的每行对应一个元组。数据表中每列为属性,且属性的取值范围称为域,即每一个属性都有一个值域。

注:①同一个关系的任意两个元组不能完全相同,否则会违背完整性约束,但不同的元组可以有相同的属性值。
②关系数据库文件中的各个元组前后顺序可以随意颠倒,不会影响库中的数据关系。

例如,下图商品种类信息表中,包含了一件商品的种类ID、种类名称以及描述,其中每一行(每一元组)都代表了一件商品的相关信息;商品信息表中库存量为一个属性,它有相应的值域(取值范围)。
在这里插入图片描述

(四)候选码、主码、外码

数据表中用于唯一标识一个元组的标识符称为码,也称为数据库关键码。而候选码是码的子集,具有唯一性、最小性以及不可再分性等特点。

在一个关系中一般有多个候选码,只能选择一个候选码作为主码,主码可由一个或多个属性组成;外码是另一个表的主码,用于建立表与表之间的联系,通过外码可以保证表与表之间的一致性。例如,上面有两个表,商品种类信息表和商品信息表中,一件商品关联着其一个商品种类(CategoryID)。另外,外码不一定与主码同名称。

主键=主码,外键=外码,在数据库中的大多数情况下是可以互换使用的。

二、关系模型

关系模型是数据库系统(DBS)的核心和基础,由数据结构、数据操作以及数据完整性约束三要素组成。数据结构是静态特征,数据操作是动态特征,数据完整性约束是一组规则集合。

常用的数据模型有层次模型(树状)、网状模型(网状)、关系模型(关系)、半结构化数据模型、面向对象模型等。数据库系统中最常用的模型是关系模型,其通过记录组或数据表的形式来组织数据。另外,层次模型和网状模型也可以统称为格式化模型。

关系模型采用关系的形式来组织数据,即一个关系就是一张二维表,二维表由行与列组成,其中用来表示实体的是元组,用来表示实体集的是二维表。

三、关系的完整性约束

关系的完整性约束有三种,分别是实体完整性、参照完整性和用户自定义完整性,三个完整性要求共同保证了数据库中的数据准确、一致和有效。其中,实体完整性和参照完整性两者是关系模型必须满足的完整性约束。

(一)实体完整性

表中每一元组(行)的主码(主键)都是唯一的,且不能取空值,否则违反了实体完整性约束。例如,下面学生信息表中,学号是主键,实体完整性约束每个学生的学号必须是唯一的,且不能为空,通过学号即可准确地标识学生。

学号 年龄 姓名
1901 15 李雅雯
1902 14 陈晓涵
1903 15 赵欣怡
16 钱梦琪

由于最后一个元组的主码缺失为空,所以违反了实体完整性约束。

(二)参照完整性

参照完整性规则就是定义主码(主键)和外码(外键)之间的引用规则,指的是两个表之间的数据完整性约束,一个表的外码参考另一个表的主码,外码可以为空值或非空值。另外,为保证数据库中的数据完整性和一致性,参照完整性规则要求不允许参照不存在的元组。

(三)用户自定义完整性

用户自定义完整性是可以允许数据库管理员根据特定的实际要求来为数据库制定额外的数据完整性规则。

例如,关系:学生(学号,姓名,性别,年级,班级),若规定性别是由两个字符组成的字符串,则这一规定就属于用户自定义完整性约束。

四、关系操作

(一)关系操作的概念

关系操作的特点是集合操作,操作的对象和结果都是集合。关系操作语言是数据库管理员用来操作数据库的工具,可分为关系代数语言、关系演算语言以及结构化查询语言三种,关系代数语言通过对关系运算表达查询,关系演算语言通过使用谓词来表达查询,而结构化查询语言具有前两者的共同特点。

关系操作语言
代数语言
演算语言
结构化查询语言
SQL

(二)关系代数语言

关系代数通过对关系的运算来查询,其运算对象和结果都是关系,传统的集合运算有并、交、差和笛卡尔积运算,这些运算都是从元组(行)的角度来进行运算。专门的关系运算有选择、投影、连接、除运算,这些运算不仅涉及元组(行),也涉及属性(列)。

关系运算 符号描述 备注
传统的集合运算 ∪、∩、-、× 并、交、差、笛卡尔积
专门的关系运算 σ、π、⋈、÷ 选择、投影、连接、除

1、差
关系R和关系S的差记为R-S,运算结果为属于R,但不属于S的所有元组(行)组成。

例如,下图有三个关系R、S和T,关系T是由关系R和S通过差运算得到的。

在这里插入图片描述
2、笛卡尔积(广义)
关系R和关系S的笛卡尔积记为R×S,若关系R有r个元组(行),关系S有s个元组(行),则R×S有r×s个元组。

例如,下图有三个关系R、S和T,关系T是由关系R和S通过笛卡尔积运算得到的,关系R有3行,关系R有3行,所以关系T有3×3=9行。

在这里插入图片描述
3、选择
在关系R中选出满足一定条件F的元组称为选择,其中F为逻辑表达式,记为σF(R)。

例如,下图σA=0(R)是由关系R中选出满足A属性中值为0的元组。

在这里插入图片描述
4、投影
在关系R中选出若干属性(列)A组成新的关系称为投影,记为πA(R)。

例如,下图在关系R中选出A、C、D属性组成。

在这里插入图片描述
5、连接
简单的来说,连接就是从两个关系的笛卡尔积中选取属性间满足一定条件的元组的操作,有以下连接方式:
1、等值连接:记关系R和关系S的笛卡尔积为R×S,从R×S中选取中选取相等属性值(列)的元组(行)组成。
2、自然连接:记关系R和关系S的笛卡尔积为R×S,从R×S中选取中除去重复属性值(列)的元组(行),剩下的元组留下组成。自然连接也可以解释为通过两者的公共域的相等值进行连接,并把重复的属性和列去掉。

例如,下图中关系R和S通过自然连接得到关系T,是通过相等值B进行连接所得的。

在这里插入图片描述
3、外连接:用于返回匹配连接条件的属性值(行)以及不满足连接条件的属性值(行),外连接包括左外连接和右外连接。另外,还有全外连接,其能获取两个表中的所有记录,包括那些没有匹配项的记录,即没有匹配的填充为NULL(空值)。

(三)结构化查询语言

SQL即为结构化查询语言,是关系数据库的标准语言。SQL语言可分为以下四类功能:
1、数据定义语言(DDL)
在数据库管理系统中,通过数据定义语言来定义三种模式:外模式、模式和内模式。同时,该语言用于定义数据库和相关对象。例如,DDL包括CREATE、ALTER、DROP等语句。
2、数据操纵语言(DML)
操纵即为修改,DML主要用于修改数据库中的数据。例如,对数据进行增加、删除、修改等,对应INSERT、UPDATE、DELETE等语句。
3、数据查询语言(DQL)
DQL主要用于查询数据库中的数据,例如,通过SELECT语句进行查询。
4、数据控制语言(DCL)
DCL主要用于控制用户对数据库的操作权限,例如,DCL包括撤销用户权限、授予用户权限等,对应REVOKE、GRANT等语句。

最近更新

  1. TCP协议是安全的吗?

    2024-03-31 22:32:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-31 22:32:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-31 22:32:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-31 22:32:03       20 阅读

热门阅读

  1. 5.94 BCC工具之cachetop.py解读

    2024-03-31 22:32:03       18 阅读
  2. 怎么使用Redis模拟Session

    2024-03-31 22:32:03       16 阅读
  3. DDPM pytorch代码详细注释

    2024-03-31 22:32:03       18 阅读
  4. 学习笔记之嵌入式八股文(C语言)

    2024-03-31 22:32:03       14 阅读
  5. 2024.2.3力扣每日一题——石子游戏7

    2024-03-31 22:32:03       15 阅读
  6. 6 字符串、元组和字典

    2024-03-31 22:32:03       13 阅读
  7. Unity 通过鼠标移动和LineRenderer组件实现画线功能

    2024-03-31 22:32:03       15 阅读
  8. stm32通过串口发送float数据的方法

    2024-03-31 22:32:03       13 阅读
  9. 求整数各个数位上的数字之和 C语言

    2024-03-31 22:32:03       14 阅读
  10. C++ //CCF-CSP计算机软件能力认证 201312-2 ISBN号码

    2024-03-31 22:32:03       15 阅读