第 4 章 关系模型的基本原理

文章目录

  • 第 4 章 关系模型的基本原理
    • 1. 关系模型的基本概念
      • 1.1 基本术语
      • 1.2 关系的特征
    • 2. 数据完整性
      • 2.1 三类完整性规则
        • 2.1.1 实体完整性
        • 2.1.2 参照完整性
        • 2.1.3 域完整性
    • 3. 【例1】大学数据库
      • 3.1 学生(Students)关系
      • 3.2 课程(Courses)关系
      • 3.3 选课(Enrollments)关系
      • 3.4 示例数据
    • 4. MySQL约束控制
      • 4.1 非空(NOT NULL)约束
      • 4.2 主键(PRIMARY KEY)约束
      • 4.3 唯一(UNIQUE)约束
      • 4.4 检查(CHECK)约束
      • 4.5 外键(FOREING KEY) 约束
      • 4.6 自增(AUTO_INCREMENT)约束
      • 4.7 默认值(DEFAULT)约束
    • 5. 关系代数
      • 5.1 关系代数的基本操作
        • 5.1.1 并(Union)
        • 5.1.2 差(Difference)
        • 5.1.3 笛卡尔积(Cartesian Product)
        • 5.1.4 投影(Projection)
        • 5.1.5 选择(Selection)
      • 5.2 关系代数的组合操作
        • 5.2.1 交(Intersection)
        • 5.2.2 连接(Join)
        • 5.2.3 除(Division)


第 4 章 关系模型的基本原理

关系模型是数据库系统中使用最广泛的一种数据模型。它基于关系数据库理论,使用二维表来表示数据。在这篇文章中,我们将探讨关系模型的基本概念、特征以及数据完整性的三大规则,并通过一个大学数据库的例子来具体展示这些概念。

1. 关系模型的基本概念

1.1 基本术语

  • 关系(Relation):关系模型中的表,由行和列组成,每一行称为一个元组(Tuple),每一列称为一个属性(Attribute)。
  • 元组(Tuple):关系中的一行,代表一个实体或实体的一个实例。
  • 属性(Attribute):关系的一列,代表实体的一个特征或属性。
  • 域(Domain):属性的取值范围,即该属性可以取的值的集合。
  • 键(Key):用于标识元组的属性或属性集合。包括候选键、主键和外键。
    • 候选键(Candidate Key):能够唯一标识关系中每个元组的属性集合。
    • 主键(Primary Key):从候选键中选定的一个,用于唯一标识每个元组。
    • 外键(Foreign Key):在一个关系中用于参照另一个关系的主键的属性。
  • 关系模式(Relational Schema):关系的结构描述,包括关系名、属性名和属性的类型。

1.2 关系的特征

关系模型具有以下特征:

  • 二维表结构:数据以表格的形式组织,每个表格由行和列组成。
  • 每列的唯一性:每一列都有唯一的列名,并且每一列的数据类型相同。
  • 每行的唯一性:每一行都有一个唯一的标识,通常由主键来标识。
  • 列的顺序无关紧要:列的顺序不影响数据的意义。
  • 行的顺序无关紧要:行的顺序不影响数据的意义。

2. 数据完整性

数据完整性是指数据的正确性和一致性,关系模型通过一系列规则来保证数据的完整性。

2.1 三类完整性规则

关系模型中的完整性规则分为以下三类:

  1. 实体完整性:要求关系中必须包含主键,并且主键的每个属性都不能取空值(NULL)。
  2. 参照完整性:要求外键的值必须等于另一个关系中的主键值,或者为空值(NULL)。
  3. 域完整性:要求属性的值必须满足某种约束条件,例如,数值范围、格式、取值集合等。
2.1.1 实体完整性

实体完整性规则确保每个元组都可以被唯一地识别。这通常通过在关系中定义一个主键来实现。主键的属性值不能为空,以确保每个元组都可以被唯一地标识。

2.1.2 参照完整性

参照完整性规则确保关系之间的数据一致性。当一个关系包含另一个关系的主键作为外键时,必须满足以下条件之一:

  • 外键的值必须在参照关系中作为主键存在。
  • 外键的值可以为空,表示该元组与参照关系没有关联。
