在数据库中应该存储和管理哪些数据对象。
数据操作要求
对数据对象需要进行哪些操作,如查询、增、删、改、统计等操作。
数据库设计的目标
为用户和各种应用系统提供一个信息基础设施和高效率的运行环境。
高效率的运行环境
数据库建设的基本规律
三分技术,七分管理,十二分基础数据。
并不是说数据库设计好了就没事了,后续的管理以及数据收集也是关键
管理:数据库建设项目管理和企业(应用部门)的业务管理。
基础数据:数据的收集、整理、组织和不断更新。
结构(数据)设计和行为(处理)设计相结合
将数据库结构设计和数据库处理设计密切结合。
早期数据库设计和应用系统设计是分离的
大型数据库设计是涉及多学科的综合性技术,又是一项庞大的工程项目。
它要求多方面的知识和技术。主要包括:
存在的问题:
基本思想:过程迭代和逐步求精
在使用数据的过程中一直迭代更新数据库
典型方法
需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行和维护。
说明:
系统分析人员和数据库设计人员:自始至终参与数据库设计,其水平决定了数据库系 统的质量。
系统分析人员:主要参与逻辑设计阶段
数据库设计人员:主要参与物理设计阶段
由上图可以看出,二者贯穿数据库设计始终,非常重要
数据库管理员和用户代表:要参加需求分析与数据库的运行和维护。
数据库管理员:负责最终如何管理数据库
用户代表:负责数据库最终要实现什么样的目的
应用开发人员:包括程序员和操作员,在实施阶段参与进来,分别负责编制程序和准备软硬件环境。
说明:
需求分析阶段:综合各个用户的应用需求。
概念设计阶段:形成独立于机器特点,独立于各个数据库管理系统产品的概念模式(E-R图)。
逻辑设计阶段:首先将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式。
然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图,形成数据的外模式。
物理设计阶段:根据数据库历系统特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式。
说明:调查的重点是“数据”和“处理”,获得用户对数据库在信息、处理、安全性与完整性的要求。
需求分析的目的:调查清楚用户的实际需求并进行初步分析,最终与用户达成共识。
调查用户需求的步骤:
最终确定系统边界就是要设计出数据字典
本节讲解数据库的组成部分,这几个组成部分是有逻辑联系的。
数据项:数据是不可再分的数据单位。
数据项描述=
说明:
“取值范围”、“与其他数据项的逻辑关系”定义了数据的完整性约束条件,是涉及数据检验功能的依据。
取值范围是用户自定义约束
与其他数据项的逻辑关系是参照性约束
可以用关系规范化理论为指导,用数据依赖的概念分析和表示数据项之间的联系。
比如查成绩,要将学生的学号,姓名,成绩等做成一个数据结构一同传送
处理过程:处理过程的具体处理逻辑一般用判定表或判定树来描述。数据字典中只需要描述处理过程的说明性信息。
判定表第一列是判定的条件,第二列是满足条件后做什么事情
处理过程描述={处理过程名,说明,输入:{数据流},输出:{数据流},处理:{简要说明}}
说明:
就是将实体抽象为ER图或者UML等概念模型
概念结构设计是将需求分析得到的用户需求抽象为信息结构(即概念模型)的过程。概念模型的特点:
E-R模型是用E-R图来描述现实世界的概念模型,第一章已经讲过了,这里复习
实体型之间的联系都是概念模型的范畴
如果对于实体集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
比如说一个学生可以选修多门课,多门课可以供多名学生选修
【例】对于课程、教师与参考书3个实体型,如果一门课程可以有若干个教师讲授,使用若干本参考书,而每一个教师只讲授一门课程,每一本参考书只供一门课程使用,则课程与教师、参考书之间的联系是一对多的。
【例】有3个实体型:供应商、项目、零件,一个供应商可以供给多个项目多种零件,而每个项目可以使用多个供应商供应的零件,每种零件可由不同供应商供给,由此看出供应商、项目、零件三者之间是多对多的联系。
职工实体型内部具有领导与被领导的联系
这是用来表示概念模型的一种方式
ER图是用来描述概念模型的方式
实体型:用矩形表示,矩形框内写明实体名。
属性:用椭圆形表示,并用无向边将其与相应的实体型连接起来。
联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型(1:1,1:n或m:n)。
联系也可以具有属性。
【注意】如果一个联系具有属性,则这些属性也要用无向线该联系连接起来。
例子:如果用“供应量”来描述联系“供应”的属性,表示某供应商供应了多少数量的零件给某个项目。那么这3个实休及其之间联系的E-R图如下。
可以看到,联系也是有属性的
第一步要先搞明白有哪些实体以及这些实体之间的属性有哪些
用E-R图来表示某个工厂物资管理的概念模型。物资管理涉及的实体有:
这一步要搞明白实体之间的联系,联系的类型在上面已经讲过了,是两个实体型之间的练习,还是单个实体型之间的练习;一对一还是一对多等等。
并且要想好联系是否有属性
联系:
实体型E-R图
实体和联系的ER图
在画联系的ER图的时候,不需要写属性,否则会太乱。
可以看到联系也是有属性的
完整的ER图
最终画出完整的ER图
E-R模型得到了广泛的应用,人们在基本E-R模型的基础上进行了某些方面的扩展,使其表达能力更强。
用E-R方法构建一个项目的模型时,经常会遇到某些实体型是某个实体型的子集
例如,研究生和本科生是学生的子类,学生是父类。这种父类-子类的联系称为ISA联系,表示“is a”的语义,如下图,研究生is a 学生,本科生 is a学生。
ISA联系用三角形来表示。
说明:ISA联系描述了一个实体型中实体的一种分类方法,其一个重要的性质是子类继承了父类的所有属性,同时子类也可有自己的属性。
根据分类属性的值把父实体型中的实体分派到子实体中。
【例】下图中在ISA联系符号三角形的右边加一个分类属性“学生类别”,说明一个学生是研究生还是本科生由“学生类别”这个属性决定。
不相交约束:父类中的一个实体不能同时属于多个子类中的实体集,即一个父类中的实体最多属于一个子类实体集。(比如学生,要么是本科生,要么是研究生,不能两个都是)
用ISA联系三角形符号内加一个“X”来表示。
可重叠约束:父类中的一个实体能同时属于多个子类中的实体集,三角形符号内没有“X”来表示。
完备性约束:描述父类中的一个实体是否必须是某一个子类中的实体。如果是,则为完全特化,否则为部分特化。
比如学生的子类是研究生和本科生,但是不一定,还可能是专科生没有画出来。
【例】0..1、1..3、1..*(*代表无穷大)。
【例】学生和学生证联系中,一个学生必须拥有一本学生证,一本学生证只能属于一个学生,因此都是1..1。
【例】学生和课程联系中,假设学生实体型的基数约束是20..30,课程的一个合理的基数约束是0..*。
要搞清实体约束的位置与实体的对应关系:
【例】班级和学生联系中,一个学生必须参加一个班,并只能参加一个班,因此为1..1,一个班级最少30个学生,最多40个学生,因此是30..40。
Part-of联系:即部分联系,表明某个实体型是另外一个实体型的一部分。
【例】汽车和轮子两个实体型,轮子是汽车的一部分,即Part-of汽车实体。
Part-of联系的分类:
【例】汽车实体型和轮子实体型之间,汽车车体被毁坏了,轮子还存在,可以拆下来独立使用。具体如下图
【例】用户从银行贷款购房,这笔贷款一次贷出,分期归还。还款就是一个弱实体,因为它只有还款序号、日期和金额三个属性,第1笔还款的序号为1,第2笔还款的序号为2,以此类推,这些属性的组合都不能作为还款的码。还款的存在必须依赖于贷款实体。
【例】房间和楼房的联系。每座楼都有唯一的编号或名称,每个房间都有编号,如果房间号不包含楼号,则房间号不能作为码,所以房间是个弱实体。
房间实体和拥有联系都是双线
UML是统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。也可以作为表示E-R图的一种方法。UML表示E-R图的说明:
【例】学生、课程它们之间的联系以及基数约束的E-R图用UML表示。
概念设计的第一步就是对需求分析阶段收集到的数据进行分类、组织,确定实体、实体属性、实体间联系类型,形成E-R图。
前面已经初步学习如何做ER图,现在来讲ER图进行进一步处理
本节主要讲解哪些项适合作为属性,哪些不适合,以及几个案例演示如何处理这些不适合作为属性的项
实体与属性的划分原则
为了简化E-R图的处置,现实世界的事物能作为属性对待的,尽量作为属性对待。
两条准则:
【例】职工是一个实体,职工号、姓名、年龄是职工的属性。
【例】在医院中,一个病人只能住在一个病房
【例】货物存在仓库中
【例】销售管理子系统E-R图的设计。
根据这个案例学习如何画ER图
该子系统的主要功能是:
先设计E-R草图如下
参照需求分析和数据字典中的详尽描述,遵循前面给出的两个准则,进行如下调整:
最后得到销售管理子系统E-R图如下:
对每个实体定义的属性如下:
前面生成了多个ER图,现在要将ER图集成到一个ER图中
E-R图的集成一般需要分两步:
可以看到,修改与重构要使用到规范化理论
各个局部应用所面向的问题不同,各个子系统的E-R图之间必定会存在许多不一致的地方,称之为冲突。
子系统E-R图之间的冲突主要有三类:
属性域冲突,即属性值的类型、取值范围或取值集合不同。
例如零件号,有的部门把它定义为整数,有的部门把它定义为字符型。
年龄,某些部门以出生日期形式表示职工的年龄,而另一些部门用整数表示职工的年龄。
属性取值单位冲突。
例如,零件的重量有的以公斤为单位,有的以斤为单位,有的以克为单位。
同名异义,即不同意义的对象在不同的局部应用中具有相同的名字。
异名同义(一义多名),即同一意义的对象在不同的局部应用中具有不同的名字。
如对科研项目,财务科称为项目,科研处称为课题,生产管理处称为工程。
命名冲突
可能发生在实体、联系一级上
也可能发生在属性一级上
通过讨论、协商等行政手段加以解决
看下面的例子
零件与产品之间存在多对多的联系“构成”。产品、零件与供应商三者之间还存在多对多的联系“供应”。
然后合并两个图
可以看到产品与零件之间加了一层关系
举例如下
如图,Q3=Q1×Q2,Q4=∑Q5。
Q3和Q4扇区了
说明:
并不是所有的冗余数据与冗余联系都必须加以消除,有时为了提高效率,不得不以冗余信息作为代价。
如果每次查询都要查询每个仓库中此种材料的库存,再求和,就使得查询效率低下。因此应保留Q4,同时把Q4=∑Q5定义为Q的完整性约束条件。每当Q,修改后,触发完整性检查。
实体之间一对一、一对多、多对多的联系可以用实体码之间的函数依赖来表示。于是有函数依赖集FL。
就是将ER图中实体之间的联系转换为函数依赖
如图:
逐一考察D中的函数依赖,确定是否是冗余的联系,若是,就把它去掉。
由于规范化理论受到泛关系假设的限制,应注意下面两个问题:
我们来合成下面的图
集成过程需要解决以下问题
最终的集成E-R图如下
上面学习了如何画出E-R图,下面一节将E-R图转换为数据库中的一张表
逻辑结构设计的任务:把概念结构设计阶段设计好的基本E-R图转换为与选用数据库管理系统产品所支持的数据模型相符合的逻辑结构。
E-R图由实体型、实体的属性和实体型之间的联系三个要素组成。E-R图向关系模型的转换就是将实体型、实体的属性和实体型之间的联系转化为关系模式。
一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
关系的属性:与该联系相连的各实体的码及联系本身的属性。关系的候选码:每个实体的码均是该关系的候选码。
那么得到的关系就是(Sdept,Mname,Time)
合并后关系的属性:加入对应关系的码和联系本身的属性。合并后关系的码:不变。
就是将Mname和Time合并到Sdept的关系中
这种方式可以减少关系的个数,多用这个
一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。
比如Sdept与Sno的联系,联系的属性为人数
那么得到的关系为(Sdept, Sno, num)
比如将Sno与num合并到Sdept中
该方法可以减少系统中的关系个数,一般情况下更倾向于采用这种方法。
一个m:n联系转换为一个关系模式。
[例]“选修”联系是一个m:n联系,可以将它转换为如下关系模式,其中学号与课程号为关系的组合码:
选修(学号,课程号,成绩)
三个或三个以上实体间的一个多元联系转换为一个关系模式。
比如这个,最终的关系就是
(产品的码,供应商的码,零件的码,数量)
具有相同码的关系模式可合并。
将下面E-R图转换为关系模型。关系的码用下横线标出。
部门和职工是1:1的领导关系,可以合并
部门(部门号,部门名,经理的职工号,…)
部门和职工有1:n的属于关系,合并到n端职工
职工(职工号、部门号,职工名,职务,…)
职工和产品是1:1的负责关系,合并到产品
产品(产品号,产品名,产品组长的职工号,…)
职工和产品是n:m的参加关系,独立一个联系
职工工作(职工号,产品号,工作天数,…)
供应是三者之间的关系,独立为一个关系
供应(产品号,供应商号,零件号,供应量)
最终的成果如下:
数据库逻辑设计的结果不是唯一的。为了进一步提高数据库应用系统的性能,还应该适当地修改、调整数据模型的结构,这就是数据模型的优化。
确定数据依赖。按需求分析阶段所得到的语义,分别写出每个关系模式内部各属性之间的数据依赖以及不同关系模式属性之间的数据依赖。(就是得到FL)
对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。(得到DL)
按照数据依赖的理论对关系模式进行分析,考察是否存在部分函数依赖(2NF)、传递函数依赖(BCNF)、多值依赖(4NF)等,确定各关系模式分别属于第几范式。
按照需求分析阶段得到的各种应用对数据处理的要求,分析对于这样的应用环境这些模式是否合适,确定是否要对它们进行合并或分解。
说明:并不是规范化程度越高的关系就越优。例如当查询经常涉及两个或多个关系模式的属性时,系统就必须经常性地进行连接运算,代价相当高,因此在这种情况下,第二范式甚至第一范式也许是适合的。
对关系模式进行必要分解,提高数据操作效率和存储空间的利用率。
常用分解方法有水平分解和垂直分解。
总之就是将经常查询的给提取出来
比如将学生分成本科生与毕业生,这样查询本科生或者毕业生就不必再筛选了
定义用户外模式时应该更注重考虑用户的习惯与方便
包括三个方面:
使用更符合用户习惯的别名合并各分E-R图曾做了消除命名冲突的工作,以使数据库系统中同一关系和属性具有唯一的名字。
用视图机制可以在设计用户视图时可以重新定义某些属性名,使其与用户习惯一致,方便使用。
针对不同级别的用户定义不同的视图,以保证系统的安全性。
简化用户对系统的使用如果某些局部应用中经常要使用某些很复杂的查询,为了方便用户,可以将这些复杂查询定义为视图。
确定数据库的物理结构
在关系数据库中主要指存取方法和存储结构。
若评价结果满足原设计要求,则可进入到物理实施阶段
否则,就要重新设计或修改物理结构,有时甚至要返回逻辑设计阶段修改数据模型。
选择索引存取方法实际上就是根据应用要求确定对哪些属性列建立索引、对哪些属性列建立组合索引、对哪些索引要设计为唯一索引等。
说明:
选择索引存取方法的一般规则:
如果一个(或一组)属性经常在查询条件中出现,则考虑在这个(或这组)属性上建立索引(或组合索引)。
如果一个属性经常作为最大值和最小值等聚集函数的参数,则考虑在这个属性上建立索引。
因为索引已经给排好序了,所以最大值和最小值很好找,不用再遍历了
如果一个(或一组)属性经常在连接操作的条件中出现,则考虑在这个(或这组)属性上建立索引。
选择Hash存取方法的规则:如果一个关系的属性主要出现在等值连接条件中或主要出现在等值比较选择条件中,而且满足下列两个条件之一:
了解即可,实际使用效率高于B+树
聚簇是为了提高谋而属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组集中存放在连续的物理块中称为聚簇。
比如将dept = "CS"的都放在C盘,将dept = "Ma"的都放在D盘,这样根据dept查找的时候只需要查找一次就可以将全部符合条件的查找出来
说明:
聚簇对于某些类型的查询,可以提高查询效率。
在一个基本表上最多只能建立一个聚簇索引。
因为要根据建立聚簇索引的属性建立连接条件,因此只能建立一个聚簇索引
聚簇索引的适用条件,一是很少对基表进行增删操作,二是很少对其中的变长列进行修改操作。
进行增删操作会改变记录的顺序,比如删除一条记录会前移后面的记录
变长列(比如varchar)会改变记录的长度,同样会改变后面记录的位置
选择聚簇存取方法:
设计候选聚簇
检查候选聚簇中的关系,取消其中不必要的关系
从聚簇中删除经常进行全表扫描的关系。
从聚簇中删除更新操作远多于连接操作的关系。
删除操作会改变物理顺序
从聚簇中删除重复出现的关系(比如一个表中有多个候选聚簇)。当一个关系同时加入多个聚簇时,必须从这多个聚簇方案(包括不建立聚簇)中选择一个较优的,即在这个聚簇上运行各种事务的总代价最小。
根据应用情况将
[例]
这里包括垂直分解和水平分解
日志文件是系统文件,数据库对象是用户文件,分开放
这些都是配置量
数据库应用程序的设计应该与数据设计并行进行,在组织数据入库的同时还要调试应用程序。
在数据库运行阶段,对数据库经常性的维护工作主要是由数据库管理员完成。主要工作包括:
数据库管理员要针对不同的应用要求制定不同的转储计划,一旦发生介质故障,尽快将数据库恢复到某种一致性状态。
当应用环境发生变化,对安全性的要求也会发生变化,数据库管理员需要根据实际情况修改原有的安全性控制,同样数据库的完整性约束条件也会变化。
在数据库运行过程中,数据库管理员必须监督系统运行,对检测数据进行分析,找出改进系统性能的方法。
仅仅是删除垃圾信息
重构造是要更改结构
数据库设计的方法和步骤
数据库设计6个阶段
重点是概念结构设计(ER图)和逻辑结构的设计(实际数据表)。
概念结构设计
概念结构的设计着重介绍了E-R模型的基本概念和图示方法。应重点掌握实体型、属性和联系的概念,理解实体型之间的一对一、一对多和多对多联系。掌握E-R模型的设计以及把E-R模型转换为关系模型的方法。