数据库系统概念
四个基本概念
数据、数据库、数据库管理系统、数据库系统是与数据库技术密切相关的四个基本概念。
数据
描述事物的符号记录称之为数据,他可以是文字、图像等等,不光拘泥于数字。
数据的含义称为数据的语义,数据与其语义密不可分。
数据库(DataBase)
存放数据的仓库。是长期储存在计算机内的、有组织可共享的大量数据的集合。
数据库数据的特点包括:
- 永久存储
- 有组织
- 可共享
数据库管理系统(DataBase Management System)
一个系统软件,能够实现科学组织和存储数据、高效获取和维护数据,位于用户与操作系统之间。
与操作系统一样是计算机的基础软件,其功能包括:
数据定义功能
系统提供数据定义语言(DDL),可以方便对数据对象的组成与结构进行定义。
数据组织、存储和管理
数据操纵
提供数据操纵语言(DML),及其编译程序操纵数据实现对数据库的基本操作(查询、插入、删除和修改)。
数据库事物管理和运行管理
数据库的建立和维护
其他功能
包括数据库管理系统与网络中其他软件系统的通信功能、一个数据库管理系统与另一个数据库管理系统或文件系统的数据转换功能等等。
数据库系统(DataBase System)
由数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员(DBA)组成的存储、管理、处理和维护数据的系统。
下图为数据库系统以及引入数据库后计算机系统的层次结构
==人们常常把数据库系统简称为数据库==
数据管理技术的产生和发展
数据管理技术经历三个阶段,分别为:人工管理、文件系统、数据库系统。
人工管理
二十世纪五十年代中期以前,计算机用于科学计算,其特点为:
- 数据不保存
- 应用程序管理数据
- 数据不共享
- 数据不具有独立性
文件系统
二十世纪五十年代后期到六十年代中期,拥有磁盘等加持,软件方面已经有专门的数据管理系统,其特点为:
- 数据可以长期保存
- 由文件系统管理数据
- 数据共享性差、冗余度大
- 数据独立性差
数据库系统
二十世纪六十年代后期以来,计算机管理的对象规模越来越大,应用范围越来越广泛,出现数据库管理系统,==从文件系统到数据库系统标志着数据管理技术的飞跃==。
以下为数据管理三阶段的比较