2.1.3 域完整性

域完整性规则确保属性值符合定义的约束条件。这些约束条件可以是:

  • 取值范围:属性值必须在特定的数值范围内。
  • 格式:属性值必须符合特定的格式,例如,日期格式、电话号码格式等。
  • 取值集合:属性值必须来自预定义的值集合。

3. 【例1】大学数据库

让我们通过一个具体的例子来说明关系模型的基本原理。

假设我们正在设计一个大学数据库,其中包含学生、课程和选课信息。我们可以定义以下三个关系:

  1. 学生(Students)
  2. 课程(Courses)
  3. 选课(Enrollments)

3.1 学生(Students)关系

  • 学号(StudentID):主键,唯一标识一个学生。
  • 姓名(Name):学生的姓名。
  • 年龄(Age):学生的年龄。
  • 专业(Major):学生的专业。

3.2 课程(Courses)关系

  • 课程号(CourseID):主键,唯一标识一个课程。
  • 课程名(CourseName):课程的名称。
  • 学分(Credits):课程的学分。

3.3 选课(Enrollments)关系

  • 学号(StudentID):外键,参照学生关系。
  • 课程号(CourseID):外键,参照课程关系。
  • 成绩(Grade):学生在该课程的成绩。

3.4 示例数据

  • 学生(Students)

    StudentIDNameAgeMajor
    S001Alice20Computer Science
    S002Bob22Physics
  • 课程(Courses)

    CourseIDCourseNameCredits
    C001Databases3
    C002Quantum Physics4
  • 选课(Enrollments)

    StudentIDCourseIDGrade
    S001C001A
    S002C002B

在这个例子中,我们可以看到:

  • 每个关系都有一个主键(StudentID, CourseID)。
  • 选课关系有两个外键(StudentID, CourseID),它们分别参照学生和课程关系。
  • 每个属性都有定义的域,比如年龄和学分。

4. MySQL约束控制

在MySQL数据库中,约束用于规定存储在表中的数据必须满足的条件,以确保数据的正确性和完整性。以下是MySQL中常见的几种约束及其使用示例。

4.1 非空(NOT NULL)约束

非空约束用于确保列中的每个记录必须含有值,不可以是NULL。

示例

CREATE TABLE Students (StudentID INT NOT NULL,Name VARCHAR(100) NOT NULL,Age INT NOT NULL
);

在这个例子中,StudentIDNameAge列都不能包含NULL值。

4.2 主键(PRIMARY KEY)约束

主键约束用于唯一标识表中的每一行记录。

示例

CREATE TABLE Students (StudentID INT NOT NULL,Name VARCHAR(100) NOT NULL,Age INT NOT NULL,PRIMARY KEY (StudentID)
);

在这个例子中,StudentID是主键,每个学生的ID都是唯一的。

删除主键约束

ALTER TABLE Students DROP PRIMARY KEY;

这个命令会删除Students表的主键约束。

4.3 唯一(UNIQUE)约束

唯一约束用于确保列中的所有值都是唯一的。

建立唯一约束的示例

CREATE TABLE Students (StudentID INT NOT NULL,Email VARCHAR(100) NOT NULL,UNIQUE (Email)
);

在这个例子中,Email列设置了唯一约束,同一个邮箱不能被多个学生使用。

4.4 检查(CHECK)约束

检查约束用于确保列中的值符合一个指定的条件。

示例

CREATE TABLE Students (StudentID INT NOT NULL,Age INT CHECK (Age > 0 AND Age < 130)
);

在这个例子中,Age列的值必须在1到129之间。

4.5 外键(FOREING KEY) 约束

外键约束用于防止破坏表之间的连接。

示例

CREATE TABLE Enrollments (StudentID INT,CourseID INT,Grade CHAR(2),FOREIGN KEY (StudentID) REFERENCES Students(StudentID),FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);

在这个例子中,Enrollments表的StudentIDCourseID是外键,它们分别参照Students表和Courses表的主键。

请注意,MySQL在早期版本中不支持CHECK约束,虽然在8.0.16及以后的版本中已经支持。如果你使用的是早期版本,可能需要通过触发器或其他方法来实现类似的功能。

