数据库笔记——数据模型

1 概念数据模型与基本数据模型

1.1 概念数据模型

独立于计算机系统的数据模型,它完全不涉及信息在计算机系统中的表示,只是用来描述某个特定组织所关心的信息结构,这类模型称为 “概念数据模型”。

概念数据模型用于建立信息世界的数据模型,强调其语义表达能力,概念应该简单,清晰,易于用户理解,它是现实世界的第一层抽象,是用户和数据库人员之间进行交流的工具。最著名的是“实体联系模型”。(ER模型)

1.2 基本数据模型

直接面向数据库的逻辑结构的数据模型,它是现实世界的第二层抽象。这类模型涉及到计算机系统和数据库管理系统,又称为“基本数据模型”或“结构数据模型”。

   例如, 层次、网状、关系、面向对象数据模型”。这类模型有严格的形式化定义,以便在计算机系统中实现。

Hierarchical Data Model层次模型

2.1 两个概念

record (记录): 现实世界的实体,表达成“记录”的形式

field (字段): 每一个记录有若干个域,用来表示实体的不同特征

2.2 Parent-Child relationship (PCR)

层次结构最基本的数据关系,两个数据类型之间的1对多的关系.

RCR的定义

PCR的实例

2.3 Hierarchical Data Schema 层次数据模式

每一个PCR都是1对多,N个PCR组成起来.

每个记录类型只能有一个parent.

定义

实例

2.4 Virtual Record虚记录

在真实世界中,很多数据并不是层次化结构的,很难用PCR来直接表达这种结构.

 

举几个例子:

多对多关系

 

 

 

多对一关系

 

 

多元关系

 

为了避免冗余,同时又要保证PCR的树形结构,我们就引入了虚记录的概念.

只存一份记录,其他引用该记录的地方用指针代替(用指针代替的记录——虚拟记录)[下图中下标v表示的记录就是虚记录]

 

多对多关系

多对一关系

 

多元关系

以多对多关系为例,我们定义了两个虚记录类型,一个代表学生一个代表课程。

那么我们就分别定义了课程-学生,学生-课程的一对多关系

但是此时的子女节点都是虚记录,这个虚记录记录类型并不是真正地存储数据,只是存储了一个指向真正数据的指针。

2.5 层次数据的线性表示

由于存储器是线性的,层次数据必须变换成线性形式才能存储,层次数据模式的实例对应一棵层次树(或森林),对层次树(或森林)按先序遍历生成的序列称为层次序列(hierarchical sequence),规定以此作为存储次序。

2.6 层次数据模型的特点

2.6.1 约束

(1)除了根记录外,任何其它记录不能离开其双亲记录而孤立存在;

(2)任何记录,不管虚实,只允许有一个双亲记录(保证层次数据模式及其实例是树形);

(3)虚拟记录的指针必须指向一个实际存在的记录,有虚拟记录指向的记录不得删除;

(4)虚拟记录不得为根记录。

2.6.2 优点

记录之间的联系通过指针来实现,查询效率较高(针对层次结构)。

2.6.3 缺点

1、只能表示1:N联系,虽然可以采用虚拟记录描述非层次数据关系,但较复杂,用户不易掌握,并且非层次结构的查询效率比较低;

2、由于层次顺序的严格和复杂,引起数据的查询和更新很复杂,因此应用程序的编写也比较复杂;

3、模式描述语言较复杂,数据独立性差。

3 Network Data Model 网状数据模型

网状数据模型的基本数据结构是set(系),代表了两个记录型之间的一个一对多的关系。 一这边是主记录;多这边是属记录。

一个记录类型可以是多个系的主记录,也可以是多个系的属记录。

具有多种类型属记录的系——“多属系”。

一个记录型不能同时是一个系的首记录,又是这个系的属记录。

data item:网状数据结构中对于记录的描述,有点类似于层次数据结构中的field,但是这里的‘field’可以是向量(复合类型)。

在网状数据结构中,系值不再是树了,而是链表

 

类型

实例

 

