数据库基础知识(下)

简介: 数据库基础知识

数据库基础知识(上):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:11: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模型,包括弱实体、特殊化、概括和聚集等概念。


弱实体是指某实体是否存在对于另一些实体具有很强的依赖关系,即一个实体的存在必须以另一个实体为前提,而将这类实体称为弱实体。如某企业职工与家属的联系,家属总是属于某职工的,若某职工离职将其从职工关系中删除,家属也随即删除,那么家属属于“弱实体” ,职工与家属之间的“所属”联系属于依赖联系。

image.png

子类继承超类的所有属性和联系,但是,子类还有自己特殊的属性和联系。超类-子类关系模型使用特殊化圆圈和连线的一般方式来表示。超类到圆圈有一条连线,连线为双线表示全特殊化,连线为单线表示部分特殊化:双竖边矩形框表示子类;有符号 “∪ \cup∪” 的线表示特殊化;圆圈中的d表示不相交特殊化;圆圈中的O表示重叠特殊化。图构件如下:


4a0ad3cdff47f3c343d40a7fba0f38c1.png


案例1. 某学校教学管理系统有5个实体:系(系号,系名,主任名),教师(教师号,教师名,职称),学生(学号,姓名,年龄,性别),课程(课程号,课程名,学分),项目(项目号,名称,负责人)。该校有若干个系,每个系有若干名教师和学生;每个教师可以担任若干门课程,一门课程只有一名教师承担;每个教师可以参加多项项目,每个项目可由多名教师承担,每个项目的参加人有排名;每个学生可以同时选修多门课程,一门课程可由多名学生选择。请设计某学校的教学管理的E-R模型。


分析:

(1)由于每个教师可以担任若干门课程,一门课程只有一名教师承担,故在教师和课程之间需要建立一个1:*“任课”联系。


(2)由于教师参加多项项目,每个项目可由多名教师承担,故在教师和项目之间需要建立一个*:*“参加”联系;该联系需要增设一个排名属性。


(3)由于每个学生可以同时选修多门课程,一门课程可由多名学生选择,故学生和课程之间需要建立一个*:*“选修”联系;其中,“选修”联系有一个成续属性。


(4)教师、学生与系之间的所属关系的1:*:*“领导”联系。


e8172ac43ae8d1341f92c09440460b11.png


案例2. 假设某高校学生实体集可以分为研究生、本科生、大专生和在职生子集;研究生、本科生、大专生和在职生概括为学生:将学生、教职工概括为人。各实体情况叙述如下,请设计该高校的扩充E-R图。

(1)学生实体集用学号标识,并且有不同的专业属性,学生的子实体包括研究生、本科生、 大专生和在职生。其中:研究生除了学习外,有专门负责指导该研究生的导师,还要参加科研 项目,项目有项目号和项目名属性;本科生有奖学金;专科生分2 年学制和3 年学制;在职生有一定的工作量要求。 (2)教职工实体集用职工号标识,教职工的子实体包括在职生、教师和工人;其中教师有职称,工人有不同的工种。


分析:


(1)学生、教职工可以概括为人,学生和教职工是实体集“人”的全特殊化。提取学生、教职工的公共属性“ 身份证号、姓名、性别、生日及联系方式”作为实体“人”的属性。学生子类有学号和专业的特殊属性;教职工子类有职工号的特殊属性。按照超类-子类扩充E-R模型的表示方法,超类“人”到圆圈为双线表示全特殊化。由于有的学生可能为教职工,所以超类 到子类的圆圈内填写“o”,表示连接的子类有重叠。子类“学生” 和“教职工”用双竖线矩形。

ed29931fd64e0f23105d042a6008e87d.png



(2)学生实体集可以分为研究生、本科生、大专生和在职生子类,那么,研究生、本科生、大专生和在职生是实体集“学生”的特化。研究生不仅要继承学生的所有属性,还要增加学位类型、导师的属性。作为学生实体中的研究生、本科生和大专生子集不相交即无重叠,所以超类到子类的圆圈内填写“d” ,表示连接的子类不相交。子类“研究生”“本科生”“大专生”和“在职生”用双竖线矩形。

b4e2de7826d5c3508fb67909de6f0984.png



(3)教职工实体集可以分为教师、工人和在职生子类,那么,教师、工人和在职生是实体集“教职工”的特殊化。由于在职生、教师和工人的集合等于教职工,所以该子类是“教职工”全部特殊化。教师、工人和在职生不仅要继承教职工的所有属性,教师、工人和在职生分别还要增加职称、工种和工作量属性。又由于有的教职工可能为学生,所以超类到子类的圆圈内填写 “O” ,表示连接的子类有重叠。


9059ba4905307c5a8dedb0ba8871186f.png


(4)根据题意研究生还需要参加项目,项目有项目号和项目名属性,所以研究生与项目之间需要增加“参加”联系。


4d4789f33c0294ca0c795e1903014453.png


(5)最终合并后,E-R图如下:

963b165586e3af8d87f02f419cc2f6e6.png

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语句翻译为一个计算方案,包括一系列查询计算引擎能理解的命令。

相关文章
|
6月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
|
5月前
|
存储 SQL NoSQL
数据库技术全攻略:从基础知识到实践应用
一、引言 在信息化高速发展的今天,数据库技术已经成为企业运营、系统开发和数据分析等领域不可或缺的重要工具
|
5月前
|
存储 SQL 前端开发
数据库基础知识(上)
数据库基础知识
85 0
|
6月前
|
SQL Java 数据库连接
JAVA数据库的基础知识
JAVA数据库的基础知识
73 1
|
SQL NoSQL 关系型数据库
[MySQL]基础知识笔记(数据库与表操作)
MySQL基础知识(数据库的操作,表的操作(增删改查)等等)
|
NoSQL 关系型数据库 MySQL
数据库基础知识总结
数据库知识基础,这部分内容一定要理解记忆。虽然这部分内容只是理论知识,但是非常重要,这是后面学习 MySQL 数据库的基础。
179 0
|
关系型数据库 MySQL 测试技术
MySQL实战基础知识入门(1):登录数据库命令行
MySQL实战基础知识入门(1):登录数据库命令行
118 0
|
6月前
|
存储 关系型数据库 MySQL
MySQL入门:了解数据库基础知识
MySQL入门:了解数据库基础知识
88 0
|
6月前
|
SQL 关系型数据库 MySQL
MYSQL基础知识之【创建,删除,选择数据库】
MYSQL基础知识之【创建,删除,选择数据库】
79 0
|
存储 关系型数据库 MySQL
数据库基础知识以及MySQL简介
数据库基础知识以及MySQL简介