1、第1章 数据库基础,数据库基本概念,数据库设计,数据库应用系统,1.1 数据库基本概念,1.1.1 数据库与数据库管理系统1数据库数据库(DB)是存放数据的仓库,而且这些数据存在一定的关联,并按一定的格式存放在计算机上。从广义上讲,数据不仅包含数字,还包括文本、图像、音频、视频等。2数据库管理系统数据库管理系统(DBMS)是管理数据库的系统,它按一定的数据模型组织数据。DBMS应提供如下功能:(1)数据定义功能:可定义数据库中的数据对象。(2)数据操纵功能:可对数据库表进行基本操作,如插入、删除、修改、查询等。(3)数据的完整性检查功能:保证用户输入的数据满足相应的约束条件。(4)数据库的安全
2、保护功能:保证只有具有权限的用户才能访问数据库中的数据。(5)数据库的并发控制功能:使多个应用程序可在同一时刻并发地访问数据库的数据。(6)数据库系统的故障恢复功能:使数据库在运行出现故障时进行数据库恢复,以保证数据库可靠运行。(7)在网络环境下访问数据库的功能。 (8)方便、有效地存取数据库信息的接口和工具。,1.1.1 数据库与数据库管理系统,3. 数据库系统数据、数据库、数据库管理系统与操作数据库的应用程序,加上支撑它们的硬件平台、软件平台和与数据库有关的人员一起构成了一个完整的数据库系统。如图1.1所示描述了数据库系统的构成。,1.1.2 数据模型,1. 层次模型如图1.2所示为某学校
3、按层次模型组织的数据示例。,1.1.2 数据模型,2. 网状模型如图1.3所示为按网状模型组织的数据示例。,1.1.2 数据模型,3. 关系模型关系模型以记录组或二维数据表的形式组织数据,以便于利用各种实体与属性之间的关系进行存储和变换,不分层也无指针,是建立空间数据和属性数据之间关系的一种非常有效的数据组织方法。例如,学生成绩管理系统所涉及的“学生”、“课程”和“成绩”三个表中。“学生”表涉及的主要信息有:学号、姓名、性别、出生时间、专业、总学分、备注;“课程”表涉及的主要信息有:课程号、课程名、开课学期、学时和学分;“成绩”表涉及的主要信息有:学号、课程号和成绩。如表1.1、表1.2和表1
4、.3所示分别描述了学生成绩管理系统中“学生”、“课程”和“成绩”三个表的部分数据。,1.1.3 关系型数据库语言,SQL(Structured Query Language,结构化查询语言)是用于关系数据库查询的结构化语言。SQL的功能包括数据查询、数据操纵、数据定义和数据控制4部分。,1.2 数据库设计,1.2.1 概念模型概念模型(Conceptual Data Model)是面向数据库用户的实现世界的模型,主要用来描述世界的概念化结构,它使数据库的设计人员在设计的初始阶段,摆脱计算机系统及DBMS的具体技术问题,集中精力分析数据以及数据之间的联系等,与具体的数据管理系统无关。概念数据模型
5、必须换成逻辑数据模型,才能在DBMS中实现。概念模型用于信息世界的建模,一方面应该具有较强的语义表达能力,能够方便直接表达应用中的各种语义知识,另一方面它还应该简单、清晰、易于用户理解。在概念数据模型中最常用的是E-R模型、扩充的E-R模型、面向对象模型及谓词模型。,1.2.1 概念模型,通常,E-R模型把每一类数据对象的个体称为“实体”,而每一类对象个体的集合称为“实体集”,例如,在学生成绩管理系统中主要涉及“学生”和“课程”两个实体集。其他非主要的实体可以很多,如班级、班长、任课教师、辅导员等实体。如果用矩形框表示实体集,用带半圆的矩形框表示属性,用线段连接实体集与属性,当一个属性或属性组
6、合指定为主码时,在实体集与属性的连接线上标记一斜线,则可以用如图1.4所示形式描述学生成绩管理系统中的实体集及每个实体集涉及的属性。,1.2.1 概念模型,两个实体集A和B之间的联系可能是以下三种情况之一。1一对一的联系(1:1)A中的一个实体至多与B中的一个实体相联系,B中的一个实体也至多与A中的一个实体相联系。例如,“班级”与“班长”这两个实体集之间的联系是一对一的联系,因为一个班级只有一个班长,反过来,一个正长只属于一个班级。“班级”与“班长”两个实体集的E-R模型如图1.5所示。,1.2.1 概念模型,2一对多的联系(1:n)A中的一个实体可以与B中的多个实体相联系,而B中的一个实体至
7、多与A中的一个实体相联系。例如,“班级”与“学生”这两个实体集之间的联系是一对多的联系,因为一个班级可有若干学生,反过来,一个学生只能属于一个班级。“班级”与“学生”两个实体集的E-R模型如图1.6所示。,1.2.1 概念模型,3多对多的联系(m:n)A中的一个实体可以与B中的多个实体相联系,而B中的一个实体也可与A中的多个实体相联系。例如,“学生”与“课程”这两个实体集之间的联系是多对多的联系,因为一个学生可选多门课程,反过来,一门课程可被多个学生选修。“学生”与“课程”两个实体集的E-R模型如图1.7所示。,1.2.2 逻辑模型,1(1 : 1)联系的E-R图到关系模式的转换(1)联系单独
8、对应一个关系模式,则由联系属性、参与联系的各实体集的主码属性构成关系模式,其主码可选参与联系的实体集的任一方的主码。例如,考虑图1.5描述的“班级(BJB)”与“班长(BZB)”实体集通过属于(SYB)联系E-R模型,可设计如下关系模式(下横线表示该字段为主码):BJB(班级编号,院系,专业,人数)BZB(学号,姓名)SYB(学号,班级编号)(2)联系不单独对应一个关系模式,联系的属性及一方的主码加入另一方实体集对应的关系模式中。例如,考虑图1.5描述的“班级(BJB)”与“班长(BZB)”实体集通过属于(SYB)联系E-R模型,可设计如下关系模式:BJB(班级编号,院系,专业,人数)BZB(
9、学号,姓名,班级编号)或者:BJB(班级编号,院系,专业,人数,学号)BZB(学号,姓名),1.2.2 逻辑模型,2(1 : n)联系的E-R图到关系模式的转换(1)联系单独对应一个关系模式,则由联系的属性、参与联系的各实体集的主码属性构成关系模式,n端的主码作为该关系模式的主码。例如,考虑图1.6描述的“班级(BJB)”与“学生(XSB)”实体集E-R模型,可设计如下关系模式:BJB(班级编号,院系,专业,人数)XSB(学号,姓名,性别,出生时间,专业,总学分,备注)SYB(学号,班级编号)(2)联系不单独对应一个关系模式,则将联系的属性及1端的主码加入n端实体集对应的关系模式中,主码仍为n
10、端的主码。例如,图1.6描述的“班级(BJB)”与“学生(XSB)”实体集E-R模型可设计如下关系模式:BJB(班级编号,院系,专业,人数)XSB(学号,姓名,性别,出生时间,专业,总学分,备注,班级编号),1.2.2 逻辑模型,3(m : n)联系的E-R图到关系模式的转换例如,图1.7描述的“学生(XSB)”与“课程(KCB)”实体集之间的联系可设计如下关系模式:XSB(学号,姓名,性别,出生时间,专业,总学分,备注)KCB(课程号,课程名称,开课学期,学时,学分)CJB(学号,课程号,成绩)关系模式CJB的主码是由“学号”和“课程号”两个属性组合起来构成的一个主码,一个关系模式只能有一个
11、主码。,1.2.3 物理模型,物理模型(Physical Data Model)是面向计算机物理表示的模型,描述了数据在储存介质上的组织结构,它不但与具体的DBMS有关,而且还与操作系统和硬件有关。每一种逻辑数据模型在实现时都有起对应的物理数据模型。DBMS为了保证其独立性与可移植性,大部分物理数据模型的实现工作由系统自动完成,而设计者只设计索引、聚集等特殊结构。,1.3 数据库应用系统,1.3.1 应用系统的数据接口1ODBC数据库接口ODBC即开放式数据库互连(Open DataBase Connectivity),是微软公司推出的一种实现应用程序和关系数据库之间通信的接口标准。符合该标准
12、的数据库就可以通过SQL语句编写的程序对数据库进行操作,但只针对关系数据库。目前所有的关系数据库都符合该标准。ODBC本质上是一组数据库访问API(应用程序编程接口),由一组函数调用组成,核心是SQL语句。,MySQL是通过MySQL Connector/ODBC(MyODBC驱动程序系列)为ODBC提供支持的,图1.8说明了MySQL使用ODBC连接方式的结构。,1.3.1 应用系统的数据接口,2ADO数据库接口ADO(ActiveX Data Object)是微软公司开发的基于COM的数据库应用程序接口,通过ADO连接数据库,可以灵活地操作数据库中的数据。使用ADO访问关系数据库有两种途径
13、:一种是通过ODBC驱动程序,另一种是通过数据库专用的OLE DB Provider,后者有更高的访问效率。3ADO.NET数据库接口 ADO.NET数据模型从ADO发展而来,但它不只是对 ADO的改进,而是采用了一种全新的技术。主要体现在以下几个方面:(1)ADO.NET不是采用ActiveX技术,而是与.NET框架紧密结合的产物。(2)ADO.NET包含对XML标准的完全支持,这对于跨平台交换数据具有重要意义。(3)ADO.NET既能在与数据源连接的环境下工作,又能在断开与数据源连接的条件下工作。,1.3.1 应用系统的数据接口,图1.9显示了通过ADO.NET访问数据库的接口模型。,1.
14、3.1 应用系统的数据接口,4JDBC数据库接口JDBC(Java DataBase Connectivity)是JavaSoft (原来SUN公司的业务部门)开发的,Java语言编写的用于数据库连接和操作的类和接口,可为多种关系数据库提供统一的访问方式。通过JDBC对数据库的访问包括4个主要组件:Java应用程序、JDBC驱动器管理器、驱动器和数据源。使用JDBC接口操作数据库有如下优点:(1)JDBC API与ODBC十分相似,有利于用户理解;(2)使编程人员从复杂的驱动器调用命令和函数中解脱出来,而致力于应用程序功能的实现;(3)JDBC支持不同的关系数据库,增强了程序的可移植性。,1.
15、3.1 应用系统的数据接口,5数据库连接池技术对于网络环境下的数据库应用,由于用户众多,使用传统的JDBC方式进行数据库连接,系统资源开销过大成为制约大型企业级应用效率的瓶颈,采用数据库连接池技术对数据库连接进行管理,可以大大提高系统的效率和稳定性。,1.3.2 C/S架构的应用系统,对于一般的数据库应用系统,除了DBMS外,还需要设计适合普通人员操作数据库的界面。目前,流行的开发数据库界面的工具主要有Visual Basic 6.0、Visual C+6.0、Visual C#等。应用程序与数据库、数据库管理系统之间的关系如图1.10所示。,1.3.2 C/S架构的应用系统,应用程序和数据库
16、管理系统可以运行在同一台计算机上(单机方式),也可以运行在网络环境。在网络环境下,数据库管理系统在网络中的一台主机上运行,应用程序可以在网络上的多台主机上运行,即一对多的方式。对于MySQL,除了服务器安装数据库管理系统外,还需要在客户端安装客户程序。 例如,用Visual Basic开发的C/S架构的学生成绩管理系统,学生信息输入界面如图1.11所示。,1.3.3 B/S架构的应用系统,基于Web的数据库应用采用三层(浏览器/Web服务器/数据库服务器)模式,也称B/S架构,如图1.12所示。,1.3.3 B/S架构的应用系统,目前,流行的开发数据库Web界面的工具主要有ASP.NET(C#
17、)、PHP、JavaEE等。例如,用ASP.NET开发的B/S架构的学生成绩管理系统,学生信息录入页面如图1.13所示。,关系型数据库和非关系型数据库,关系型数据库理论 - ACIDACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。A Atomicity 原子性一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个
18、环节。C Consistency 一致性在事务开始之前和事务结束以后,数据库的完整性没有被破坏。I Isolation 隔离性数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。D Durability 持久性事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。,NoSQL(NoSQL = Not Only SQL ),优点易
19、扩展:NoSQL数据库种类繁多,但是有一个共同的特点,都是去掉了关系型数据库的关系型特性。数据之间无关系,这样就非常容易扩展,在架构的层面上也带来了可扩展的能力。大数据量,高性能:NoSQL数据库都具有非常高的读写性能,主要源于它的无关系性,数据库的结构简单。NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说性能就要高很多了。灵活的数据模型:NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。高可用:NoSQL在不太影响性能的情况下,就可以方便地实现高可用的架构。比如Cassandra、HBase模型,通过复制模型也能实现高可用。,缺
20、点没有标准:没有对NoSQL数据库定义的标准,所以没有两个NoSQL数据库是平等的。没有存储过程:NoSQL数据库中大多没有存储过程。不支持SQL:NoSQL大多不提供对SQL的支持。如果不支持SQL这样的工业标准,将会对用户产生一定的学习和应用迁移上的成本。支持的特性不够丰富,产品不够成熟,MySQL概述,MySQL服务器逻辑架构图,MySQL特点,MySQL是一个关系数据库管理系统,使用标准的结构化查询语言-SQL访问数据库.MySQL是完全免费的,在网上可以任意下载,并且可以查看到它的源文件,进行必要的修改.MySQL服务器的功能齐全,运行速度很快,十分可靠MySQL是一个客户机/服务器
21、系统,能够支持多线程MySQL支持大型的数据库。可以处理拥有上千万条记录的大型数据库。MySQL可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C+、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。5.7支持JSON数据类型,增加非结构化数据,MySQL存储引擎,MyISAM引擎InnoDB引擎Archive引擎:只支持insert和select操作,适合日志和数据采集类应用Blackhole引擎:不实现任何存储机制。服务器会记录表的日志,可用于复制数据到备库,或只是简单地记录到日志。csv引擎:可以将普通的csv文件作为MySQL的表处理,但不支持索引
22、。Federated引擎:是访问其他MySQL服务器的一个代理。Memory引擎:数据保存在内存中,实现快速访问数据,重启数据会丢失,表结构还在。Merge引擎:MyISAM引擎的变种。是由多个MyISAM表合并而来的虚拟表。引入分区功能后,该引擎已经被放弃NDB集群引擎:实现分布式集群数据处理。,MyISAM引擎,MyISAM是MySQL5.1之前的默认存储引擎。提供了大量特性:全文索引、压缩、空间函数(GIS)等。不支持事务和行级锁,崩溃后无法安全恢复。特性:加锁与并发对整张表加锁,而不是针对行。修复可以手工或自动执行检查和修复操作(不是崩溃修复)。执行表的修复可能导致一些数据丢失,且修复
23、操作非常慢。索引特性基于前500个字符创建索引,也支持全文索引延迟更新索引键只在清理键缓冲区或关闭表的时候才会将对应的索引块写入到磁盘。这种方式极大地提升写入性能,但在数据库或主机崩溃时会造成索引损坏,需要执行修复操作。,InnoDB存储引擎,InnoDB是MySQL的默认事务型引擎。被设计用来处理大量的短期事务。支持的新特性: 利用排序创建索引 删除或者增加索引时不需要复制全表数据 新的支持压缩的存储格式 新的大型列植如BLOB的存储方式 新的文件格式管理,InnoDB采用MVCC(Multi-Version Concurrency Control 多版本并发控制)来支持高并发。实现了四个标
24、准的隔离级别InnoDB表基于聚簇索引建立,对主键查询有很高的性能。,InnoDB的数据存储在表空间中。表空间是有一系列的数据文件组成。InnoDB可以将每个表的数据和索引放在单独的文件中。,MySQL发展历程,版本3.23(2001):MySQL真正“诞生”的时刻,引入MyISAM代替了ISAM引擎。引入全文索引和复制。复制是MySQL成为互联网应用数据库的关键特性。,版本4.0(2003)支持新的语法,比如UNION和多表DELETE语法。重写了复制,在备库使用了两个线程来实现复制。InnoDB成为标配。引入查询缓存,同时支持通过SSL进行连接。,版本4.1(2005)引入更多新的语法,如
25、子查询和INSERT ON DUPLICATE KEY UPDATE开始支持UTF-8字符集。支持新的二进制协议和prepared语句,版本5.0(2006)引入“企业级”特性:视图、触发器、存储过程和存储函数。,版本5.1(2008)Sun收购MySQL AB以后发布的首个版本。引入了分区、基于行的复制以及pluginAPI,版本5.6(2011)InnoDB现在可以限制大量表打开的时候内存占用过多的问题(比如这里提到的)(第三方已有补丁)InnoDB性能加强。如分拆kernel mutex;flush操作从主线程分离;多个perge线程;大内存优化等InnoDB死锁信息可以记录到 erro
26、r 日志,方便分析MySQL5.6支持延时复制,可以让slave跟master之间控制一个时间间隔,方便特殊情况下的数据恢复。表分区功能增强MySQL行级复制功能加强,可以降低磁盘、内存、网络等资源开销(只记录能确定行记录的字段即可)Binlog实现 crash-safe复制事件采用crc32校验,增强master/slave 复制数据一致性新增log_bin_basename(以前variables里面没有binlog位置信息,对数据库的监管很不方便),版本5.5(2010)Oracle收购Sun以后发布的首个版本。主要改善有性能、扩展性、复制、分区、对Windows系统的支持。增加了PERFORMANCE_SCHEMA库。增加了复制、认证和审计API,MySQL 5.7 (2015)主要特性:更好的性能:对于多核CPU、固态硬盘、锁有着更好的优化,每秒上200W QPS(每秒查询率);更好的InnoDB存储引擎更为健壮的复制功能:复制带来了数据完全不丢失的方案,传统金融客户也可以选择使用MySQL数据库。更好的优化器原生JSON类型的支持更好的地理信息服务支持:InnoDB原生支持地理位置类型,支持GeoJSON(地理空间信息数据),GeoHash特性(空间位置,经纬度);新增sys库,