数据库系统的特点
数据结构化
数据库系统实现整体数据的结构化,是数据库系统与文件系统的本质区别。
==也就是说,数据库中的数据不再仅仅针对某一个用用,二十面向整个组织或企业;不仅数据内部是结构化的,整体也是结构化的,数据之间是具有联系的。==
数据的共享性高,冗余度低,易扩充
数据共享可以大大减少数据冗余,节约存储空间。数据共享还能够避免数据之间的不相容性与不一致性。
==同时数据库系统弹性大、易于扩充。==
数据独立性高
包括物理独立性与逻辑独立性。
物理独立性指的是用户的应用程序与数据库中的数据的物理存储相互独立。当数据的物理存储改变了,应用程序不用改变。
逻辑独立性指的是用户的应用程序与数据库中的逻辑结构相互独立。数据的逻辑结构改变了,用户程序也可以不变。
数据由DBMS统一管理和控制组织和操作
==数据库的共享是并发的共享,为此需要避免用户间相互干扰的隐患。==
另外,数据库中数据的正确与一致也要得到保障,为此有以下几方面的数据控制功能:
数据的安全性保护
数据的完整性保护
并发控制
数据库恢复
数据模型
它是对现实世界数据的抽象、是数据库系统的核心和基础。我们说数据模型必须满足三个方面的要求,分别为:能比较真实地模拟现实世界、容易为人所理解、便于在计算机上实现。
两大类数据模型
两大类数据模型分属不同层次
概念模型
也称为信息模型,它是按用户的观点来对数据和信息建模,用于数据库设计。
逻辑模型和物理模型
计算机系统的观点对数据建模,用于DBMS的实现。
逻辑模型主要包括网状模型、层次模型、关系模型、面向对象模型等,按计算机系统的观点对数据建模,用于DBMS实现。
物理模型是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法。
概念模型
用途
用于信息世界的建模
是现实世界到机器世界的一个中间层次
是数据库设计的有力工具
数据库设计人员和用户之间进行交流的语言
基本要求
- 较强的语义表达能力
- 能够方便、直接地表达应用中的各种语义知识
- 简单、清晰、易于用户理解
现实世界有哪些最基本的概念?
实体(Entity) 客观存在并可相互区别的事物称为实体。可以是具体的人、事、物或抽象的概念。
属性(Attribute) 实体所具有的某一特性称为属性。一个实体可以由若干个属性来刻画。
码(Key) 唯一标识实体的属性集称为码。
域(Domain) 属性的取值范围称为该属性的域。
实体型(Entity Type) 用实体名及其属性名集合来抽象和刻画同类实体称为实体型
例子:学生(学号、姓名、性别、出生年月)
实体集(Entity Set) 同一类型实体的集合称为实体集
联系(Relationship) 、
现实世界:事物内部以及事物之间的联系
信息世界:实体内部的联系和实体之间的联系
两个实体型之间的联系
一对一联系
例子:一个班级只有一个正班长、一个班长只在一个班中任职等。
定义:如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1:1 。
一对多联系
例子:一个班级中有若干名学生、每个学生只在一个班级中学习等。
定义:如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多联系,记为1:n 。
多对多联系
例子:一门课程同时有若干个学生选修、一个学生可以同时选修多门课程等。
定义:如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体B具有多对多联系,记为m:n 。
将三种类型的联系总结即为:
两个以上实体类型之间的联系
两个以上实体型之间一对多联系
例子:课程、教师与参考书三个实体型每一个教师可以讲授若干门课程、每门课程可以使用若干本参考书等。
定义:若实体型E1,E2,…,En存在联系,对于实体型Ej(j=1,2,…,i-1,i+1,…,n)中的给定实体,最多只和Ei中的一个实体相联系,则我们说Ei与E1,E2,…,Ei-1,Ei+1,…,En之间的联系是一对多的。
两个以上实体型间一对一联系/两个以上实体型间多对多联系
例子:一个供应商可以供给多个项目多种零件每个项目可以使用多个供应商供应的零件每种零件可由不同供应商供给。
同一实体集内的各实体之间的关系
例子(一对多):职工实体型内部具有领导与被领导的联系某一职工(干部)“领导”若干名职工一个职工仅被另外一个职工直接领导这是一对多的联系。
概念模型的一种表示方法
实体-联系方法,该方法用E-R图来描述现实世界的概念模型,E-R方法也称为E-R模型。
E-R图
实体型
用矩形表示,矩形框内写明实体名
属性
用椭圆形表示,并用无向边将其与相应的实体连接起来
联系
联系本身用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1、1:n或m:n)。
联系的属性:
联系本身也是一种实体型,也可以有属性。
如果一个联系具有属性,则这些属性也要用无向边与该联系连接起来 。
例子:用E-R图表示某个工厂物资管理的概念模型实体仓库: 仓库号、面积、电话号码零件 :零件号、名称、规格、单价、描述供应商:供应商号、姓名、地址、电话号码、帐号项目:项目号、预算、开工日期职工:职工号、姓名、年龄、职称。
实体之间的联系如下: 一个仓库可以存放多种零件,一种零件可以存放在多个仓库中。用库存量来表示某种零件在某个仓库中的数量一个仓库有多个职工当仓库保管员,一个职工只能在一个仓库工作职工之间具有领导-被领导关系。即仓库主任领导若干保管员。
练习(画ER图):某工厂生产若干种产品,每种产品由不同零件组成,有的零件可用在不同的产品上。这些零件由不同的原料制成,不同零件所用的原料可以相同。这些零件按所属的不同产品分别放在不同的仓库中,原料按照类别放在相应的仓库中。
数据模型的组成要素
现实世界->概念模型:数据库设计人员完成
概念模型->逻辑模型:数据库设计人员完成
逻辑模型->物理模型:由DBMS完成
数据模型是严格定义的一组概念的集合。通常由数据结构、数据操作和数据的完整性约束条件三部分组成。
数据结构
描述数据库的组成对象,以及对象之间的联系。
描述的内容:
- 与数据类型、内容、性质有关的对象
- 与数据之间联系有关的对象
==数据结构是对系统静态特性的描述==。
数据操作
对数据库中各种对象(型)的实例(值)允许执行的操作及有关的操作规则。
数据操作的类型:
- 查询
- 更新(包括插入、删除、修改)
数据模型对操作的定义:
- 操作的确切含义
- 操作符号操作规则(如优先级)
- 实现操作的语言
==数据操作是对系统动态特性的描述==。
数据的完整性约束条件
一组完整性规则的集合。
完整性规则:
给定的数据模型中数据及其联系所具有的制约和储存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效、相容。
数据模型对完整性约束条件的定义:
必须遵守的基本的通用的完整性约束条件。
例如,关系模型中,任何关系必须满足实体完整性和参照完整性两个条件。
反映具体应用所涉及的特定的约束条件。
例子:学校数据库中规定博士学生的年龄必须小于45岁
例子:银行的系统中规定帐号的余额不能小于1元
最常用的数据模型
格式化模型
- 层次模型
- 网状模型
关系模型
面向对象模型
对象关系模型
层次模型
是数据库系统中最早出现的数据模型,用树形结构来表示各类实体以及实体间的联系。
满足下面两个条件的基本层次联系的集合称为层次模型:
有且只有一个结点没有双亲结点,这个结点称为根结点
根以外的其它结点有且只有一个双亲结点
层次模型中的几个术语:根结点,双亲结点,兄弟结点,叶结点
层次数据模型的数据结构
表示方法:
实体型:用记录类型描述,每个结点表示一个记录类型(实体)
属性:用字段描述,每个记录类型可包含若干个字段
联系:用结点之间的连线表示记录类型(实体)之间的一对多的父子联系
用JSON表示的层次数据模型
'[{"系号": "D02", "系名": "计算机", "系址": "信息楼", "教研室": [{"教研室号": "R01", "教研室名": "数据库", "教师": [{"教工号": "E2101", "姓名": "王大明", "研究方向": "数据库"}, {"教工号": "E1709", "姓名": "冯灵", "研究方向": "数据仓库"}, {"教工号": "E3501", "姓名": "孟勇", "研究方向": "并行数据库"}]}, {"教研室号": "R01", "教研室名": "信息系统", "教师": []}, {"教研室号": "R03", "教研室名": "网络", "教师": [{"教工号": "E1101", "姓名": "陈芝", "研究方向": "网络安全"}, {"教工号": "E3102", "姓名": "张豪", "研究方向": "网络管理"}]}], "学生": [{"学号": "63871", "姓名": "文继容", "GPA": "A"}, {"学号": "S63874", "姓名": "刘华", "GPA": "C"}, {"学号": "S63876", "姓名": "张孝", "GPA": "A"}]}]' for dept in d: for group in dept['教研室']: for teacher in group['教师']: if teacher['教工号'] == 'E1709': print(teacher)
多对多联系在层次模型中的表示
用层次模型间接表示多对多联系
方法:
将多对多联系分解成一对多联系
分解方法:
冗余结点法
通过增设两个冗余结点将上图中的多对多联系转换成两个一对多联系(b)。
虚拟结点法
即将冗余结点法中新增的结点用其指针代替(c)。
例子:学生选课数据库
层次模型的数据操纵与完整性约束
层次模型的数据操纵:
- 查询
- 插入
- 删除
- 更新
层次模型的完整性约束条件:
- 无相应的双亲结点值就不能插入子女结点值
- 如果删除双亲结点值,则相应的子女结点值也被同时删除
层次数据模型的存储结构
邻接法
按照层次树前序遍历的顺序把所有记录值依次邻接存放,即通过物理空间的位置相邻来实现层次顺序。
链接法
用指引来反映数据之间的层次联系
子女-兄弟链接法
每个记录设两类指针,分别指向最左边的子女(每个记录型对应一个)和最近的兄弟。
层次序列链接法
按树的前序穿越顺序链接各记录值。
层次模型的优缺点
优点:
- 层次模型的数据结构比较简单清晰
- 查询效率高,性能优于关系模型,不低于网状模型
- 层次数据模型提供了良好的完整性支持
缺点:
- 多对多联系表示不自然
- 对插入和删除操作的限制多,应用程序的编写比较复杂
- 查询子女结点必须通过双亲结点
网状模型
网状数据库系统采用网状模型作为数据的组织方式,典型代表是DBTG系统。
满足下面两个条件的基本层次联系的集合:
允许一个以上的结点无双亲
一个结点可以有多于一个的双亲
允许两个结点之间有多种联系(复合联系)
==网状模型可以更直接地去描述现实世界,层次模型实际上是网状模型的一个特例==
多对多联系在网状模型中的表示:
用网状模型间接表示多对多联系
方法:将多对多联系直接分解成一对多联系
例如:一个学生可以选修若干门课程,某一课程可以被多个学生选修,学生与课程之间是多对多联系 引进一个学生选课的联结记录,由3个数据项组成:学号、课程号、成绩
表示某个学生选修某一门课程及其成绩。
网状数据库系统(如DBTG)对数据操纵加了一些限制,提供了一定的完整性约束
码:唯一标识记录的数据项的集合
支持双亲记录和子女记录之间某些约束条件
有些子女记录要求双亲记录存在才能插入,双亲记录删除时也连同删除。例如学生选课记录。
关键:实现记录之间的联系
常用方法:单向链接、双向链接、环状链接、向首链接
网状数据模型的优缺点
优点能更为直接地描述现实世界,如一个结点可以有多个双亲具有良好的性能,存取效率较高
缺点结构比较复杂,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握DDL、DML语言复杂,用户不容易使用记录类型联系变动后涉及链接指针的调整,扩充和维护都比较复杂 。
格式化模型的共同缺点
记录之间的联系是通过存取路径实现的,应用程序在访问数据时必须选择适当的存取路径,用户必须了解系统结构的细节,加重了编写应用程序的负担。
不支持集合处理,未提供一次处理多个记录的功能。
关系模型
最重要的一种数据模型,采用关系模型作为数据的组织方式。
在用户观点下,关系模型中数据的逻辑结构是一张二维表,它由行和列组成。
关系数据模型的数据结构
关系(Relation):一个关系对应通常说的一张表
元组(Tuple):表中的一行即为一个元组
属性(Attribute):表中的一列即为一个属性,给每一个属性起一个名称即属性名
主码(Key):表中的某个属性组,它可以唯一确定一个元组
域(Domain):属性的取值范围。分量元组中的一个属性值
关系模式:对关系的描述
关系名(属性1,属性2,…,属性n)
学生(学号,姓名,年龄,性别,系,年级)
关系数据模型的操纵与完整性约束
数据操作是集合操作,操作对象和结果都是关系
- 查询
- 插入
- 删除
- 更新
关系的完整性约束条件
实体完整性
参照完整性
用户定义的完整性
==关系必须是规范化的:每一个分量必须是一个不可分的数据项,不允许表中还有表。==
关系数据模型的存储结构
实体及实体间的联系都用表来表示
表以文件形式存储
有的DBMS一个表对应一个操作系统文件
有的DBMS自己设计文件结构
关系数据模型的优缺点
优点
建立在严格的数学概念的基础上
可以描述一对一、一对多和多对多的联系
概念单一
实体和各类联系都用关系来表示
对数据的检索结果也是关系
存取路径对用户透明
用户只要指出“干什么”,不必详细说明“怎么干”
具有更高的数据独立性,更好的安全保密性
简化了程序员的工作和数据库开发建立的工作
缺点
存取路径对用户透明导致查询效率往往不如非关系数据模型
为提高性能,必须对用户的查询请求进行优化增加了开发DBMS的难度
E-R图转关系模式
1:N
M:N
数据库系统结构
从数据库最终用户角度看,数据库系统的结构分为:
单用户结构
整个数据库系统(应用程序、DBMS、数据)装在一台计算机上,为一个用户独占,不同机器之间不能共享数据
主从式结构
一个主机带多个终端的多用户结构
- 数据库系统,包括应用程序、DBMS、数据,都集中存放在主机上,所有处理任务都由主机来完成
- 各个用户通过主机的终端并发地存取数据库,共享数据资源
优点:易于管理、控制与维护
缺点:
- 当终端用户数目增加到一定程度后,主机的任务会过分繁重,成为瓶颈,从而使系统性能下降。
- 系统的可靠性依赖主机,当主机出现故障时,整个系统都不能使用。
分布式结构
数据库中的数据在==逻辑上是一个整体==,但==物理地分布==在计算机网络的不同结点上。网络中的每个结点都可以独立处理本地数据库中的数据,执行局部应用同时也可以同时存取和处理多个异地数据库中的数据,执行全局应用
优点:适应了地理上分散的公司、团体和组织对于数据库应用的需求
缺点:
- 数据的分布存放给数据的处理、管理与维护带来困难。
- 当用户需要经常访问远程数据时,系统效率会明显地受到网络传输的制约。
客户/服务器
把DBMS功能和应用分开
- 网络中某个(些)结点上的计算机专门用于执行DBMS功能,称为数据库服务器,简称服务器
- 其他结点上的计算机安装DBMS的外围应用开发工具,用户的应用系统,称为客户机
集中的服务器结构:
一台数据库服务器,多台客户机
分布的服务器结构:
在网络中有多台数据库服务器
分布的服务器结构是客户/服务器与分布式数据库的结合
数据库更加开放
客户与服务器一般都能在多种不同的硬件和软件平台上运行
可以使用不同厂商的数据库应用开发工具
易于扩展和共享
客户/服务器结构缺点:
“胖客户”问题:
- 系统安装复杂,工作量大。
- 应用维护困难,难于保密,造成安全性差。
- 相同的应用程序要重复安装在每一台客户机上,从系统总体来看,大大浪费了系统资源。
- 系统规模达到数百数千台客户机,它们的硬件配置、操作系统又常常不同,要为每一个客户机安装应用程序和相应的工具模块,其安装维护代价便不可接受了。
浏览器/应用服务器/数据库服务器多层结构等
- 客户端:
- 浏览器软件
- 浏览器的界面统一,广大用户容易掌握
- 大大减少了培训时间与费用。
- 服务器端分为两部分:
- Web服务器、应用服务器数据库服务器等
- 大大减少了系统开发和维护代价,能够支持数万甚至更多的用户
- 客户端:
从数据库管理系统角度看,数据库系统通常采用三级模式结构,是数据库系统内部的系统结构
型和值的概念:
型:对某一类数据的结构和属性的说明
值:是型的一个具体赋值
例如:
学生记录型:(学号,姓名,性别,系别,年龄,籍贯)
一个记录值: (900201,李明,男,计算机,22,江苏)
模式:
- 数据库逻辑结构和特征的描述
- 是型的描述
- 反映的是数据的结构及其联系
- 模式是相对稳定的
实例:
- 模式的一个具体值
- 反映数据库某一时刻的状态
- 同一个模式可以有很多实例
- 实例随数据库中的数据的更新而变动
例如:
在学生选课数据库模式中,包含学生记录型、课程记录型和学生选课记录型
2019年的一个学生数据库实例包含:
2019年学校中所有学生的记录
学校开设的所有课程的记录
所有学生选课的记录
2018年度学生数据库模式对应的实例与2019年度学生数据库模式对应的实例是不同的
数据库系统的三级模式结构
模式:
也称作逻辑模式
- 数据库中全体数据的逻辑结构和特征的描述
- 所有用户的公共数据视图,综合了所有用户的需求
==一个数据库只有一个模式==
地位:是数据库系统模式结构的中间层
- 与数据的物理存储细节和硬件环境无关
- 与具体的应用程序、开发工具及高级程序设计语言无关
定义:
数据的逻辑结构(数据项的名字、类型、取值范围等)
数据之间的联系
数据有关的安全性、完整性要求
外模式:
也称为子模式或用户模式
- 数据库用户(包括应用程序员和最终用户)使用的局部数据的逻辑结构和特征的描述
- 数据库用户的数据视图,是与某一应用有关的数据的逻辑表示
地位:介于模式与应用之间
- 模式与外模式的关系:一对多
- 外模式通常是模式的子集
- 一个数据库可以有多个外模式。反映了不同的用户的应用需求、看待数据的方式、对数据保密的要求
- 外模式与应用的关系:一对多
- 同一外模式也可以为某一用户的多个应用系统所使用
- 但一个应用程序只能使用一个外模式
外模式的用途:
保证数据库安全性的一个有力措施
每个用户只能看见和访问所对应的外模式中的数据
内模式:
也称为存储模式
- 是数据物理结构和存储方式的描述
- 是数据在数据库内部的表示方式
- 记录的存储方式(顺序存储,按照B树结构存储, 按hash方法存储)
- 索引的组织方式
- 数据是否压缩存储
- 数据是否加密
- 数据存储记录结构的规定
==一个数据库只有一个内模式==
例如:学生记录
如果按堆存储,则插入一条新记录总是放在学生记录存储的最后,如图所示
如果按学号升序存储,则插入一条记录就要找到它应在的位置插入,如图所示
如果按照学生年龄聚簇存放,假如新插入的S3是16岁,则应插入的位置如图所示
数据库系统的三级模式结构示意
数据库的二级映像功能与数据独立性
==三级模式是对数据的三个抽象级别==
二级映象在DBMS内部实现这三个抽象层次的联系和转换
外模式/模式映象
同一个模式可以有任意多个外模式 每一个外模式,数据库系统都有一个外模式/模式映象,定义外模式与模式之间的对应关系映象定义通常包含在各自外模式的描述中
保证数据的逻辑独立性
- 当模式改变时,数据库管理员修改有关的外模式/模式映象,使外模式保持不变
- 应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性
模式/内模式映象
模式/内模式映象定义了数据全局逻辑结构与存储结构之间的对应关系。
- 例如,说明逻辑记录和字段在内部是如何表示的
数据库中模式/内模式映象是唯一的
==该映象定义通常包含在模式描述中==
保证数据的物理独立性
- 当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式映象,使模式保持不变
- 应用程序不受影响。保证了数据与程序的物理独立性,简称数据的物理独立性。
数据库模式
- 即全局逻辑结构是数据库的中心与关键
- 独立于数据库的其他层次
- 设计数据库模式结构时应首先确定数据库的逻辑模式