数据库关系运算理论:关系数据操作与关系完整性概念解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 数据库关系运算理论:关系数据操作与关系完整性概念解析

关系数据操作

关系的基本操作

关系模型中常用的关系操作包括查询操作插入删除修改操作两大部分。

关系的查询表达能力很强,是关系操作中最主要的部分。

查询操作可以分为:选择(select)、投影(Project)、除(Divide)、并(Union)、交(Intersection)、连接(Join)、差(Except)和笛卡儿积等

其中,选择、投影、并、差、笛卡儿积是五种基本操作其他操作是可以用基本操作来定义和导出的。

关系操作的特点

关系操作的特点是集合操作方式,即操作的对象和结果都是集合。

这种操作方式也称为一次一集合的方式,这里提到的“一个集”也可以理解为“一个关系”或“一个二维表”。

相应地,非关系数据模型的数据操作方式称为一次一记录的方式。


关系数据语言

(1)关系数据语言按照完成的功能可分为三类:

数据定义语言(DDL)、数据操纵语言(DML)和数据控制语言(DCL)。

(2)关系数据语言按照查询方式的不同可分为三类:

关系代数语言(如ISBL)、关系演算语言(如 APLHA)、具有关系代数与关系演算双重特点的语言(如 SQL)。


关系的完整性

完整性约束的分类

关系模型中有三类完整性约束:

实体完整性、参照完整性和用户定义的完整性。

(1)实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系数据库 DBMS 自动支持

(2)用户自定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。


实体完整性

1.实体完整性规则

若属性 A 是基本关系 R 的主属性,则属性 A 不能取空值

2.实体完整性的必要性

(1)实体完整性规则是针对基本关系而言的。

一个基本表通常对应现实世界的一个实体集或一个多对多联系。

(2)现实世界中的实体和实体间的联系都是可区分的即它们具有某种唯一性标识

相应地,关系模型中以主码作为唯一性标识

(3)主码中的属性即主属性不能取空值。空值就是"不知道”或“无意义"的值主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾。(注意大写的 NULL 是空值)

3.实体完整性规则规定:基本关系的所有主属性都不能取空值

例如:学生实体中“学号”是主码,则“学号”不能取空值;“课程”是主码,则“课程号”不能取空值;学生选课关系——选修表(学号,课程号,成绩)中,"学号、课程号”是主码,则"学号、课程号”两个属性都不能取空值。

参照完整性

1.关系间的引用

现实世界中的实体之间往往存在着某种联系,在关系模型中实体及实体间的联系都是用关系来描述的。这样就自然存在着关系与关系间的引用

例如:学生、课程、学生与课程之间的多对多联系可以用如下三个关系表示:

       学生(学号,姓名,性别,年龄,院系)
       课程(课程号,课程名,学分)
       选修(学号,课程号,成绩)

这三个关系(或三张表)之间存在着属性的引用,即选修关系引用了学生关系的主码“学号”和课程关系的主码“课程号”。

2.外码

设F是基本关系 R的一个或一组属性,但不是关系R的码。如果F与基本关系S 的主码 KS 相对应,则称F是基本关系R的外码,基本关系 R称为参照关系(Referencing Relation),基本关系S称为被参照关系(Referenced Relation)或目标关系(Target Relation)。

在上例中,选修关系中的“学号”属性与学生关系的主码“学号”相对应;选修关系的“课程号”属性与课程关系的主码“课程号”相对应,因此“学号”和课程号”属性分别是选修关系的外码。这里学生关系和课程关系均为被参照关系选修关系为参照关系

3.参照完整性规则

       若属性(或属性组) F 是基本关系 R 的外码,它与基本关系 S 的主码 KS 相对应(基本关系 R 和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:或取空值 ( F 的每个属性值均为空值);或等于S中某个元组的主码值。

结合实例,按照参照完整性规则“学号”和“课程号”属性也可以取两类值:空值或目标关系中已经存在的值。但由于“学号”和“课程号”是选修关系中的主属性,按照实体完整性规则,它们均不能取空值,并且选修关系中的“学号”和“课程号”属性实际上只能取相应被参照关系中已经存在的主码值。

1)学生关系中的专业号参照专业关系中的专业号,专业号的值可以是:

(1)空值——表示尚未给学生分配专业

(2)非空值——值必须取专业关系中专业号的值

2)学生关系中的班长与学号之间存在引用关系,班长的取值可以是:

(1)空值——表示该班级未选班长

(2)非空值——值必须取同一关系的学号

用户定义完整性