3.1 Link记录类型

在网状数据结构中,如何表达自联结呢?(因为一个记录类型不能同时是主记录和属记录)

比如我们要表示公式上下级关系的数据模式,我们引入一个LINK记录类型:

类型

实例

1:1表示一人担任一个领导岗位

1:N表示一个人可以领导N个人

因为自己和自己也是领导与被领导的关系,所以我们引入LINK类型进行辅助。

员工->相应LINK是一个一对一的关系,换句话说,每一个LINK就相当于员工的一个“替身”,用它和其他的员工产生联系。

s2表达的就是领导与被领导的关系。

如果想要找某一个员工的下属,先用S1链表找到他对应的S,然后用S2链表找到除了自己之外的元素,遍历这个链表。遍历到的人就是这个员工的直接下属

3.2 网状数据结构表达多对多关系

也是引用了Link记录,link记录有SL链表,是和student之间的关系;CL链表,和course之间的关系

 

 

当我们要看一个学生选了几门课的时候,我们从这个指定的学生出发,先沿着SL到Link去,然后 再从Link出发,沿着相应的CL到course

 

如果要看一门课那几个学生选呢?那么就反过来,从课程出发,先沿着相应的CL到link,然后从link出发,沿着SL找到所有的学生

本表格中靠上的图这样的表示方式是不行的(一个记录不能出现在同一系型的多个系值中,如果需要,那么必须使用Link记录)

需要这样,L5之后,沿着CL可以到DB,也可以到L6(C)

 

4 Relational Data Model 关系数据网络

关系模型(relaction data model)的主要特征是用表格结构表达实体集,用外键表示实体间联系。与层次模型和网状模型相比,关系模型比较简单.

 关系模型是由若干个关系模式组成的集合。每个关系实际上是一张表格,记录之间联系是通过各个关系模式的键体现的。

关系模型最基本的数据结构是“表”。现实世界中的实体、实体和实体之间的关系都是用“表”来表示(以示区别,之前的层次和网状,实体和实体之间的关系是用层次和网络来表示的)

4.1 和层次结构、网状结构的区别

关系模型和层次、网状模型的最大差别是用键而不是用指针导航数据,其表格简单,用户易懂,用户只需用简单的查询语句就可以对数据库进行操作,并不涉及存储结构、访问技术等细节。

4.2 特点

这时候存储的东西,查询的东西,所有的东西都是表格,她们形成了一个封闭的空间,我们可以借此定义一个代数系统(关系代数)。

基于集合论,拥有更高的抽象级别。

计算机底层实现的一些细节将被屏蔽。

非过程化的查询语言(SQL)(用户只需要提供他要什么;而不用像之前的层次数据模型和网状数据模型一样,需要详细说明他需要怎么查询【遍历链表or遍历树等到】)

4.2.1 软连接

之前的两种数据模型中,多对多是复杂的(要么需要虚记录、要么需要LINK记录).

在关系数据模型中,我们只需要再做一张表(如下图的elective),里面的s#和C#就是student和course的id,可以看成这两个的逻辑指针(即软连接)。

4.3 关系数据模型的一些概念

属性(attribute):实体的性质用属性描述(eg,学生的姓名、学号。。。)

域(domain):每一个属性都有一个取值范围,这个范围就是域。

4.3.1 域的性质

1范式限制(1NF):每一个属性都是原子的,不能再分;即每一个属性不能是结构啊数组啊什么的;换句话说,不允许出现表中套表。

允许某一个记录里面的值是空值(NULL,不知道,表示该属性值空缺)

同一关系中,不允许有同名属性,但不同属性可有相同的域。

4.3.2 关系

任何一个实体都是一个或者多个关系

如果一个关系R,有n个属性A1,A2,…..An,相对应的域是D1,D2,……Dn,那么关系R可以表示为R = (A1/D1, A2/D2, … An/Dn),简化为R = (A1, A2, … An) ——>这个就是关系的模式(schema)

n是关系的度/目(degree)

在关系R中,元组的次序无关,但不能允许有相同的二个元组

