SQL笔记 --- 数据库发展,基本概念,关系数据库理论,关系模型,SQL概述
目录
数据库发展
数据库发展过程:
三个时期比较:
基本概念
数据模型:
- 三个要求:
- 能比较真实地模拟现实社会
- 容易为人所理解
- 便于在计算机上实现
- 两类:
- 概念模型:
- 也称信息模型,它是按用户的观点来对数据和信息建模,重要用于数据库设计
- 逻辑模型 / 物理模型:
- 逻辑模型包括:
- 层次模型(hierarchical)
- 网状模型(NetWork Model)
- 关系模型(Relational Model)
- 面向对象模型(Object Oriented Model)
- 对象关系模型(Object Relational Model)
- 物理模型:
- 是对数据最底层的抽象,它描述数据在系统内部的表示方式和存取方式,在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的
- 逻辑模型包括:
- 概念模型:
四个基本概念:
- 数据(Data):
- 定义:
- 数据的定义描述事物的符号记录数据的种类文本、图形、图像、音频、视频、学生的档案记录、货物的运输情况等数据的特点数据与其语义是不可分的
- 定义:
- 数据库(Database):
- 定义:
- 数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据的集合
- 各种人员数据视图:
- 数据库结构图:
- 基本特征
- 数据按一定的数据模型组织、描述和储存
- 可为各种用户共享
- 冗余度较小
- 数据独立性较高
- 易扩展
- 定义:
- 数据库管理系统(DBMS):
- 定义:
- DBMS(Database Management System )位于用户与操作系统之间的一层数据管理软件.是基础软件,是一个大型复杂的软件系统
- 用途:
- 科学地组织和存储数据、高效地获取和维护数据
- 数据控制功能:
- 数据的安全性(Security)保护:保护数据,以防止不合法的使用造成的数据的泄密和破坏.
- 数据的完整性(Integrity)检查:将数据控制在有效范围内,或保证数据之间满足一定关系
- 并发(Concurrency)控制:对多用户的并发操作加以控制和协调,防止相互干扰而得到错误的结果
- 数据库恢复(Recovery):将数据库从错误状态恢复到某一已知的正确状态
- 主要功能:
- 数据定义(Definition):
- 数据模式定义(为数据库构造数据框架)
- 数据存取的物理结构(为数据模式构造有效的物理存取方法与手段)
- 数据操纵(Manipulation):
- 提供数据查询、插入、修改及删除的功能具有简单算术运算及统计等能力
- 还可以与某些过程性语言结合,进行过程性操作
- 数据控制(Control):
- 数据的完整性、安全性定义与检查数据库的并发控制与故障恢复
- 数据服务(Service):
- 拷贝、转储、重组、性能检测、分析……
- 数据定义(Definition):
- 定义:
- 数据库系统(DBS):
- 定义:
- 数据库系统(Database System,简称DBS)在计算机系统中引入数据库后的系统构成
- 组成:
- 数据库
- 数据库管理系统
- 应用系统
- 数据库管理员
- 特点:
- 数据结构化
- 数据的共享性高,冗余度低,易扩充
- 数据独立性高
- 数据由DBMS统一管理和控制
- 定义:
数据独立性:
- 两个独立性:
- 物理独立性:指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的.当数据的物理存储改变了,应用程序不用改变
- 逻辑独立性:指用户的应用程序与数据库的逻辑结构是相互独立的.数据的逻辑结构改变了,用户程序也可以不变
- 说明:
- 物理独立性与逻辑独立性保证了数据独立性也是由DBMS的二级映像功能来保证的
信息世界基本概念:
- 实体(Entity) 客观存在并可相互区别的事物称为实体.可以是具体的人、事、物或抽象的概念
- 属性(Attribute) 实体所具有的某一特性称为属性.一个实体可以由若干个属性来刻画
- 码(Key) 唯一标识实体的属性集称为码
- 域(Domain) 属性的取值范围称为该属性的域
- 实体型(Entity Type) 用实体名及其属性名集合来抽象和刻画同类实体称为实体型
- 实体集(Entity Set) 同一类型实体的集合称为实体集
- 联系(Relationship)现实世界中事物内部以及事物之间的联系在信息世界中反映为实体内部的联系和实体之间的联系
- 说明:
- 实体内部的联系通常是指组成实体的各属性之间的联系
- 实体之间的联系通常是指不同实体集之间的联系
- 两个实体型:
- 一对一联系(1:1):
- 定义:如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1:1
- 实例:一个班级只有一个正班长,一个班长只在一个班中任职
- 一对多联系(1:n):
- 定义:如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多联系,记为1:n
- 实例:一个班级中有若干名学生,每个学生只在一个班级中学习
- 多对多联系(m:n):
- 定义:如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体B具有多对多联系,记为m:n
- 实例:课程与学生之间的联系:一门课程同时有若干个学生选修,一个学生可以同时选修多门课程
- 图释:
- 一对一联系(1:1):
- 两个以上实体型(两个以上实体型之间一对多联系):
- 定义:若实体集E1,E2,...,En存在联系,对于实体集Ej(j=1,2,...,i-1,i+1,...,n)中的给定实体,最多只和Ei中的一个实体相联系,则我们说Ei与E1,E2,...,Ei-1,Ei+1,...,En之间的联系是一对多的
- 优点:减少沉余,减少维护和修改表的时间
- 图释:
- 说明:
数据库管理员(DBA)具体职责:
- 决定数据库中的信息内容和结构
- 决定数据库的存储结构和存取策略
- 定义数据的安全性要求和完整性约束条件
- 监控数据库的使用和运行
- 周期性转储数据库
- 数据文件
- 日志文件
- 系统故障恢复
- 介质故障恢复
- 监视审计文件
- 周期性转储数据库
- 数据库的改进和重组
- 性能监控和调优定期对数据库进行重组织,以提高系统的性能需求增加和改变时,数据库须需要重构造
关系数据库理论
关系模式(五元组):
- 格式:
- R(U,D,DOM.F)
- 解释:
- 关系R,它是符号化的元组语义
- 一组属性U
- 属性住中属性来自域D
- 属性到域的映射DOM
- 属性组U上的一组数据依赖F(如函数依赖(Functional Dependency,FD),多值依赖(Multivalued Dependency,MVD))
相关概念:
- 函数依赖:
- 定义:
- 设R(U)是属性集U上的关系模式.X,Y是U的子集.若R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性住相等,而在Y上的属性值不等,则X函数确定Y或Y依赖于X,记做X→Y,若X→Y,Y→X,记做X←→Y(非主属性中某属性值唯一)
- 分类:
- 非平凡函数依赖:X→Y,但X不包含Y,则称X→Y非平凡函数依赖(例子 (Sno,Cno)→Grade )
- 平凡函数依赖:X→Y,且X包含Y则称X→Y平凡函数依赖(例子 (Sno,Cno)→Cno )
- 完全函数依赖:X→Y且对X的任何一个真子集X',都有X'→Y不成立,则称Y对X完全函数依赖(例子 (Sno,Cno)→Grade )
- 部分函数依赖:X→Y,但Y不完全依赖于X,则称Y对X部分函数依赖(例子 (Sno,Cno)→Sdept [由Sno便可推出Sdept] )
- 传递函数依赖:在R(U)中,如果X→Y,(X不包含Y),Y→X不成立,Y→Z,Z不属于Y,则称Z对X传递函数依赖,记做X→Z(例子 Sno→Sdept, Sdept→Mname成立,所以Sno→Mname)
- 定义:
- 多值依赖:
- 定义:
- 形式1:设R(U)是属性集U上的一个关系模式.X,Y,Z是U的子集,并且Z=U-X-Y,感谢模式R(U)中多值依赖X→→Y成立,当且仅当对R(U),的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关
- 形式2:在R(U)的任一关系r中,如果存在元组t,s使得t[X]=s[X],那么必然存在元组w,v属于r,(w,v可以与s,t相同),使得w[X]=v[X]=t[X],而w[Z]=v[Z]=t[Z],v[Y]=s[Y],v[Z]=t[Z](交换s,t元组的Y值所得的两个新元组必在r中)则Y多值依赖与X记做X→→Y,这里X,Y是U的子集,Z=U-X-Y
- 平凡多值依赖:
- 若X→→Y,而Z=φ,即Z为空,则称X→→Y为平凡多值依赖
- 多值依赖性质:
- 多值依赖具有对称性.即若X→→Y,则X→→Z其中Z=U-X-Y
- 多值依赖具有传递性,即若X→→Y,X→→Z,则X→→Z - Y,X→→Y - Z
- 函数依赖可以看做多只依赖的特殊情况,即若X→Y则X→→Y.这是因为当X→Y时,对X的每一个值x,Y有一个确定的值y与之对应,所以X→→Y
- 若X→→Y,X→→Z,则X→→YZ
- 若X→→Y,X→→Z,则X→→Y∩Z
- 多值依赖与函数依赖的区别:
- 多只依赖的有效性与属性集的范围有关
- 若X→→Y在U上成立则在W(U包含W, W包含XY)上一定成立,反之则不然,即X→→Y在W(U包含W)上成立,在U上并不一定成立,这是因为多只依赖的定义中不仅涉及属性组X和Y,而且涉及U中的其余属性Z
- 一般得在R(U)上若有X→→Y在W(U包含W)上成立,则称X→→Y为R(U)的嵌入型多值依赖
- 但是在关系模式R(U)中函数依赖X→Y的有效性仅决定于X,Y这两个属性集的值.只要在R(U)的任何一个关系r中,元组在X和Y上的值满足函数依赖的定义,则函数依赖X→Y在任何属性集W(U包含W, W包含XY)上成立
- 若函数依赖X→Y在R(U)上成立,则对任何Y的子集Y'具有X→Y'成立,而多值依赖X→→Y若在R(U)上成立,却不能保证对于任何一个Y' 即Y的子集的X→→Y'都成立
- 定义:
- 码:
- 设K为R<U,F>中的属性组合,若K完全依赖于U则K为R的候选码(Candidate key),若候选码多于一个,则选定一个为主码(Primary key)
- 包含在任何一个候选码中的属性,称为主属性(Primary attribute).不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute).最简单的情况,单个属性是码.最极端的情况,整个属性组都是码,称为全码(All-key)
关系模式存在问题:
- 数据库沉余太大
- 更新异常(Update Anmalies)
- 插入一次(Insertion Anomalies)
- 删除异常(Deletion Anomalies)
规范化(范式):
- 第一范式:
- 定义:每一个分类必须是一个不可分的数据项,则属于第一范式规范
- 第二范式:
- 定义:若R属于第一范式,且每个非主属性完全依赖于码,则属于第二范式规范
- 第三范式:
- 定义:关系模型R<U,F>中若不存在这样的码X,属性Y即非主属性Z(Z不包含于Y),使得X→Y, Y→Z,X→Z成立,Y→X不成立,则称R<U,F>属于第三范式
- BCNF范式:
- 定义:关系模式R<U,F>属于第一范式,若X→Y且X不包含Y时,X必包含有码,则R<U,F>属于BCNF范式,也就是说关系模式R<U,F>中,若,每一个觉得因素都包含码,则R<U,F>属于BCNF范式
- 要求:
- 所有的非主属性对每一个码都是完全函数依赖
- 所有的主属性对每一个不包含它的码,也是完全函数依赖
- 没有任何属性完全函数依赖于非码属性的任何一组属性
- 第四范式:
- 定义:关系模式R<U,F>属于第一范式,如果对于R的每个平凡多只依赖XY(X不包含Y),X都含有码,则R<U,F>属于第四范式
- 范式包含关系:
- 范式规范化过程:
关系模型
解释:
从用户角度看关系模型中数据的逻辑结构是一张二维表,它由行和列组成
相关概念:
- 元组(Tuple):表中的一行即为一个元组
- 关系(Relation):
- 定义:一个关系对应通常说的一张表
- 要求:满足一定的规范条件(最基本的规范条件:关系的每一个分量必须是一个不可分的数据项, 不允许表中还有表)
- 属性(Attribute):表中的一列即为一个属性,给每一个属性起一个名称即属性名
- 主码(Key):表中的某个属性组,它可以唯一确定一个元组
- 域(Domain):属性的取值范围
- 分量:元组中的一个属性值
- 关系模式:对关系的描述 关系名(属性1,属性2,…,属性n)
完整性约束:
- 关系的完整性约束条件
- 实体完整性参照完整性
- 用户定义的完整性
优点:
- 建立在严格的数学概念的基础上
- 概念单一:
- 实体和各类联系都用关系来表示
- 对数据的检索结果也是关系
- 关系模型的存取路径对用户透明:
- 具有更高的数据独立性,更好的安全保密性
- 简化了程序员的工作和数据库开发建立的工作
缺点:
- 存取路径对用户透明导致查询效率往往不如非关系数据模型
- 为提高性能,必须对用户的查询请求进行优化增加了开发DBMS的难度
系统结构解释:
- 从数据库管理系统角度看数据库系统通常采用三级模式结构,是数据库系统内部的系统结构
- 从数据库最终用户角度看(数据库系统外部的体系结构),数据库系统的结构分为:
- 单用户结构主从式结构
- 分布式结构
- 客户/服务器
- 浏览器/应用服务器/数据库服务器多层结构等
实例(Instance):
- 模式的一个具体值
- 反映数据库某一时刻的状态
- 同一个模式可以有很多实例
- 实例随数据库中的数据的更新而变动
模式(Schema):
- 解释:
- 数据库中全体数据的逻辑结构和特征的描述
- 反映的是数据的结构及其联系
- 所有用户的公共数据视图,综合了所有用户的需求
- 说明:
- 一个数据库只有一个模式(也称逻辑模式)
- 地位:
- 是数据库系统模式结构的中间层
- 特点:
- 与数据的物理存储细节和硬件环境无关
- 与具体的应用程序、开发工具及高级程序设计语言无关
- 定义:
- 数据的逻辑结构(数据项的名字、类型、取值范围等)
- 数据之间的联系
- 数据有关的安全性、完整性要求
外模式(External Schema):
- 说明:
- 数据库用户(包括应用程序员和最终用户)使用的局部数据的逻辑结构和特征的描述
- 数据库用户的数据视图,是与某一应用有关的数据的逻辑表示
- 地位:
- 介于模式与应用之间
- 模式与外模式的关系:一对多
- 外模式通常是模式的子集
- 一个数据库可以有多个外模式.反映了不同的用户的应用需求、看待数据的方式、对数据保密的要求
- 对模式中同一数据,在外模式中的结构、类型、长度、保密级别等都可以不同
- 外模式与应用的关系:一对多
- 同一外模式也可以为某一用户的多个应用系统所使用
- 但一个应用程序只能使用一个外模式
- 用途:
- 保证数据库安全性的一个有力措施
- 每个用户只能看见和访问所对应的外模式中的数据
内模式(Internal Schema):
- 说明:
- 内模式(也称存储模式)
- 是数据物理结构和存储方式的描述
- 一个数据库只有一个内模式
- 是数据在数据库内部的表示方式:
- 记录的存储方式(顺序存储,按照B树结构存储,按hash方法存储)
- 索引的组织方式
- 数据是否压缩存储
- 数据是否加密
- 数据存储记录结构的规定
三级模式结构:
- 组成:
- 内模式(Internal Schema)
- 模式(Schema)
- 外模式(External Schema)
- 图片:
- 说明:
- 同一个模式可以有任意多个外模式
- 每一个外模式,数据库系统都有一个外模式/模式映象,定义外模式与模式之间的对应关系
二级映象:
- 作用:
- 二级映象在DBMS内部实现这三个抽象层次的联系和转换
- 说明:
- 映象定义通常包含在各自外模式的描述中
- 外模式/模式映像:
- 作用:
- 保证数据的逻辑独立性
- 说明:
- 外模式描述的是数据的局部逻辑结构
- 模式描述的是数据的全局逻辑结构
- 当模式改变时,数据库管理员修改有关的外模式/模式映象,使外模式保持不变应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性
- 作用:
- 模式/内模式映像:
- 作用:
- 保证数据的物理独立性
- 说明:
- 当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式映象,使模式保持不变应用程序不受影响.保证了数据与程序的物理独立性,简称数据的物理独立性
- 作用:
SQL概述
SQL的特点:
- 综合统一:
- 集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体
- 可以独立完成数据库生命周期中的全部活动:
- 定义关系模式,插入数据,建立数据库;
- 对数据库中的数据进行查询和更新;
- 数据库重构和维护
- 数据库安全性、完整性控制等
- 用户数据库投入运行后,可根据需要随时逐步修改模式,不影响数据的运行
- 数据操作符统一
- 高度非过程化:
- 非关系数据模型的数据操纵语言“面向过程”,必须指定存取路径
- SQL只要提出“做什么”,无须了解存取路径
- 存取路径的选择以及SQL的操作过程由系统自动完成
- 面向集合的操作方式:
- 非关系数据模型采用面向记录的操作方式,操作对象是一条记录
- SQL采用集合操作方式:
- 操作对象、查找结果可以是元组的集合
- 一次插入、删除、更新操作的对象可以是元组的集合
- 以同一种语法结构提供多种使用方式:
- SQL是独立的语言:能够独立地用于联机交互的使用方式
- SQL又是嵌入式语言:SQL能够嵌入到高级语言(例如C,C++,Java)程序中,供程序员设计程序时使用
- 语言简洁,易学易用:
- SQL功能极强,完成核心功能只用了9个动词
SQL的数据定义功能:
三个基本概念:
- 基本表:
- 本身独立存在的表
- SQL中一个关系就对应一个基本表
- 一个(或多个)基本表对应一个存储文件
- 一个表可以带若干索引
- 存储文件:
- 逻辑结构组成了关系数据库的内模式
- 物理结构是任意的,对用户透明
- 视图:
- 从一个或几个基本表导出的表
- 数据库中只存放视图的定义而不存放视图对应的数据
- 视图是一个虚表
- 用户可以在视图上再定义视图
SQL支持关系数据库三级模式结构:
标识符:
- 定义:
- 由用户定义的可识别的字符序列
- 规则:
- 第一个字符必须是字母或下划线(_)或@或#;
- 后续字符可以是:字母、数字、_、#、$、@等;
- 注意:
- 不能使用SQL中的关键字和运算符,不允许嵌入空格或其他特殊字符