4.6 自增(AUTO_INCREMENT)约束

自增约束用于自动生成数字,通常用于主键字段,确保每一行都有一个唯一的标识符。

示例

CREATE TABLE Employees (EmployeeID INT NOT NULL AUTO_INCREMENT,Name VARCHAR(100) NOT NULL,Salary DECIMAL(10, 2) NOT NULL,PRIMARY KEY (EmployeeID)
);

在这个例子中,EmployeeID 是自增字段,每次插入新员工记录时,EmployeeID 会自动递增。

4.7 默认值(DEFAULT)约束

默认值约束用于为列指定一个默认值,如果在插入记录时未指定该列的值,则使用默认值。

示例

CREATE TABLE Employees (EmployeeID INT NOT NULL AUTO_INCREMENT,Name VARCHAR(100) NOT NULL,Status ENUM('Active', 'Inactive') NOT NULL DEFAULT 'Active',Salary DECIMAL(10, 2) NOT NULL,PRIMARY KEY (EmployeeID)
);

在这个例子中,Status 列有一个默认值 Active,如果在插入记录时未指定 Status,则默认为 Active

修改表中的默认值

ALTER TABLE Employees ALTER COLUMN Status SET DEFAULT 'Inactive';

删除默认值约束

ALTER TABLE Employees ALTER COLUMN Status DROP DEFAULT;

以上两个约束都是MySQL中用于确保数据完整性和一致性的重要工具。自增约束通常用于主键,以确保每个记录都有一个唯一的标识符,而默认值约束则用于在未提供特定值时提供一个标准的默认值。

5. 关系代数

5.1 关系代数的基本操作

5.1.1 并(Union)

操作说明:合并两个表中的所有行,返回包含所有不同行的新表。

示例

IDName
1Alice
2Bob
3Carol

操作

SELECT * FROM Students1
UNION
SELECT * FROM Students2;

结果

IDName
1Alice
2Bob
3Carol
5.1.2 差(Difference)

操作说明:从一个表中减去另一个表中的行,返回只存在于第一个表中的行。

示例

IDName
1Alice
2Bob

操作

SELECT * FROM Students1
EXCEPT
SELECT * FROM Students2;

结果

IDName
1Alice
5.1.3 笛卡尔积(Cartesian Product)

操作说明:将两个表中的每一行与另一个表中的每一行配对,返回所有可能的组合。

示例

Students:

IDName
1Alice
2Bob

Courses:

IDCourseName
1Math
2Science

操作

SELECT Students.ID, Students.Name, Courses.ID AS CourseID, Courses.CourseName
FROM Students, Courses;

结果

IDNameCourseIDCourseName
1Alice1Math
1Alice2Science
2Bob1Math
2Bob2Science
5.1.4 投影(Projection)

操作说明:从表中选择特定的列,返回只包含这些列的新表。

示例

操作

SELECT Name FROM Students;

结果

Name
Alice
Bob
5.1.5 选择(Selection)

操作说明:从表中选择满足特定条件的行,返回这些行的新表。

示例

操作

SELECT * FROM Students
WHERE Age > 20;

结果

IDNameAge
2Bob22

5.2 关系代数的组合操作

5.2.1 交(Intersection)

操作说明:返回两个表中共有的行。

示例

Students1:

IDName
1Alice
2Bob

Students2:

IDName
2Bob
3Carol

操作

SELECT * FROM Students1
INTERSECT
SELECT * FROM Students2;

结果

IDName
2Bob
5.2.2 连接(Join)

操作说明:连接操作用于将两个表中的行组合起来,通常基于相关的列。

示例

Students:

IDName
1Alice
2Bob

Courses:

CourseIDCourseName
1Math
2Science

操作

SELECT Students.ID, Students.Name, Courses.CourseID, Courses.CourseName
FROM Students
JOIN Courses ON Students.ID = Courses.CourseID;

结果

IDNameCourseIDCourseName
1Alice1Math
2Bob2Science
5.2.3 除(Division)

操作说明:除法操作用于查询与右侧关系中的所有元组都有联系的左侧关系中的元组。

示例

Students:

IDName
1Alice
2Bob

Courses:

CourseIDCourseName
1Math
1Science

