mysql关系模式_mySQL 为什么叫“关系”模型

我们平时都会使用“关系数据库”,“关系模型”这样的词语。但是我们却不清楚“关系”真正的指的是什么。其实,这个词看似很简单,里面却有很深的的含义。今天我们就具体说说什么是“关系”。

我相信很多人时不时就会问“为什么叫它关系模型,而不是叫它表模型”这里面的原因有两个:

第一个原因是:当初思考关系模型的时候,从事数据处理工作的人们有了一种普遍的观点,那就是,认为多个对象之间的关系(或者关联)必须通过一种链接数据结构来表示。为了纠正这个误解,所以有人特意选择了"关系模型"这个词作为名字;

第二个原因是:与关系相比,表的抽象度更低,容易给人可以像数组那样操作的印象,而n元关系就不会了。还有就是,数据库表中的内容和行的顺序没有一点关系,在这一点表更容易带来误解,尽管表有这个小缺点,但依然是表达关系概念时最重要的手段。毕竟表的概念人们更熟悉一些。

关系的定义

关系数据库采用的数据模型是关系模型——反过来说可能更合适,即数据库采用了关系模型,因此才被称为关系数据库。

那么,这里所说的“关系”指的是什么呢?深入思考的话会发现,其实这个词很抽象,不太容易理解,而且很容易与我们日常生活中用的“人际关系”“关系紧张”等词中的“关系”混淆。既然如此,从一开始就不使用“关系”这样的抽象词语,叫它“表”模型不是也行吗?所谓关系,说到底不还是二维表吗?像这样不无道理的疑问,从关系模型诞生之日起已经被提出过很多次了。“总说关系、关系的到底是什么意思?”

关系模型之父Codd本人也表示了时不时也会有这样的疑问,(我猜时不时表述的有点少,其实应该相当频繁)而且还给出了两种解释。分别是:

(1) 与现在的数据库工程师没有什么关系。“链接数据结构”指的是使用指针连接数据的链表结构,这是分层模型和网状模型数据结构流行的时期特有的。

而(2) 现在仍然有思考的价值,因为它触及了“关系”这一概念的本质。简单概括的话,关系和表看起来很相似,实质却不相同。为了帮助大家理解这一点,笔者列出了一些关系和表比较典型的区别。

关系中不允许存在重复的元组(tuple),而表中可以存在。即,关系是通常说的不允许存在重复元素的集合,而表是多重集合

关系中的元组没有从上往下的顺序,而表中的行有从上往下的顺序

关系中的属性没有从左往右的顺序,而表中的列有从左往右的顺序

关系中所有的属性的值都是不可分割的,而表中列的值是可以分割的。换句话说,关系中的属性满足第一范式,而表中的列不满足第一范式

仅从列出来的这几条就能看出,关系和表之间的区别还是很大的。与关系相比,表的定义不太严谨,而且不明确。在前文中我们用了很多次“元组”和“属性”这样的词,大家有没有觉得“元组≈行”“属性≈列”呢?

确实是这样的。元组和属性是关系模型中较为正式的术语,与非正式的日常用语有以下对应关系 。

虽然上面出现了专业术语,但是大家不用在意。

实际工作中把“列”称为“属性”,把“行数”称为“势”也并没有特别的好处。关系模型是以数学中的集合论为基础的,因此沿用了集合论的一些术语,我们了解了这一点就可以了。不过,阅读一些偏理论的比较严谨的书时,可能会发现作者习惯使用“属性”代替“列”,使用“元组”代替“行”,所以知道它们的对应关系还是有好处的。

前面说得有些多,让大家久等了。接下来我们介绍一下关系的正确定义。关系的定义可以用下面这样一个公式来给出。

R ⊆ (D1×D2×D3 ··· ×Dn)

(关系用符号 R 表示,属性用符号 Ai 表示,属性的定义域用符号 Di 表示)

这个公式读作“关系 R 是定义域 D1, D2, …, Dn 的笛卡儿积的子集”。

很多人可以不知道笛卡儿积是什么?其实笛卡儿积是指“使用各个属性的定义域生成的组合数最多的集合”。

今天就分享到这,晚安!诸位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值