在关系R中,属性的次序无关。

4.3.3 元组

元组是关系R的一个实例

一个关系R可以被表示成 r 或 r(R),r = {t1, t2, …, tm}

每一个元组可以表示为t = <v1, v2, …, vn>, vi∈Di, 1≤i ≤n ( t ∈ D1×D2×, …, ×Dn, 1≤i ≤n)

relation也被叫做表格,attribute被叫做列,tuple被叫做行。

4.4 键

4.4.1 候选键(candidate key)

对一个关系而言,一组属性被称之为候选键,当他满足以下条件:

1,任意两个元组,这组属性里面的值都不一样

2,这组属性里面的任何一个子集都不具备上一条特点

那么这一组属性就被称之为候选键 candidate key(eg,身份证号码)

(说白了就类似于极大无关组)

4.4.2 超键(super key)

如果不满足候选键的条件2,也就是说有冗余的属性,那么这样的一组属性被称之为超键 super key。

4.4.3 主键(primary key)与全键(all key)

极大无关组不唯一,所以候选键也不唯一,那么我们可以选定其中一组为主键 primary key,其他的是候选键alternate key。

如果主键包括了关系中所有的属性,那么我们称之为全键all key。

4.4.4 外键(foreign key)

如果这一张表里面的属性是用来引用另一张表的元组(即另一张表的主键),那么这一张表里面的这个属性被称为外键

在students里面sid是主键,在enrolled里面,sid是外键

4.5 约束

4.5.1 域完整性约束(Domain integrity constraint)

每条元组的每个属性的值均符合值域的要求.

4.5.2 实体完整性约束(Entity integrity constraint )

主键的属性不允许为空

如果这个值一定要为NULL,那么就不把它设置为主键.

4.5.3 引用完整性约束

外键要么空缺,要么引用实际存在的主键值

5 关系代数

5.1 这一小节会使用到的表格

水手信息的表格(rating是水手的级别)

 

船信息的表格

预定关系(这时候水手的id和船的id加起来的这个属性组并不是主键,因为同一个水手可以在不同时间预定船,所以此时的主键是全键)。

5.2 基本运算符

如果一个系统支持以下五个基本操作,那么这个系统是关系完备的(关系模型上的所有操作都可以通过这五个操作导出)。

因为这些操作的结果也都是关系,所以这些运算符是可以相互组合的。

一元操作(单目)优先级高于二元操作。

5.2.1 选择

1-Selection  (σ):选择是一种单目运算,即对一个关系施加的运算,按给定条件从关系中挑选满足条件的元组组成的集合 。

5.2.2 投影

Projection  (Π) :投影操作是单目运算,从关系中挑选指定的属性组成的新关系。即把不需要的域(列)去掉

理论上投影操作需要去除重复元素(面向对象的模型里面,哪怕所有属性都一样,只要两个元素id不同,就不是一个元素;但是在关系模型里面,如果所有的属性都相等,那么我们认为它们表达的是同一个元素)。

但在实际的数据库操作里面,是不主动去除同样的元素的,除非用户显示地要求删去(因为数据库并不知道用户的应用开发需要什么样的数据,删除了可能反而无法满足用户的需求)。

5.2.3 笛卡尔积

Cross-product  (笛卡尔乘积):把两个关系拼接在一起,两张表拼成一张大表

笛卡尔乘积的结果包含原来两张表的所有属性。

结果由参加运算的两个表格的每一条元组两两拼接而成。

  <t,g>为t和g的拼接,即R × S仍为一个关系,它的目为nr+ns、元组数为|R|×|S|。

以S1×R1为例:

但因为S1和R1都有sid这个属性,而同一张表里面不允许有两个相同的属性;于是我们要对属性进行重命名:

结果为

5.2.4 集合差

et-difference  (-):集合差,A-B:属于关系A,但是不属于关系B的记录

交运算可以用差运算表示。设A、B为两个集合,则A和B的交可表示为:A∩B≡A-(A-B)

5.2.5 集合并

