数据库基础知识(上):https://developer.aliyun.com/article/1529285
2.1 概念数据模型
E-R模型又名实体-联系模型(Entity-Rclationship Model, E-R模型),用来描述现实世界的概念模型。只能说明实体间的语义联系,还不能进一步地详细说明数据结构。
E-R 方法又称实体-联系方法,该方法直接从现实世界中抽象出实体和实体间的联系,然后用非常直观的E-R图来表示数据模型。图构件如下:
在E-R图中,实体集中作为主码(或主键)的一部分属性名下面加下画线标明。另外,在实体集与联系的线段上标注联系的类型。
1)实体
在E-R模型中实体用矩形表示,通常矩形框内写明实体名。实体是现实世界中可以区别于其他对象的“事件” 或“物体”。每个实体由一组特性(属性)来表示,其中的某一部分属性可以唯一标识实体,如职工号。实体集是具有相同属性的实体集合,例如,学校所有教师具有相同的属性 ,因此教师的集合可以定义为一个实体集:学生具有相同的属性,因此学生的集合可以定义为另一个实体集。
2)联系
联系用菱形表示,通常可在菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标注上联系的类型(1:1、1:*或*:*)。实体的联 系分为实体内部的联系和实体与实体之间的联系。实体内部的联系反映数据在同一记录内部各字段间的联系。
两个实体之间的联系可分为3类:一对一联系记为1:1,一对多联系记为1:*(或1:n),多对多联系记为*:*(或m:n)。
1:1。如果对于实体集A中的每一个实体,实体集B中至多有 一个实体与之对应, 反之亦然,则称A 与B 具有一对一联系。
1:*。如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之对应;反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之对应,则称A与B 具有一对多联系,
*:*。如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之对应;反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之对应,则称A与B具有多对多联系。
(a) 电影院里一个观众部门项目座位只能坐一个观众,因此观众与座位之间是一个1:1的联系,联系名为“V_S”。
(b) 部门DEPT和职工EMP实体集,若一个职工只能属于一个部门,那么,这两个实体集之间应是一个1:*的联系,联系名为“D_E”。
© 工程项目PROJ和职工EMP实体集,若一个职工可以参加多个项目,一个项目可以由多个职工参加,那么,这两个实体集之间应是一个*:*的联系,联系名为“PR_E”。
两个以上不同实体集之间存在1:1:1
、1:1:*
、1:*:*
和*:*:*
的联系。
(a) 表示供应商Supp、项目Proj和零件Part之间的多对多(*:*:*)的联系,联系名为“SP_P”。表示供应商为多个项目供应多种零件,每个项目可用多个供应商供应的零件,每种零件可由不同的供应商供应的语义。
(b) 表示病房、病人和医生之间的一对多对多(1:*:*)的联系,联系名为“P_D”。表示一个特护病房有多个病人和多个医生,一个医生只负责一个病房,一个病人只属于一个病房的语义。
同一实体集内的各实体之间也存在1:1、1:*和*:*的联系,如职工实体集中的领导与被领导联系是1:*的,职工实体集中的婚姻联系是1:1的。
3)属性
属性是实体某方面的特性。例如,职工实体集具有职工号、姓名、年龄、参加工作时间和通信地址等属性。每个属性都有其取值范围,如职工号为00019999的4位整型数,姓名为10位的字符串,年龄的取值范围为1860等。在同一实体集中,每个实体的属性及其域是相同的,但可能取不同的值。E-R模型中的属性有如下分类:
(1)简单属性和复合属性。简单属性是原子的、不可再分的,复合属性可以细分为更小的部分(即划分为别的属性)。有时用户希望访问整个属性,有时希望访问属性的某个成分,那么在模式设计时可采用复合属性。例如,职工实体集的通信地址可以进一步分为邮编、省、市、 街道。若不特别声明,通常指的是简单属性。
(2)单值属性和多值属性。前面所举的例子中,定义的属性对于一个特定的实体都只有单独的一个值。例如,对于一个特定的职工,只对应一个职工号、职工姓名,这样的属性叫作单值属性。但是,在某些特定情况下,一个属性可能对应一组值。例如,职工可能有0 个、1 个或多个亲属,那么职工的亲属的姓名可能有多个数目,这样的属性称为多值属性。
(3)NULL 属性。当实体在某个属性上没有值或属性值未知时,使用NULL值。表示无意义或不知道。
(4)派生属性。派生属性可以从其他属性得来。例如,职工实体集中有“参加工作时间”和“工作年限”属性,那么“工作年限” 的值可以由当前时间和参加工作时间得到。这里,“ 工作年限” 就是一个派生属性。
扩充的E-R模型
扩充的E-R模型,包括弱实体、特殊化、概括和聚集等概念。
弱实体是指某实体是否存在对于另一些实体具有很强的依赖关系,即一个实体的存在必须以另一个实体为前提,而将这类实体称为弱实体。如某企业职工与家属的联系,家属总是属于某职工的,若某职工离职将其从职工关系中删除,家属也随即删除,那么家属属于“弱实体” ,职工与家属之间的“所属”联系属于依赖联系。
子类继承超类的所有属性和联系,但是,子类还有自己特殊的属性和联系。超类-子类关系模型使用特殊化圆圈和连线的一般方式来表示。超类到圆圈有一条连线,连线为双线表示全特殊化,连线为单线表示部分特殊化:双竖边矩形框表示子类;有符号 “∪ \cup∪” 的线表示特殊化;圆圈中的d表示不相交特殊化;圆圈中的O表示重叠特殊化。图构件如下:
案例1. 某学校教学管理系统有5个实体:系(系号,系名,主任名),教师(教师号,教师名,职称),学生(学号,姓名,年龄,性别),课程(课程号,课程名,学分),项目(项目号,名称,负责人)。该校有若干个系,每个系有若干名教师和学生;每个教师可以担任若干门课程,一门课程只有一名教师承担;每个教师可以参加多项项目,每个项目可由多名教师承担,每个项目的参加人有排名;每个学生可以同时选修多门课程,一门课程可由多名学生选择。请设计某学校的教学管理的E-R模型。
分析:
(1)由于每个教师可以担任若干门课程,一门课程只有一名教师承担,故在教师和课程之间需要建立一个1:*“任课”联系。
(2)由于教师参加多项项目,每个项目可由多名教师承担,故在教师和项目之间需要建立一个*:*“参加”联系;该联系需要增设一个排名属性。
(3)由于每个学生可以同时选修多门课程,一门课程可由多名学生选择,故学生和课程之间需要建立一个*:*“选修”联系;其中,“选修”联系有一个成续属性。
(4)教师、学生与系之间的所属关系的1:*:*“领导”联系。
案例2. 假设某高校学生实体集可以分为研究生、本科生、大专生和在职生子集;研究生、本科生、大专生和在职生概括为学生:将学生、教职工概括为人。各实体情况叙述如下,请设计该高校的扩充E-R图。
(1)学生实体集用学号标识,并且有不同的专业属性,学生的子实体包括研究生、本科生、 大专生和在职生。其中:研究生除了学习外,有专门负责指导该研究生的导师,还要参加科研 项目,项目有项目号和项目名属性;本科生有奖学金;专科生分2 年学制和3 年学制;在职生有一定的工作量要求。 (2)教职工实体集用职工号标识,教职工的子实体包括在职生、教师和工人;其中教师有职称,工人有不同的工种。
分析:
(1)学生、教职工可以概括为人,学生和教职工是实体集“人”的全特殊化。提取学生、教职工的公共属性“ 身份证号、姓名、性别、生日及联系方式”作为实体“人”的属性。学生子类有学号和专业的特殊属性;教职工子类有职工号的特殊属性。按照超类-子类扩充E-R模型的表示方法,超类“人”到圆圈为双线表示全特殊化。由于有的学生可能为教职工,所以超类 到子类的圆圈内填写“o”,表示连接的子类有重叠。子类“学生” 和“教职工”用双竖线矩形。
(2)学生实体集可以分为研究生、本科生、大专生和在职生子类,那么,研究生、本科生、大专生和在职生是实体集“学生”的特化。研究生不仅要继承学生的所有属性,还要增加学位类型、导师的属性。作为学生实体中的研究生、本科生和大专生子集不相交即无重叠,所以超类到子类的圆圈内填写“d” ,表示连接的子类不相交。子类“研究生”“本科生”“大专生”和“在职生”用双竖线矩形。
(3)教职工实体集可以分为教师、工人和在职生子类,那么,教师、工人和在职生是实体集“教职工”的特殊化。由于在职生、教师和工人的集合等于教职工,所以该子类是“教职工”全部特殊化。教师、工人和在职生不仅要继承教职工的所有属性,教师、工人和在职生分别还要增加职称、工种和工作量属性。又由于有的教职工可能为学生,所以超类到子类的圆圈内填写 “O” ,表示连接的子类有重叠。
(4)根据题意研究生还需要参加项目,项目有项目号和项目名属性,所以研究生与项目之间需要增加“参加”联系。
(5)最终合并后,E-R图如下:
2.2 基本数据模型
1)层次模型(Hierarchical Model)
层次模型采用树型结构表示数据与数据间的联系。在层次模型中,每个结点表示一个记录类型(实体),记录之间的联系用结点之间的连线表示,并且根结点以外的其他结点有且仅有一个双亲结点。上层和下一层类型的联系是1:n联系(包括1:1联系)。
层次模型不能直接表示多对多的联系。若要表示多对多的联系,可采用冗余节点法或虚拟节点分解法。
层次模型的优点是记录之间的联系通过指针实现,比较简单,查询效率高。
层次模型的缺点是只能表示1:n的联系,尽管有许多辅助手段实现m:n的联系,但较复杂不易掌握;由于层次顺序严格和复杂,插入删除操作的限制比较多,导致应用程序编制比较复杂。
2)网状模型(Network Model)
采用网络结构表示数据与数据间联系的数据模型称为网状模型(Network Model)。在网状模型中,允许一个以上的节点无双亲,一个节点可以有多于一个的双亲。
网状模型(也称DBTG模型)是一个比层次模型更具有普遍性的数据结构,是层次模型的 一 个特例。网状模型可以直接地描述现实世界,因为去掉了层次模型的两个限制,允许两个节点之间有多种联系(称之为复合联系)。需要说明的是,网状模型不能表示记录之间的多对多 联系,需要引入联结记录来表示多对多联系。
网状模型中的每个节点表示一个记录类型(实体),每个记录类型可以包含若干个字段 (实体的属性),节点间的连线表示记录类型之间一对多的联系。层次模型和网状模型的主要区别如下:
网状模型中子女节点与双亲节点的联系不唯一,因此需要为每个联系命名。
网状模型允许复合链,即两个节点之间有两种以上的联系。
通常,网状数据模型没有层次模型那样严格的完整性约束条件,但DBTG在模式DDL中 提供了定义DBTG数据库完整性的若干概念和语句,主要有:
支持记录码的概念。码能唯一标识记录的数据项的集合。
保证一个联系中双亲记录和子女记录之间是一对多联系。
以支持双亲记录和子女记录之间的某些约束条件。
网状模型的主要优点是能更为直接地描述现实世界,具有良好的性能,存取效率高。
网状模型的主要缺点是结构复杂。
3)关系模型(RelationalModel)
关系模型(Relation Model)是目前最常用的数据模型之一。关系数据库系统采用关系模型作为数据的组织方式,在关系模型中用表格结构表达实体集以及实体集之间的联系,其最大特色是描述的一致性。关系模型是由若干个关系模式组成的集合。一个关系模式相当于一个记录型,对应于程序设计语言中类型定义的概念。关系是一个实例,也是一张表,对应于程序设计语言中变量的概念。给定变量的值随时间可能发生变化,类似地,当关系被更新时,关系实例的内容也随时间发生了变化。
案例3. 教学数据有以下四种关系模式,其中有下划线的属性是主码属性。
下图是教学模型的一个具体实例。
由于关系模型比网状、层次模型更为简单灵活,因此,数据处理领域中,关系数据库的使用已相当普遍。但是,现实世界存在着许多含有更复杂数据结构的实际应用领域,例如CAD数据、图形数据和人工智能研究等,需要有一种数据模型来表达这类信息,这种数据模型就是面向对象的数据模型。
4)面向对象数据模型(Object Oriented Model)
面向对象数据模型(Object Oriented Model)的核心概念如下:
对象和对象标识(OID)。对象是现实世界中实体的模型化,与记录、元组的概念相似,但远比它们复杂。每 一个对象都有 一个唯一的标识,称为对象标识。对象标识不等于关系模式中的记录标识,OID是独立于值的,全系统唯一的。
封裝(encapsulate)。每一个对象是状态(state)和行为(behavior)的封装。对象的状态是该对象属性的集合,对象的行为是在该对象状态上操作的方法(程序代码)的集合。被封装的状态和行为在对象外部是看不见的,只能通过显式定义的消息传递来访问。
对象的属性(objectattribute)。对象的属性描述对象的状态、组成和特性,对象的某个属性可以是单值或值的集合。对象的一个属性值本身在该属性看来也是一个对象。
类和类层次(classandclasshierarchy)。
类。所有具有相同属性和方法集的对象构成了一个对象类。任何一个对象都是某个对象类的一个实例(instance)。对象类中属性的定义域可以是任何类,包括基本类,如整型、实型和字串等;一般类,包含自身属性和方法类本身。
类层次。所有的类组成了一个有根有向无环图,称为类层次(结构)。一个类可以从直接/间接祖先(超类)中继承(inherit)所有的属性和方法,该类称为子类。
继承(inherit)。子类可以从其超类中继承所有属性和方法。类继承可分为单继承(即一个类只能有一个超类)和多重继承(即一个类可以有多个超类)。
面向对象数据模型比网络、层次、关系数据模型具有更加丰富的表达能力,模型相对复杂。
3. 数据存储和查询
1)存储管理器
存储管理器负责数据库中数据的存储、检索和更新。在数据库系统中,存储管理器是存储底层数据和应用程序,以及向数据库提交的查询之间提供接又的程序模块。存储管理器负责与文件系统交互,将不同的DML语句翻译成底层文件系统命令,这样原始数据通过文件系统就存储在磁盘上。
存储管理器组件包括:
权限及完整性管理器。检查视图访问数据库用户的权限,检测数据是否满足完整性约束。
事务管理器。保证一旦发生了故障,数据库的一致性状态,以及并发事务执行时不发生冲突。
文件管理器。管理磁盘空间的分配,管理用于表示磁盘所有信息的数据结构。
缓冲管理器。负责将数据从磁盘放入内存,并决定哪些数据应被缓冲放入内存。
2)查询处理器
查询处理器的组件包括:
- DDL解释器。解释DDL语句并将其放入数据字典中。
- DML编译器。将查询语言中的DML语句翻译为一个计算方案,包括一系列查询计算引擎能理解的命令。