《数据库原理与应用(第3版)》——3.3 关系模型的形式化定义

简介:

本节书摘来自华章出版社《数据库原理与应用(第3版)》一 书中的第3章,第3.3节,作者:何玉洁,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.3 关系模型的形式化定义

在关系模型中,无论是实体还是实体之间的联系均由单一的结构类型来表示——关系。关系模型是建立在集合代数的基础上的,本节我们将从集合论的角度给出关系数据结构的形式化定义。

3.3.1 形式化定义

为了给出关系的形式化的定义,首先定义笛卡儿积。
设D1,D2,…,Dn为任意集合,定义笛卡儿积D1,D2,…,Dn为:
D1×D2×…×Dn = {(d1,d2,…,dn) | di ∈Di,i = 1,2,…,n }
其中每一个元素(d1,d2,…,dn)称为一个n元组(n-tuple),简称元组。元组中每一个di称为一个分量。
D1={计算机系,信息系}
D2={李勇,刘晨,吴宾}
D3={男,女}
则D1×D2×D3笛卡儿积为:
D1×D2×D3={(计算机系,李勇,男),(计算机系,李勇,女),

       (计算机系,刘晨,男),(计算机系,刘晨,女),
       (计算机系,吴宾,男),(计算机系,吴宾,女),
       (信息系,李勇,男),(信息系,李勇,女),
       (信息系,刘晨,男),(信息系,刘晨,女),
       (信息系,吴宾,男),(信息系,吴宾,女)}

其中(计算机系,李勇,男)、(计算机系,刘晨,男)等都是元组。“计算机系”、“李勇”、“男”等都是分量。
笛卡儿积实际上就是一个二维表,上述笛卡儿积的运算如图3-2所示。

screenshot

图3-2中,笛卡儿积的任意一行数据就是一个元组,它的第一个分量来自D1,第二个分量来自D2,第三个分量来自D3。笛卡儿积就是所有这样的元组的集合。
根据笛卡儿积的定义可以给出一个关系的形式化定义:笛卡儿积D1,D2,…,Dn的任意一个子集称为D1,D2,…,Dn上的一个n元关系。
形式化的关系定义同样可以把关系看作二维表,给表的每个列取一个名字,称为属性。n元关系有n个属性,一个关系中的属性的名字必须是唯一的。属性Di的取值范围(i = 1,2,…,n)称为该属性的值域(domain)。
比如上述的例子,取子集:
R = {(计算机系,李勇,男),(计算机系,刘晨,男),(信息系,吴宾,女)}
就构成了一个关系。二维表的形式如表3-3所示,把第一个属性命名为“所在系”,第二个属性命名为“姓名”,第三个属性命名为“性别”。
screenshot

从集合论的观点也可以将关系定义为:关系是一个有K个属性的元组的集合。

3.3.2 对关系的限定

关系可以看作二维表,但并不是所有的二维表都是关系。关系数据库对关系是有一些限定的,归纳起来有如下几个方面。
1)关系中的每个分量都必须是不可再分的最小数据项。即每个属性都不能再被分解为更小的属性,这是关系数据库对关系的最基本的限定。例如表3-4就不满足这个限定,因为在这个表中,“高级职称人数”不是最小的数据项,它是由两个最小数据项(“教授人数”和“副教授人数”)组成的一个复合数据项。对于这种情况只需要将“高级职称人数”数据项分解为“教授人数”和“副教授人数”两个数据项即可,如表3-5所示。
screenshot

2)表中列的数据类型是固定的,即每个列中的分量是同类项的数据,来自相同的值域。
3)不同的列的数据可以取自相同的值域,每个列称为一个属性,每个属性有不同的属性名。
(4)关系表中列的顺序不重要,即列的次序可以任意交换,不影响其表达的语义。比如将图3-5中的“教授人数”列和“副教授人数”列交换并不影响这个表所表达的语义。
5)行的顺序也不重要,交换行数据的顺序不影响关系的内容。其实在关系数据库中并没有第一行、第二行等这样的概念,而且数据的存储顺序也与数据的输入顺序无关,数据的输入顺序不影响对数据库数据的操作过程,也不影响其操作效率。
6)同一个关系中元组不能重复,即在一个关系中任意两个元组的值不能完全相同。

相关文章
|
12月前
|
存储 缓存 NoSQL
数据库实体与关系模型
【5月更文挑战第16天】本文介绍了数据库模型和UML关系,UML包括依赖、关联(聚合、组合)、泛化和实现4类关系。UML有13种图,分为结构图、行为图和交互图。数据库的基本数据模型包括外模式(用户视图)、概念模式(全局逻辑结构)和内模式(物理存储)。数据模型三要素是数据结构、操作和约束条件。简单易用的缓存数据模型适用于需求灵活、高性能、大数据量且不要求强一致性的场景。
307 5
数据库实体与关系模型
|
机器学习/深度学习 存储 安全
数据库模型:层次模型、网状模型、关系模型
数据库模型:层次模型、网状模型、关系模型
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
|
9月前
|
存储 SQL 监控
ADBPG&Greenplum成本优化问题之ADB PG的数据库管控的定义如何解决
ADBPG&Greenplum成本优化问题之ADB PG的数据库管控的定义如何解决
81 2
|
10月前
|
存储 SQL Oracle
|
9月前
|
SQL 数据处理 数据库
|
9月前
|
Cloud Native 关系型数据库 分布式数据库
云原生数据库2.0问题之DBStack的定义如何解决
云原生数据库2.0问题之DBStack的定义如何解决
|
10月前
|
数据采集 分布式计算 大数据
MaxCompute产品使用合集之数据集成中进行数据抽取时,是否可以定义使用和源数据库一样的字符集进行抽取
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
115 1
|
11月前
|
存储 安全 关系型数据库
|
10月前
|
存储 JSON 数据库
项目管理定义问题之什么是序列化大对象的值对象数据库形态
项目管理定义问题之什么是序列化大对象的值对象数据库形态

热门文章

最新文章