早期数据库设计和应用系统设计是分离的
大型数据库设计是涉及多学科的综合性技术,又是一项庞大的工程项目。
它要求多方面的知识和技术。主要包括:
存在的问题:
需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行和维护。
说明:
说明:调查的重点是“数据”和“处理”,获得用户对数据库在信息、处理、安全性与完整性的要求。
需求分析的目的:调查清楚用户的实际需求并进行初步分析,最终与用户达成共识。
调查用户需求的步骤:
最终确定系统边界就是要设计出数据字典
本节讲解数据库的组成部分,这几个组成部分是有逻辑联系的。
比如查成绩,要将学生的学号,姓名,成绩等做成一个数据结构一同传送
就是将实体抽象为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图是用来描述概念模型的方式
【注意】如果一个联系具有属性,则这些属性也要用无向线该联系连接起来。
例子:如果用“供应量”来描述联系“供应”的属性,表示某供应商供应了多少数量的零件给某个项目。那么这3个实休及其之间联系的E-R图如下。
可以看到,联系也是有属性的
第一步要先搞明白有哪些实体以及这些实体之间的属性有哪些
用E-R图来表示某个工厂物资管理的概念模型。物资管理涉及的实体有:
这一步要搞明白实体之间的联系,联系的类型在上面已经讲过了,是两个实体型之间的练习,还是单个实体型之间的练习;一对一还是一对多等等。
并且要想好联系是否有属性
联系:
实体型E-R图
实体和联系的ER图
在画联系的ER图的时候,不需要写属性,否则会太乱。
可以看到联系也是有属性的
完整的ER图
最终画出完整的ER图
E-R模型得到了广泛的应用,人们在基本E-R模型的基础上进行了某些方面的扩展,使其表达能力更强。
用E-R方法构建一个项目的模型时,经常会遇到某些实体型是某个实体型的子集
例如,研究生和本科生是学生的子类,学生是父类。这种父类-子类的联系称为ISA联系,表示“isa”的语义,如下图,研究生isa学生,本科生isa学生。
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图的集成一般需要分两步:
可以看到,修改与重构要使用到规范化理论
看下面的例子
零件与产品之间存在多对多的联系“构成”。产品、零件与供应商三者之间还存在多对多的联系“供应”。
然后合并两个图
可以看到产品与零件之间加了一层关系
举例如下
如图,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图转换为关系模型。关系的码用下横线标出。
最终的成果如下:
数据库逻辑设计的结果不是唯一的。为了进一步提高数据库应用系统的性能,还应该适当地修改、调整数据模型的结构,这就是数据模型的优化。
总之就是将经常查询的给提取出来
比如将学生分成本科生与毕业生,这样查询本科生或者毕业生就不必再筛选了
选择索引存取方法实际上就是根据应用要求确定对哪些属性列建立索引、对哪些属性列建立组合索引、对哪些索引要设计为唯一索引等。
选择索引存取方法的一般规则:
选择Hash存取方法的规则:如果一个关系的属性主要出现在等值连接条件中或主要出现在等值比较选择条件中,而且满足下列两个条件之一:
了解即可,实际使用效率高于B+树
聚簇是为了提高谋而属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组集中存放在连续的物理块中称为聚簇。
比如将dept="CS"的都放在C盘,将dept="Ma"的都放在D盘,这样根据dept查找的时候只需要查找一次就可以将全部符合条件的查找出来
选择聚簇存取方法:
根据应用情况将
[例]
这里包括垂直分解和水平分解
日志文件是系统文件,数据库对象是用户文件,分开放
这些都是配置量
数据库应用程序的设计应该与数据设计并行进行,在组织数据入库的同时还要调试应用程序。
在数据库运行阶段,对数据库经常性的维护工作主要是由数据库管理员完成。主要工作包括:
数据库管理员要针对不同的应用要求制定不同的转储计划,一旦发生介质故障,尽快将数据库恢复到某种一致性状态。
当应用环境发生变化,对安全性的要求也会发生变化,数据库管理员需要根据实际情况修改原有的安全性控制,同样数据库的完整性约束条件也会变化。
在数据库运行过程中,数据库管理员必须监督系统运行,对检测数据进行分析,找出改进系统性能的方法。