实体完整性与参照完整性是由系统自动支持的,这是关系模型所要求的。除此之外,不同的关系数据库系统根据其应用环境的不同往往需要一些特殊的约束条件,这就是用户定义的完整性约束件。

(1)用户定义完整性规则是针对某一具体关系数据库的约束条件反映某一具体应用所涉及的数据必须满足的语义要求。

(2)关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能。


(1)对属性的类型约束

年龄只能取整数,姓名的字符串长度最大为20。

(2)对属性的非空约束

学生的姓名不允许为空。

(3)对属性值的取值范围进行约束

学生成绩在 0一100 之间,在职职工的工资不低于1000 元等。

(4)对同一关系的不同元组进行约束

不允许出现两个不同的用户拥有相同的账号昵称。

(5)对同一关系的各属性进行约束

职工工资=职工工龄*工龄工资 +职务工资 +......

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

目录
相关文章
|
4月前
|
SQL 数据挖掘 测试技术
南大通用GBase8s数据库:LISTAGG函数的解析
南大通用GBase8s数据库:LISTAGG函数的解析
|
2月前
|
数据采集 数据库 Python
有哪些方法可以验证用户输入数据的格式是否符合数据库的要求?
有哪些方法可以验证用户输入数据的格式是否符合数据库的要求?
169 75
|
16天前
|
SQL 数据建模 BI
【YashanDB 知识库】用 yasldr 配置 Bulkload 模式作单线程迁移 300G 的业务数据到分布式数据库,迁移任务频繁出错
问题描述 详细版本:YashanDB Server Enterprise Edition Release 23.2.4.100 x86_64 6db1237 影响范围: 离线数据迁移场景,影响业务数据入库。 外场将部分 NewCIS 的报表业务放到分布式数据库,验证 SQL 性能水平。 操作系统环境配置: 125G 内存 32C CPU 2T 的 HDD 磁盘 问题出现的步骤/操作: 1、部署崖山分布式数据库 1mm 1cn 3dn 单线启动 yasldr 数据迁移任务,设置 32 线程的 bulk load 模式 2、观察 yasldr.log 是否出现如下错
|
20天前
|
JSON Java 关系型数据库
Hutool创建数据源工厂动态查询不同数据库不同数据表的数据
Hutool创建数据源工厂动态查询不同数据库不同数据表的数据
33 2
|
2月前
|
XML Java 开发者
Spring底层架构核心概念解析
理解 Spring 框架的核心概念对于开发和维护 Spring 应用程序至关重要。IOC 和 AOP 是其两个关键特性,通过依赖注入和面向切面编程实现了高效的模块化和松耦合设计。Spring 容器管理着 Beans 的生命周期和配置,而核心模块为各种应用场景提供了丰富的功能支持。通过全面掌握这些核心概念,开发者可以更加高效地利用 Spring 框架开发企业级应用。
89 18
|
3月前
|
SQL 存储 运维
从建模到运维:联犀如何完美融入时序数据库 TDengine 实现物联网数据流畅管理
本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品。文章从一个具体的业务场景出发,分析了企业在面对海量时序数据时的挑战,并提出了利用 TDengine 高效处理和存储数据的方法,帮助企业解决在数据采集、存储、分析等方面的痛点。通过这篇文章,作者不仅展示了自己对数据处理技术的理解,还进一步阐释了时序数据库在行业中的潜力与应用价值,为读者提供了很多实际的操作思路和技术选型的参考。
75 1
|
3月前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
3月前
|
前端开发 JavaScript 数据库
获取数据库中字段的数据作为下拉框选项
获取数据库中字段的数据作为下拉框选项
74 5
|
3月前
|
存储 关系型数据库 MySQL
double ,FLOAT还是double(m,n)--深入解析MySQL数据库中双精度浮点数的使用
本文探讨了在MySQL中使用`float`和`double`时指定精度和刻度的影响。对于`float`,指定精度会影响存储大小:0-23位使用4字节单精度存储,24-53位使用8字节双精度存储。而对于`double`,指定精度和刻度对存储空间没有影响,但可以限制数值的输入范围,提高数据的规范性和业务意义。从性能角度看,`float`和`double`的区别不大,但在存储空间和数据输入方面,指定精度和刻度有助于优化和约束。
497 5
|
3月前
|
调度 开发者
核心概念解析:进程与线程的对比分析
在操作系统和计算机编程领域,进程和线程是两个基本而核心的概念。它们是程序执行和资源管理的基础,但它们之间存在显著的差异。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
110 4

热门文章

最新文章

推荐镜像

更多