操作

SELECT S.Name
FROM Students S
DIVIDE Courses C
ON S.ID = C.CourseID;

结果

Name
Alice

在这个例子中,我们想要找出选修了所有课程的学生的名字。由于 Alice 选修了课程 ID 为 1 的课程,而 Bob 没有选修任何课程,所以只有 Alice 满足条件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1559599.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

你知道C++多少——栈和队列

&#x1f308;个人主页&#xff1a;小新_- &#x1f388;个人座右铭&#xff1a;“成功者不是从不失败的人&#xff0c;而是从不放弃的人&#xff01;”&#x1f388; &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f3c6;所属专栏&#xff1…

数据库管理平台应该具备哪些功能

企业数据的的扁平一体化管理越来越普及。 一个企业如果想要做好数据扁平一体化管理的核心问题是如何高效地管理这些资源。构建一个能够完美整合、系统化组织数据&#xff0c;并提供直观可视分析界面的数据库管理平台&#xff0c;便是企业加速数字化转型的必备工具。 假如公司有…

json格式的post请求目前不行, 要换成form表单形式的post请求怎么改

问: 下面是我的代码 export function fetchDeleteList<T>(agentSessionId: string) {return post<T>({url: http://192.168.0.116:8089/pipe-ics/agent/delete,method: post,data: { agentSessionId },}) } 目前是json格式的post请求, 目前不行, 要换成form表单…

详解计算机组成原理中的层次化存储

第5章 大而快&#xff1a;层次化存储 5.1 引言 局部性原理&#xff1a;在任意一段时间内&#xff0c;程序都只会访问地址空间中相对较小的一部分内容&#xff0c;就如你只会查阅图书馆的一部分藏书一样。 时间局部性&#xff1a;某个数据被访问&#xff0c;在不久的将来可能…

CIME2025深圳国际热管理材料与设备展览会(2025.6.25-27)

CIME2025深圳国际热管理材料与设备展览会&#xff08;2025.6.25-27&#xff09; 2025.6.25-27 深圳国际会展中心 次世代热管理解决方案航天器热控分系统产品、基站环境级/机柜级热控产品以及基于环路热管的CPU、GPU、IGBT、T/R组件超级散热器其系统热阻、均温性、传热能力、逆…

递归 深搜 回溯练习

递归 深搜 回溯 题目一. 全排列II1. 题⽬链接&#xff1a;2. 题⽬描述&#xff1a;3. 解法&#xff1a;4.代码 题目二. 电话号码的字⺟组合1. 题⽬链接&#xff1a;2. 题⽬描述&#xff1a;3. 解法&#xff1a;4.代码 题目三. 括号⽣成&#xff08;medium&#xff09;1. 题⽬链…

论文阅读笔记- Language Modeling with Gated Convolutional Networks

前言 统计语言模型本质上是在给定前面若干个单词的条件下&#xff0c;通过概率建模来估计单词序列的概率分布&#xff0c;即&#xff1a; P ( w 0 , . . . , W N ) P ( w 0 ) ∏ i 1 N P ( w i ∣ w 0 , . . . , w i − 1 ) P(w_0,...,W_N)P(w_0)\prod_{i1}^NP(w_i|w_0,...…

dvwa:文件包含、文件上传

文件包含 本地文件包含&#xff08;敏感信息泄露&#xff09;和远程文件包含&#xff08;命令执行&#xff09; 本地文件包含一般包含一些本地的敏感文件&#xff0c;如&#xff1a;/etc/passwd或/etc/shadow等 远程文件包含能使得服务器代码执行&#xff0c;如包含黑客vps的…

文心一言 VS 讯飞星火 VS chatgpt (365)-- 算法导论24.3 7题

七、给定带权重的有向图 G ( V &#xff0c; E ) G(V&#xff0c;E) G(V&#xff0c;E)&#xff0c;其权重函数为 w : E → ( 1 &#xff0c; 2 &#xff0c; … &#xff0c; W ) w:E→(1&#xff0c;2&#xff0c;…&#xff0c;W) w:E→(1&#xff0c;2&#xff0c;…&…

2024年诺贝尔物理学奖 机器学习与神经网络领域前景面面观 如何抉择

近日&#xff0c;2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者&#xff0c;这是历史上首次出现这样的情况。这项奖项原本只授予对自然现象和物质的物理学研究作出重大贡献的科学家&#xff0c;如今却将全球范围内对机器学习和神经网络的研究和开发作为了一种能…

基于微信小程序的家校联动平台管理系统的设计与实现(毕业论文)

目 录 第一章 绪论 1 1.1研究背景 1 1.1.1教育信息化的发展 1 1.1.2家校沟通的重要性 1 1.1.3微信小程序的优势 1 1.2国内外研究现状 1 1.2.1教育管理信息系统 1 1.2.2家校互动平台 1 1.2.3微信小程序在教育领域的应用 2 1.3本文的主要工作 2 1.3.1系统需求分析 2 1.3.2系统设计…

边缘智能(Edge Intelligence):智能计算的前沿

随着物联网&#xff08;IoT&#xff09;、5G网络和人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;边缘智能&#xff08;Edge Intelligence&#xff09;作为一种新兴的技术理念&#xff0c;逐渐成为数字化时代的重要组成部分。边缘智能通过在靠近数据生成端&#xf…

正则表达式-“三剑客”(grep、sed、awk)

1.3正则表达式 正则表达式描述了一种字符串匹配的模式&#xff0c;可以用来检查一个串是否含有某种子串&#xff0c;将匹配的子串替换或者从某个串中取出符号某个条件的子串等&#xff0c;在linux中代表自定义的模式模版&#xff0c;linux工具可以用正则表达式过滤文本。Linux…

《网络安全自学教程》- Nmap使用及扫描原理分析

《网络安全自学教程》 Nmap&#xff08;Network Mapper&#xff09;是一款免费的开源网络扫描器&#xff0c;向目标主机发送特定的数据包&#xff0c;根据返回的流量特征&#xff0c;分析主机信息。主要功能有&#xff1a;「端口扫描」、「主机探测」、「服务识别」和「系统识别…

Linux之实战命令32:chroot应用实例(六十六)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

字节跳动最新音乐生成模型Seed-Music

Seed-Music是一个由字节跳动研发的音乐生成模型&#xff0c;用户可以通过输入多模态数据&#xff08;如文本描述、音频参考、乐谱、声音提示等&#xff09;来生成音乐&#xff0c;并且提供了方便的后期编辑功能&#xff0c;比如修改歌词或旋律。 Seed-Music 结合了自回归语言模…

CentOS快速配置网络Docker快速部署

CentOS裸机Docker部署 1.联通外网 vi /etc/sysconfig/network-scripts/ifcfg-ens33systemctl restart networkip addrping www.baidu.com2.配置CentOS镜像源 参考文章 进入/etc/yum.repos.d目录下找到 CentOS-Base.repo cd /etc/yum.repos.dcp CentOS-Base.repo CentOS-B…

双向广搜 bfs进阶 open the lock——hdu1195

目录 前言 传统bfs 双向广搜 open the lock 问题描述 输入 输出 问题分析 状态转变 去重 单向搜索的bfs 双向广搜 结束条件 输出步数 前言 其实这题数据不算复杂&#xff0c;不用双向广搜也可以完成&#xff0c;仅仅是为了更直观展现双向广搜的编码方式。 传统bfs bfs向来都…

通用文件I/O模型之open

前面介绍了linux系统一切皆文件的概念&#xff0c;系统使用一套系统调用函数open()、read()、write()、close()等可以对所有文件执行I/O操作。应用程序发起的I/O请求&#xff0c;内核会将其转化为相应的文件系统操作&#xff0c;或者设备驱动程序操作。接下来我们一起了解一下o…

电磁兼容(EMC):整改案例(五)EFT测试,改初级Y电容

目录 1. 异常现象 2. 原因分析 3. 整改方案 4. 总结 1. 异常现象 某产品按GB/T 17626.4标准进行电快速瞬变脉冲群测试&#xff0c;测试条件为&#xff1a;频率5kHz/100kHz&#xff0c;测试电压L&#xff0c;N线间2kV。其中频率5kHz时&#xff0c;测试通过&#xff0c;但频…