一、绪论
从保存游戏角色的信息到保存个人身份信息,从小型企业管理到电子商务、电子政务,甚至是高科技辅助制造等高科技行业,数据库都扮演者举足轻重的作用。
1.1 数据库系统概述
?? 4个基本概念
- 数据:描述事物的符号,其含义叫做数据的语义,数据必有其含义,否则只是一个符号,而不能描述事物
- 数据库:保存数据的仓库,有永久存储、有组织、可共享等特点(严格定义:数据库是长期存储在计算机上的有组织、可共享的大量数据集合,它的数据按照一定的数据结构组织、描述和管理,具有低冗余度、高独立性易扩展和供多用户共享的特点)
- 数据库管理系统:科学组织和存储数据,高效 获取维护数据的计算机基础软件(包含6点作用a数据定义;b数据组织、存储和管理c数据操纵;d数据库建立和维护;e数据库事物管理和运行管理;f其他扩展功能)
- 数据库系统:由数据库、数据库管理系统、数据库管理员、相应应用程序组成的存储、管理、维护和处理数据的系统(在通常情况下,一边简称为数据库)
??数据管理技术发展(数据库系统也是一种数据管理技术):
- 人工管理阶段(特点:数据不保存、应用程序需要设计管理数据的部分、数据不共享、数据不独立)
- 文件系统阶段(特点:数据长期保存在计算机、统一由文件系统管理、数据共享性、独立性差)
- 数据库系统阶段(特点:见下)
??数据库系统特点:
- 整体数据结构化:数据的结构面向整个组织或企业,不仅仅像文件系统那样只对于一个应用;而且数据之间有联系,整体有结构(数据库系统与文件系统本质区别)
- 由数据库管理系统统一管理控制:数据库的高共享同时也带来了并发负担,由数据库管理系统解决(数据安全保护、数据完整性检测、并发控制、数据库恢复等),强大功能简化了使用者的负担
- 数据共享性高、冗余度低且易扩展:数据面向整体共享,不用保存重复的数据,而且其能够及时基于现有数据扩展功能,不用另外重新设计数据
- 数据独立性高:包括物理独立性,和应用程序可以保存在不同物理存储中;逻辑独立性,与应用程序的逻辑相互独立,可以自由更改,只需要保证对外接口不变
??综上所述:数据库是长期存储在计算机内部,有组织、大量、共享的数据集合,可供多个用户共享,有小冗余度和高数据独立性。数据库管理系统在数据库建立、运行使用和维护时对数据库进行统一控制,保证数据安全和完整性,以及提供并发控制和故障时恢复技术。
1.2 数据库数据模型
数据模型就是对现实世界的抽象,是数据库系统的核心和基础,可分为两类三种
- 概念模型:也叫信息模型,按照需要对现实事物进行概念化提取,用于设计数据库(比如学生模型(学号、姓名、年纪…)
- 逻辑模型和物理模型:
-
- 逻辑模型:指数据库使用的数据结构设计的逻辑,用于数据库管理系统的实现——如层次模型,网状模型,关系模型等
- 物理模型:数据最底层的抽象,表示数据在系统内部的表示方式和存取方法
现实世界——>抽象概念——>机器世界
再谈概念模型相关概念,在抽象过程中的一些术语:
- 实体:客观存在可分辨的事物,可以是具体的物体,也可以是概念和联系(如订货记录,选课关系)
- 实体型:同类实体的共同特征的提取(相当于Java的类)
- 实体集:就是同类实体的集合
- 属性:实体具有的某一特征(学生具有学号,姓名等特征)
- 码:唯一标识实体的属性集合
- 联系;一般指实体集合之间的联系(学生和课程产生选课联系)(有一对一、一对多、多对多)
- E-R图:概念模型的一种表示方法——实体-联系(Entity-Relationship)方法
逻辑模型:也叫数据模型,由数据结构(静态特征)、数据操作(动态特征)和完整性约束(约束条件)组成
- 数据结构:描述数据库的组成对象和联系
- 数据操作:指数据库中对象运行执行的操作(查询和更新)
- 数据完整性约束:数据的约束条件,后面再讲
常用数据模型:
- 层次模型:唯一无双亲节点(根节点),其余节点只有一个双亲节点的结构。
-
- 优点(3):结构简单清晰、查询效率高、良好的完整性支持
- 缺点(4):不适合表示多对多关系、有多个双亲的关系引入虚节点or冗余、查询子女节点需要通过双亲、结构严密命令过于程序化(就像写程序代码一样,不够灵活)
- 网状模型:允许多节点无双亲or多双亲节点的结构(就是网状结构…),还提供码约束、一对多保证、支持双亲和子女之间的约束条件
-
- 优点(2):更符合现实世界描述、性能良好存取效率高
- 缺点(3):结构复杂、需要嵌入高级语言中使用不易学、记录之间的联系与存取路径有关用户需要了解系统结构细节加重了开发负担
- 关系模型:二维表状的数据结构(关系为一张表、一行记录为一个元组、一列为一个属性、分量指一格数据)
-
- 优点(3):严谨的数学支持(关系数据理论)、结构单一易学易用、存取路径透明数据独立性高更安全且简化了开发工作
- 缺点(2):查询效率不够高、需要开发查询优化增大了数据库管理系统开发难度
1.3 数据库系统结构
- 型和值(相当于类和对象)——模式是数据库系统的型,描述了数据库全体数据的结构和特征,是相对稳定的;而实例则是模式的值,数据库的实际内容,是相对变动的——例子:定义数据库的模式为学生记录、课程记录和选课记录三种关系模式;该数据库的一个实例则可以是2019级所有学生和开设课程,以及他们的所有选课记录。
数据库三级结构、二级映射:
- 模式:对数据库中全体数据的逻辑结构和特征的描述
- 外模式:子模式or用户模式,模式数据对于用户的映射,是用户权限可见的局部数据逻辑结构和特征的描述
- 内模式:存储模式,表示数据在计算机上的物理存储结构和存储方式,是数据在计算机内部的组织方式
- 外模式/模式映射:每个外模式都是模式在其局部数据的映射,所以可以有多个映射,外模式不实际保存数据,程序的使用只与数据的外部映射相关联,实现了逻辑独立性
- 模式/内模式映射:唯一映射关系,实现了物理存储结构与数据记录的独立,实现了物理独立性
数据库模式结构需要确定全局的逻辑结构描述,即要先确定模式
内模式的选择决定数据物理存取的时间和空间效率
外模式的设计决定应用的使用性和可扩展性
三级模式和二级映射实现了数据与程序的独立性(逻辑和物理独立),使得数据的定义和应用程序分离,而是由数据库管理工具管理,简化了开发负担,和维护成本。
数据库系统组成:
- 硬件:大内存、大磁盘、高数据传输速率
- 软件:数据库管理软件、操纵系统、编译系统和开发工具
- 人员:数据库管理员、系统分析和数据库设计人员、程序开发者、用户(偶然用户、简单用户、复杂用户)
二、关系数据库
2.1关系数据结构和定义
关系的相关概念:
- 域:一组具有相同数据类型的值的集合
- 笛卡尔积:D1 X D2 X… X Dn={(d1,d2,…,dn) | di 属于 Di}
- n元组:含有n个属性的元素集合,(d1,d2,…,dn)
- 分量:元素集合中的一个值,即di
- 多个属性做笛卡尔积所得的结果的子集可作为一个关系,实际上表示某个实体类有这些属性
- 关系的属性个数称为目或者度,为1叫一元关系,2叫二元关系
- 候选码:唯一标识一个元组(即一个实体)的最小属性集合
- 主码:从候选码中选取一个
- 主属性:注意是候选码中的属性,只要在一个候选码中就为主属性
- 非主属性:不在任何一个候选码中
- 全码:全部属性一起作为候选码
关系2条限定和6条性质:
关系模式:关系的型,对关系的抽象描述
- 表示为R(U,D,DOM,F)
- R为关系名,U为属性集合,D为属性域,DOM为属性向域的映像集合,F为属性依赖关系
- 一般用R(U)或 R(U,F)表示即可
关系数据库:所有关系的集合,数据库内容
关系数据库模式:关系模式的集合,数据库内容格式的定义
2.2关系的完整性
关系模式有三大完整性约束:
- 实体完整性规则:主属性不能为空,由于主属性的相应集合(候选码)唯一标识实体,若为空则造成不能标识的情况,违背了实体能被区别的原则
- 参照完整性规则:在关系R中的非主属性组RS对应关系S中的主码KS,则RS是R的外码,R是参照关系,S是被参照关系,参照完整性规定——外码要么取空,要么被参照关系存在该对照,该值存在
- 用户定义完整性:根据需求和实际情况定义的规则,比如学生成绩属性范围在0~100
2.3关系操作和关系代数
关系数据语言分类:关系代数和关系演算、具有二者优点的SQL(结构化查询语言)
关系代数运算符(操作不好解释,详情见书):
连接:
- 等值连接:按照某属性相等做连接,使用“=”运算符
- 自然连接:特殊等值连接,有相同属性列,相同属性列分量相同自动连接
- 外连接:将舍弃的元组在对应位置添上NULL,左外连接,召回运算符左边的舍弃的元组,右外连接同理
除运算:
- 象集:x在R上的象集,结果为包含x的元组,不包含x属性列
- 除运算:R除以S结果为T,包含所有在R但不在S中的属性和属性的值,T和S的所有组合都在R中
-
- 运算方法:R(X,Y),S(Y,Z)这样的形式
- 结果为 xi 属于X在R的象集,象集包含S在Y上的投影,保存 xi 作为结果的一个元组
三、关系数据库标准语言SQL
3.1 SQL概述
SQL标准从1986年起经过多年增加,目前多达3777页,因此没有一个数据库系统能够支持SQL标准的所有概念和特性;而且软件商对SQL指令集还进行了不同程度的修改扩充
SQL的特点:
- 综合统一:(结合了模式数据定义语言、外模式数据定义语言、数据存储语言、数据操作语言)
- 高度非过程化:只要提出做什么,而无须指明怎么做,因此无须了解存储路径
- 面向集合的操作方式
- 同一种语法的多种使用:嵌入高级语言,单独使用
- 语言简洁,易学易用
SQL基本概念:
- 视图:相当于外模式,是基本表信息的部分展示
- 基本表:相当于模式,定义了数据的内容和数据之间的逻辑
- 存储文件:保存在计算机的实体文件,之间的逻辑构成内模式,对最终用户隐藏
3.2 数据定义
对象 | 创建 | 删除 | 修改 |
---|
模式 | CREATE SCHEMA | DROP SCHEMA | | 表 | CREATE TABLE | DROP TABLE | ALTER TABLE | 视图 | CREATE VIEW | DROP VIEW | | 索引 | CREATE INDEX | DROP INDEX | ALTER INDEX |
关键字:
- create(创建)、drop(删除)、alter(修改)
- schema(模式)、table(表)、view(视图)、index(索引)
相关SQL语句格式:
-
模式定义与删除 -
基本表定义与修改、删除 -
视图的定义与查询、删除 -
索引定义与删除
3.3 数据更新
3.4 数据查询
- 单表查询
- 连接查询
- 嵌套查询
- 集合查询
- 派生表查询
- SELECT 语句格式
四、数据库完整性
数据库的完整性是指数据的正确性和相容性
- 正确性:符合现实世界语义、反应当前实际情况
- 相容性:同一对象在不同关系表中的数据符合逻辑
4.1 实体完整性
定义实体完整性:
PRIMARY KEY(C1,C2)
NAME VARCHAR() PRIMARY KEY
完整性检测通过插入or修改时搜素表中是否有重复主码,若有——执行违约处理——拒绝执行
4.1 参照完整性
定义参照完整性:
FOREIGN KEY(NAME) REFERENCES TABLE_NAME(R_NAME)
操作导致违约:
- 参照表修改外码值、插入一个元组导致找不到对应的外码(在被参照表中没有对应的码)——拒绝执行
- 被参照表中修改被参照的码、删除元组导致参照表找不到外码——拒绝执行/级联修改、删除/设置为空
拒绝执行:当违约操作时,拒绝执行该操作(NO ACTION)
级联操作:当违约时,将参照表中使用该参照的元组删除/修改为相应值(CASCADE)
设置为空:违约时,将参照表中的使用该参照元素的元组的外码设置为NULL
FOREIGN KEY(NAME) REFERENCES TABLE_NAME(R_NAME)
ON UPDATE CASCADE
ON DELETE CASCADE,
FOREIGN KEY(NAME) REFERENCES TABLE_NAME(R_NAME)
ON DELETE NO ACTION
ON UPDATE CASCADE,
4.1 用户定义完整性
用户定义完整性:
NAME CHAR(10) NOT NULL,
ID INT(8) UNIQUE PRIMARY KEY,
SALARY INT(32) CHECK(SALARY >=1000),
SEX CHAR(2),
CHECK(SEX='女' OR NAME NOT LIKE 'Ms.')
违约时拒绝执行
4.2 完整性约束命名子句
就是给上面提到的表级约束命名,不改变 其功能,只是更好方便修改删除
CONSTRAINT NAME CHECK()
ALTER TABLE T_NAME
DROP CONSTRAINT NAME;
ALTER TABLE T_NAME
ADD CONSTRAINT NAME_2 CHECK(SEX IN ('男','女'));
五、关系数据理论
5.1 依赖的概念
将关系模式简单表示为一个三元组R<U,F>——关系模式名<属性集,数据依赖>
- F:数据依赖是表示关系内部属性与属性之间的一种约束关系
- 依赖中最重要的两种——函数依赖和多值依赖
函数依赖:X,Y作为U的子集,当X相等时,Y必相等,不存在一个X的值对应两个Y值的情况,称X–>Y,X函数决定Y,或者Y依赖X
- 平凡函数依赖:X无疑能够函数决定X的子集,这种依赖叫做平凡函数依赖
- 非平凡函数依赖:X–>Y,且X不包含Y(我们基本上只考虑这种依赖关系,平凡的函数依赖价值不大)
- 相互依赖:X–>Y且Y–>X的情况,即X <–> Y
- 完全函数依赖:X–>Y且X的任何一个真子集不能函数决定Y;可表示为 X-F->Y
- 部分函数依赖:X–>Y,且X的一个真子集也能决定Y;X-P->Y
使用依赖定义码:
- 候选码:K为R<U,F>的候选码当且仅当 K-F->U,即通过K能够完全有效(最小集合)区别元组
- 超码:候选码的超集,S-P->U包含候选码
- 主属性:在某一个候选码中的属性
- 非主属性,非码属性:不在任何一组候选码中
- 全码:特殊情况,整个属性组U作为候选码,称为全码
- 外码:在另一个关系中的码
关系模式码的标识:用下划线标识码,虚线标识外码
5.2 规范化
粗糙的设计关系,比如把整个关系模式不经拆分作为一个关系:比如如下关系
U={Sno,Sdept,Mname,Cno,Grade}
F={Sno->Sdept,Sdept->Mname,(Sno,Cno)->Grade}
只存在一张关系表,标识着学生选课记录,学生年纪和系相关信息如上,如此设计将会导致:
- 数据冗余:重复保存系主任名称,系名称
- 更新异常:修改系主任名称时数据库开销很大
- 插入异常:无法保存一个系的信息,如果没有学生选课,因为码为学号和课程号
- 删除异常:删除选课记录可能导致系相关信息丢失
在实际情况中,系信息和学生选课记录不应该放在一起,但数据库设计也不能仅仅依靠实际经验,这样的情况需要规范的定义和处理,这就是规范化的作用
规范化:通过根据关系属性间的依赖情况判断关系是否有一些不合适的性质,通过拆分变成更高要求的范式的过程叫做规范化(严格的说:将低级范式通过模式分解转化为若干高级范式的关系模式的集合的过程叫规范化)
5.3 范式
范式:关系模式满足的要求,简写为NF
-
1NF:最低要求,最小原子不可再分性(是一个关系就满足1NF) -
2NF:在1NF基础上,消除了非主属性对码的部分依赖,即拆分后要实现所有非主属性完全依赖于码 -
-
3NF:在2NF基础上,消除了非主属性对码的传递依赖,即现在非主属性不仅要完全依赖码还要直接依赖码,上面图中,Mame直接依赖于Sdept,而Sdept直接依赖于Sno(码),而Mname传递依赖于Sno,可拆分如下: -
-
BCNF:对3NF的补充,简单的表示为每一个决定因素都包含码(非主属性完全函数依赖于每一个码,主属性对于不包含它的码也是完全函数依赖,没有任何一个属性完全函数依赖于非码的任何一组属性)
5.4 数据依赖的公理系统
Armstrong公理系统:定义了依赖的相关推导基础
- 蕴含:在R<U,F>中对于关系模式R实例的任意一个关系r,如果满足X–>Y那么称F逻辑蕴含X–>Y
- 自反性:U包含X,X包含Y,必有X–>Y,且F逻辑蕴含X–>Y
- 增广性:X–>Y被F蕴含,U包含Z属性组,那么XZ–>YZ也被F蕴含
- 传递性:X–>Y,Y不能决定X,Y–>Z都被F蕴含,那么X–>Z也被F蕴含
推导得出的常用规则:
- 合并规则:X–>Y, X–>Z推导得X–>YZ
- 伪传递规则:X–>Y,WY–>Z,推导得XW–>Z
- 分解规则:X–>Y,Y包含Z,推导得X–>Z
由F逻辑蕴含的全体函数依赖称为F的闭包,F+,即全部U能够推导出来的函数依赖
- 有效性:从F推导出来的函数依赖都在F+中
- 完备性:F+中每一个函数依赖都可以由F中的函数依赖推导得出
X+F称为U的属性子集X关于函数依赖集F的闭包,即是X根据F能够推导出来的所有依赖X的属性的集合
等价概念:G+==F+,即两个函数依赖集能推导出的闭包相同,即G和F等价
F的极小函数依赖集满足以下条件:
- F中的函数依赖右部只有一个属性
- 不存在X–>A,但是F和F-{X–>A}等价(即能够被其他推导出来的函数依赖不需要,除去了传递函数依赖)
- 不存在X–>A,X有真子集Z使得F-{X–>A}U{{Z–>A}}与F等价(即不存在不完全函数依赖,应该用完全函数依赖取代)
六、数据库设计
6.1 数据库设计过程
- 六阶段
- 需求分析(基础)
- 行为:需求收集和分析
- 数据:数据字典:数据项、数据结构、数据流、数据存储
- 处理:数据流图和判定树、数据字典:处理过程
- 概念结构设计(关键)****——形成概念模式
- 行为:依据需求进行综合、归纳与抽象
- 数据:概念模型:E-R图
- 处理:系统说明书:方案、概图、数据流图
- 逻辑结构设计——形成逻辑模式(模式)
- 行为:设计逻辑结构(转换规则)、数据模型优化(优化方法)
- 数据:逻辑模式(某种数据模型)
- 处理:系统结构图(模块结构)
- 物理结构设计——生成内模式
- 行为:设计物理结构、评价设计性能预测(不满意→④或③)
- 数据:存储安排、方法选择、存取路径建立
- 处理:模块设计、IPO表
- 数据库实施
- 行为:物理实现、试运行(不满意→④)
- 数据:建立模式、装入数据、数据库试运行
- 处理:编码、编译链接、测试
- 数据库运行和维护
- 行为:用户方的使用和维护
- 数据:性能监测、转储/恢复、数据库重组和重构
- 处理:新旧系统转换、运行、维护
6.2 需求分析(略)
6.3 概念设计和逻辑结构设计
E-R图设计
- 实体:用框图表示
- 联系:用菱形表示
- 属性:用椭圆形表示
- 联系:直接用无方向箭头连接起来
E-R图向关系模型转化
每个实体可单独设置为一个关系模式
联系根据1对1、1对多、多对多可分别嵌入实体中或者单独实现为一个关系模式
|