Union(∪) 集合并 由属于A或属于B的所有元组组成的集合。即两个表合并成一个

参与并、差操作的两个关系的元组必须限制为同类型的,即具有相同的目(属性数),且对应的属性的域相同——并兼容(union compatibility);

5.3 连接

5.3.1 条件连接 condition join

笛卡尔乘积是两两拼接,这就可能会出来很多没有意义的元组,导致数据冗余。

条件链接就是在笛卡尔乘积的基础上,对结果按照条件C进行选择操作。

有的时候,条件连接也叫做θ连接。

连接条件为两关系中对应属性的比较,对应属性不一定同名,但要有相同的域。其普遍表示形式为:<条件1>and<条件2>and…and<条件k>。

5.3.2 等值连接 equi-join

特殊的条件链接,只有做笛卡尔乘积的两个表格,某一个/几个属性相同的才会被选择

等值连接的结果相比于条件链接和笛卡尔乘积的结果,把等值的属性去掉一个。

5.3.3 自然连接 natural join

做笛卡尔乘积的两个表格,所有公共属性相同的才会被选择.

5.4 完备性

5.5 除法

结果的x集合满足什么条件呢?对于B中的每一个y,都可以在A中找到一条记录,使得<x,y>在A中

举一个例子,A是由sno和pno两个属性组成,A/B的结果只有sno属性,因为pno属性被除掉了。

我们要找 原来关系A中,和B中的每一条元素都有联系的xno。

我们举A/B2为例,为什么不选s2呢?因为在A中有<s2,p2>,但没有<s2,p4>,所以不满足除法条件(对于B中的每一个y,都可以在A中找到一条记录)

5.5.1 除法的表示

因为除法不是基本运算符,所以我们要看一下怎么把除法用五个基本运算符表示。

直接看“满足和所有B中元素都有联系”这个约束条件比较繁琐,所以我们可以从”否定之否定“的角度来看这个问题。即先看不满足除法条件的点,然后把这些点剔除就可以了。

我们先看

A中所有的x和B两两拼接,进行笛卡尔乘积,那么所有可能的A_x与B 的组合都有了。

接着是

把所有A中有的<x,y>对去掉,那么剩下的就是不满足除法条件的所有<x,y>对了(不在原来A中的<x,y>对)

把所有不满足除法条件的<x,y>对中的x提出来,这些x就是不满足除法条件的点(因为如果某一个x满足除法条件的话,那么所有这个x的<x,y>对在前面-A的时候应该都消掉了,留下来的都是至少有一个<x,y>对不在A中的)

于是我们得到了A/B(剔除上一步的x即可)

5.6 外连接

一般的连接是自然连接,那么不满足连接操作的元组都会被丢弃。

如果我们一定要这些元素呢?那我们就要用外连接了。

外连接一共分成左外连接、右外连接和全外连接,分别是把左操作数、右操作数、两个操作数的所有元组保留。能匹配的匹配,匹配不到的属性对应的值为空值NULL

5.7 外并

执行基本操作并,需要满足的条件是属性模式需要相同。但实际应用中,不满足并兼容关系的也要合并在一起的话,那就需要使用外并了。结果的属性集是参与运算的属性集的并。没有值的元素填NULL。

6 关系演算Relational Calculus

用关系代数表示的操作,需要我们指定运算的顺序【因而以关系代数为基础的DB语言是过程性语言(procedural language)】,而关系演算只需要指明需要满足的逻辑条件(基于谓词演算的逻辑表达式)【只要说明所要得到的结果,而不必标明操作的过程,因而以关系演算为基础的数据库语言是说明性语言(declarative language)】。

换言之,关系演算只用谓词公式告知“做什么”,而不告诉“怎么做”。

目前,面向用户的关系数据库语言基本上都以关系演算为基础。

关系演算分为元组关系演算(以元组为单位定义变量)和域关系演算 (以属性为单位定义变量),他们唯一的区别是变量的定义。

关系演算中的布尔表达式称为公式,所有让布尔表达式为真的结果就是我们要的答案。

