数据库原理及SQLServer第一章数据库基础知识杨帆2020年2月3日星期一C++面向对象程序设计第一章数据库基础知识1.1数据管理技术的发展1.2数据库的基本概念1.3数据模型1.4数据库系统结构2020年2月3日星期一C++面向对象程序设计1.1数据管理技术的发展1.1.1手工管理阶段1.1.2文件系统阶段1.1.3数据库系统阶段2020年2月3日星期一C++面向对象程序设计1.1.1手工管理阶段到目前为止数据管理技术经历了三个阶段:手工管理阶段、文件管理阶段和数据库技术阶段。数据库技术是20世纪60年代末期发展起来的数据管理技术。数据库技术仍在日新月异地发展,数据库技术的应用在继续深入。2020年2月3日星期一C++面向对象程序设计1.1.1手工管理阶段手工管理阶段具有以下特点:1.不保存数据2.没有软件系统对数据进行管理3.数据不共享4.数据不具有独立性2020年2月3日星期一C++面向对象程序设计1.1.1手工管理阶段手工管理阶段程序与数据之间的对应关系程序1程序n程序2数据集1数据集2数据集n……2020年2月3日星期一C++面向对象程序设计1.1.2文件系统阶段从20世纪50年代后期至60年代中期,计算机硬件方面已有了磁鼓、磁盘等直接存储设备,计算机软件的操作系统中已经有了专门的管理数据软件,一般称为文件系统。处理方式上不仅有了批处理,而且能够联机实时处理。这时,计算机不仅用于科学计算,也已大量用于数据处理。2020年2月3日星期一C++面向对象程序设计1.1.2文件系统阶段文件系统阶段具有以下特点:1.数据以文件的形式长期保存2.由文件系统管理数据3.文件形式多样化4.数据存取以记录为单位2020年2月3日星期一C++面向对象程序设计1.1.2文件系统阶段尽管文件系统有上述优点,但是,文件系统仍存在以下缺点。1.数据共享性差,冗余度大2.数据独立性差2020年2月3日星期一C++面向对象程序设计1.1.2文件系统阶段文件系统阶段程序与数据之间的对应关系程序1程序n程序2数据集1数据集2数据集n……文件管理系统2020年2月3日星期一C++面向对象程序设计1.1.3数据库系统阶段20世纪60年代后期,数据管理技术就进入了数据库系统阶段。数据库技术是在文件系统的基础上发展起来的新技术,为用户提供了一种使用方便、功能强大的数据管理手段。在这一阶段出现了统一管理数据的专门软件系统一数据库管理系统。2020年2月3日星期一C++面向对象程序设计1.1.3数据库系统阶段用数据库系统来管理数据比文件系统具有明显的优点:1.面向数据模型对象2.数据的共享性高、冗余度低、易扩充3.数据和程序之间具有较高的独立性4.数据由DBMS统一管理和控制2020年2月3日星期一C++面向对象程序设计1.1.3数据库系统阶段数据库管理系统DBMS提供了数据安全性控制、数据完整性控制、并发控制和数据恢复等数据控制功能。数据的安全性(Security)是指保护数据以防止不合法的使用造成的数据的泄密和破坏。数据的完整性(Integrity)是指数据的正确性、有效性和相容性。并发控制(Concurrency)是指当多个用户的并发进程同时存取、修改数据库时,可能会发生相互干扰而得到错误的结果或使得数据库的完整性遭到破坏,因此必须对多用户的并发操作加以控制和协调。数据恢复(Recovery)是指当计算机系统的硬件故障、软件故障、操作员的失误以及故意的破坏影响数据库中数据的正确性,甚至造成数据库部分或全部数据的丢失时。DBMS必须具有将数据库从错误状态恢复到某一已知的正确状态的功能。2020年2月3日星期一C++面向对象程序设计1.1.3数据库系统阶段数据库系统阶段程序与数据之间的对应关系:程序A程序C程序BDBMSDB2020年2月3日星期一C++面向对象程序设计1.2数据库的基本概念常用的术语和基本概念:1.数据(Data)2.数据库(DataBase,简称DB)3.数据库管理系统(DataBaseManagementSystem,简称DBMS)4.数据库系统(DataBaseSystem,简称DBS)2020年2月3日星期一C++面向对象程序设计1.2数据库的基本概念数据库系统可以用图表示为:用户用户用户…应用系统应用开发工具DBMS操作系统数据库数据库管理员2020年2月3日星期一C++面向对象程序设计1.3数据模型1.3.1信息的三种世界1.3.2概念模型1.3.3常见的三种数据模型2020年2月3日星期一C++面向对象程序设计1.3.2概念模型1.概念模型中的基本术语(1)键(Key)(2)主键(PrimaryKey)(3)次键(SecondaryKey)(4)域(Domain)(5)联系(Relationship)2020年2月3日星期一C++面向对象程序设计1.3.2概念模型两个实体集之间的联系:1.一对一联系(1:l)3.多对多联系(m:n)2.一对多联系(1:m)2020年2月3日星期一C++面向对象程序设计1.3.2概念模型班级负责班长11班级学习学生1m课程选修学生mn(a)1:l联系(b)1:m联系(c)m:n联系2020年2月3日星期一C++面向对象程序设计1.3.2概念模型概念模型的表示方法概念模型是对信息世界建模,所以概念模型应该能够方便、准确地描述出信息世界中的基本概念。概念模型的表示方法很多,其中最为著名和使用最广泛的是P.P.Chen于1976年提出的实体一联系方法(Entity-RelationshipApproach)。该方法是用E-R图来描述现实世界的概念模型,E-R方法也称为E-R模型。2020年2月3日星期一C++面向对象程序设计1.3.2概念模型在E-R图中:实体集用矩形表示,矩形框内写明实体名。属性用椭圆形表示,椭圆形内写明属性名,并用无向边将其与相应的实体连接起来。如图1.8所示。联系用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边上标上联系的类型(1:l,1:m或m:n)。如果一个联系具有属性,则这些属性也要用无向边与该联系连接起来。2020年2月3日星期一C++面向对象程序设计1.3.2概念模型(c)n1mn1课程参考书教师讲授npm供应商配件工程供应(a)(b)员工经理2020年2月3日星期一C++面向对象程序设计1.3.3常见的三种数据模型不同的数据模型具有不同的数据结构形式,数据库系统中最常用的有:层次模型、网状模型、关系模型和面向对象数据模型。其中层次模型和网状模型统称为非关系模型。2020年2月3日星期一C++面向对象程序设计1.3.3常见的三种数据模型1.层次模型层次模型是数据库系统中最早出现的数据模型,层次数据库系统采用层次模型作为数据的组织方式。(1)层次模型的数据结构在数据库中定义满足下面两个条件的基本层次联系的集合为层次模型。有且只有一个结点没有双亲结点,这个结点称为根结点。根以外的其他结点有且只有一个双亲结点。(2)层次模型的优点和不足2020年2月3日星期一C++面向对象程序设计1.3.3常见的三种数据模型层次模型的优点主要有:层次数据模型本身比较简单,只需很少几条命令就可操纵数据库,使用方便。对于实体间联系固定且预先定义好的应用系统,采用层次模型来实现,其性能优于关系模型,不低于网状模型。层次数据模型提供了良好的完整性支持。用层次模型对具有一对多的层次关系的部门描述非常自然、直观,容易理解,这就是层次模型的突出优点。层次模型的不足主要有:只能表示一对多的联系,虽然有多种辅助手段实现联系,但表示笨拙复杂,用户难以掌握。由于树型结构层次顺序的严格与复杂,引起数据的查询和更新操作也很复杂,导致应用程序编写困难。2020年2月3日星期一C++面向对象程序设计1.3.3常见的三种数据模型2.网状模型在现实世界中事物之间的联系更多的是非层次关系的,用层次模型表示非树形结构是很不直接的,网状模型则可以克服这一弊病。(1)网状模型的数据结构网状数据模型从图论观点来看,就是一种连通图。在数据库理论中,满足以下条件的基本层次联系的集合称为网状模型:允许一个以上的结点无双亲;一个结点可以有多于一个的双亲。2020年2月3日星期一C++面向对象程序设计1.3.3常见的三种数据模型L3L2L1L2L1L2L1R1R4R2R3R1R2R1R3R2(a)(b)(b)2020年2月3日星期一C++面向对象程序设计1.3.3常见的三种数据模型(2)网状模型的优点与不足网状模型的优点主要有:更为直接自然地描述现实世界,例如一个结点可以有多个双亲;具有良好的性能,存取效率较高。网状模型的不足主要有:结构较为复杂,特别是随着应用需求范围的扩大,数据库结构就会变得相当复杂,使得用户难以理解与掌握;其中的DDL、DML数据子语言复杂,不利于用户学习实用;网状模型中记录间的联系通过存取路径实现,应用程序访问数据时应当选择适当的存取路径,用户必须了解系统结构的细节,加重了编写应用程序的负担。2020年2月3日星期一C++面向对象程序设计1.3.3常见的三种数据模型(3)网状模型与层次模型的区别由于网状模型允许多个结点没有双亲结点,因此比层次模型更具普遍意义;层次模型从子女结点到双亲结点的联系唯一,而网状模型无此限制。严格讲,网状模型中是没有双亲结点和子女结点概念的,所有结点的地位一律相同;网状模型允许有“复合关系”,即两个实体之间有两种或者两种以上的联系,其中包括实体集到自身的两种或两种以上联系,而层次模型则不可以。从这个意义上讲,网状模型可以更为直接的描述现实世界,层次模型是受限制的网状模型,可以看成是网状模型的一个特例。2020年2月3日星期一C++面向对象程序设计1.3.3常见的三种数据模型3.关系模型非关系数据模型在理论上不完备,在技术实现上效率较低,现在已被基于关系数据模型的关系数据库取代。关系模型虽然不是数据库管理系统最早支持的数据模型,但关系模型却是当前最重要、最常用的一种数据模型。2020年2月3日星期一C++面向对象程序设计1.3.3常见的三种数据模型(1)关系模型中的主要术语关系(Relation)关系是一种规范化的表格,它有以下限制:关系中的每一个属性值都是不可分解的。关系中不允许出现相同的元组。关系中不考虑元组之间的顺序。元组中属性是无序的。2020年2月3日星期一C++面向对象程序设计1.3.3常见的三种数据模型元组(Tuple)表中的一行即为一个元组。属性(Attribute)表中的一列即为一个属性,一个表会有多个属性,为了区分属性,要给每一列起一个属性名。键(Key)表中的某个属性或属性组,它们的值可以惟一地确定一个元组,且属性组中不含多余的属性,这样的属性或属性组称为关系的键。域(Domain)属性的取值范围称为域。例如,学生的年龄属性的域是(16-35),性别的域是(男、女)。分量(Element)元组中的一个属性值。关系模式(Relationmode)对关系的描述,一般表示为:关系名(属性1、属性2、…、属性n)2020年2月3日星期一C++面向对象程序设计1.3.3常见的三种数据模型(2)数据模型三要素在关系模型的体现我们知道,数据模型具有三个要素或者说是三个组成部分:数据结构、数据操作和完整性规则。关系模型的基本数据结构就是关系。关系模型中的数据操作就是关系运算,它可以分为关系代数和关系演算。关系模型具有下述三类完整性规则:实体完整性规则参照完整性规则用户定义的完整性规则2020年2月3日星期一C++面向对象程序设计1.3.3常见的三种数据模型(3)关系模型的优点和不足关系模型的优点主要有:关系模型的概念清晰单一,存取路径面向用户,公开透明,提高了数据的独立性,有利于数据的安全保密性,简化了程序员的工作和数据库开发建立工作。数据操作是集合操作关系模型的不足在于关系