6.1 安全查询

我们可以写出一个句法上是正确的,但是满足结果的条件是无限多的关系演算。这样的查询是不安全的。

还是以水手为例,比如这样的一个关系演算

意思为找出所有不在sailer表里面的水手,这个关系演算句法上是对的,但是是不安全的,因为我们可以找到无限个这样的满足条件的水手。

6.2 表达能力完备性

关系代数可以表达的,我们也可以用一个安全的域关系演算或者元组关系演算表达(两者表达能力等价)。

6.3 域关系演算 Domain Relational Calculus

变量定义在域,也就是属性上面。形式如下:

‘|’号右边的公式可以有更多的域变量,但对于结果我只需要n个就够了。

6.3.1 DRC中的原子公式

其中X,Y都是域变量,op是比较运算符。

6.3.2 DRC中的公式

后两行“free”的意思是,在p(X)里面,X没有被任取和存在限制。

还是以之前的水手为例,那么如果我们要找到等级在7以上的水手的id,名字等级和年龄,我们用关系演算可以这么写:

6.4 元组关系演算Tuple Relational Calculus

有如下的格式:

t是元组变量,既可以用整个t作为查询对象,也可查询t中的某些属性。

如果查询整个t,则可省去<属性表>。

还是以水手为例,我们要找到所有等级在7以上,年龄在50以下的水手的名字,我们可以这么写

6.5 关系操作用关系演算表达

6.5.1 投影

6.5.2 选择

6.5.3 减法

6.5.4 (自然)连接

7 传统数据结构的评价

传统数据结构是我们之前讨论过的层次、网状、关系数据结构的统称。

7.1 特点

●都继承了文件中的记录、字段等概念。

●物理级也借鉴了文件的索引、散列等存取方法。

●向用户提供了统一的数据模型和相应的数据库语言。

●都在记录的基础上定义了数据的基本结构、约束和操作

7.2 不足

以记录为基础,基于结构化数据实现,把现实数据表示成规范化的内容,但这样就不能很好地面向用户和应用。

不能很自然地表达实体和实体之间的联系。

缺乏语义信息(以关系为例,把实体表达成一张一张的表,从逻辑上讲,表之间的地位是平等的。表之间的相互引用、继承关系等内在联系,则需要约束、应用程序、数据库的文档等才能看出来。单独从模型的角度,是看不出来的)。

支持的数据类型太少(结构、字典、列表这种都不行)。

8 ER模型

E-R数据模型不是面向实现,而是面向现实世界。其设计的出发点是有效自然的模拟现实世界,而不是首先考虑它在机器中的实现问题。

 E-R模型提供了实体、属性和联系三个抽象概念。这三个概念简单、明了、直观易懂,用以模拟现实世界比较自然,且可方便地转换关系、层次、网状数据模式。

用E-R表示数据模式时,我们只关心有哪些数据(即有哪些实体以及属性)以及数据间的关系(实体关系),而不必关心这些数据在计算机内如何表示和用什么DBMS。

在E-R模型中,实体和联系均可有属性,如选课联系的属性可有成绩、选课时间等。

ER模型的实体大部分特点和关系模型是一样的,不过实体的属性允许复合类型,允许多值属性。(比如一个人有多个电话,那么电话这个属性就可以是多值属性)

8.1 ER图

虽然ER模型最终没有成功,但是它的衍生物,ER图在数据库的设计中起到的重要的作用(我们直接看图就能知道他的语义信息)

8.2 ER图的扩展(EER extended ER)

8.2.1 弱实体Weak entity

不能单独存在,必须依赖于其他的实体。

eg,学校职工-职工家属,每个职工家属实体都是弱实体,必须依赖于职工存在。

8.2.2 普遍化与特殊化 Specialization and Generalization

类似于面向对象里面的子类和父类。

8.2.3 聚集

允许将两个实体间的关系也看成一个实体。

8.2.4 范畴 Category

可以用不同类型的实体组成的集合表达一个实体。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值