数据库设计 订阅
数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。在数据库领域内,常常把使用数据库的各类系统统称为数据库应用系统。数据库设计的设计内容包括:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库的实施和数据库的运行和维护。 展开全文
数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。在数据库领域内,常常把使用数据库的各类系统统称为数据库应用系统。数据库设计的设计内容包括:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库的实施和数据库的运行和维护。
信息
范    围
使用数据库的各类系统
外文名
Database Design
设计内容
需求分析、概念结构设计、逻辑结构设计等
中文名
数据库设计
设计原则
一对一设计、独特命名、双向使用
目    的
数据库及其应用系统
数据库设计定义
数据库设计(Database Design)是指根据用户的需求,在某一具体的数据库管理系统上,设计数据库的结构和建立数据库的过程。数据库系统需要操作系统的支持。数据库设计是建立数据库及其应用系统的技术,是信息系统开发和建设中的核心技术。由于数据库应用系统的复杂性,为了支持相关程序运行,数据库设计就变得异常复杂,因此最佳设计不可能一蹴而就,而只能是一种“反复探寻,逐步求精”的过程,也就是规划和结构化数据库中的数据对象以及这些数据对象之间关系的过程。
收起全文
精华内容
下载资源
问答
  • 数据库设计 万次阅读
    2021-09-14 09:58:39

    数据库设计

    数据库设计概念
    数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构, 并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。
    目标:为用户和各种应用系统提供一个信息基础设施和高效率的运行环境。
    一、数据库设计的特点
    数据库建设的基本规律
    三分技术,七分管理,十二分基础数据
    管理

    数据库建设项目管理
    企业(即应用部门)的业务管理
    基础数据

    收集、入库
    更新新的数据
    结构(数据)设计和行为(处理)设计相结合。将数据库结构设计和数据处理设计密切结合

    二、数据库设计方法

    手工与经验相结合方法
    设计质量与设计人员的经验和水平有直接关系
    数据库运行一段时间后常常不同程度地发现各种问 题,增加了维护代价
    规范设计法
    基本思想:过程迭代和逐步求精
    新奥尔良(New Orleans)方法
    将数据库设计分为若干阶段和步骤
    基于E-R模型的数据库设计方法
    概念设计阶段广泛采用
    3NF(第三范式)的设计方法
    逻辑阶段可采用的有效方法
    CASE即Computer Aided Software Engineering, 中文意思是计算机辅助软件工程。CASE是一组 工具和方法的集合,可以辅助软件开发生命周期 各阶段进行软件开发。
    ORACLE Designer
    SYBASE PowerDesigner
    三、数据库设计的基本步骤
    (一)数据库设计的准备工作:选定参加设计的人
    1.系统分析人员、数据库设计人员(核心人员)
    自始至终参与数据库设计,其水平决定了数据库系统的质量

    用户和数据库管理员
    主要参加需求分析和数据库的运行维护
    3.应用开发人员(程序员和操作员)
    在系统实施阶段参与进来,负责编制程序和准备软硬件环境
    (二)数据库设计的过程
    1.需求分析阶段
    准确了解与分析用户需求(包括数据与处理)
    最困难、最耗费时间的一步
    2.概念结构设计阶段
    整个数据库设计的关键
    通过对用户需求进行综合、归纳与抽象,形 成一个独立于具体DBMS的概念模型
    需求分析和概念设计独立于任何数据库管理系统

    3.逻辑结构设计阶段

    将概念结构转换为某个DBMS所支持的数据模型
    对其进行优化
    4.数据库物理设计阶段

    为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)
    逻辑设计和物理设计与选用的DBMS密切相关
    5.数据库实施阶段
    运用DBMS提供的数据库语言(如SQL)及 宿主语言,根据逻辑设计和物理设计的结果

    建立数据库
    编制与调试应用程序
    组织数据入库
    进行试运行
    6.数据库运行和维护阶段

    数据库应用系统经过试运行后即可投入正式运行
    在数据库系统运行过程中必须不断地对其进行评价、调整与修改
    设计特点

    把数据库设计和对数据库中数据处理的设计紧密结合起来
    将这两个方面的需求分析、抽象、设计、实现在各个阶段同时进行,相互参照,相互补充,以完善两方面的设计
    数据库设计过程中的各级模式的形成过程

    需求分析阶段
    综合各个用户的应用需求
    概念设计阶段
    形成独立于机器特点,独立于各个 DBMS产品的概念模式(E-R图)
    逻辑设计阶段
    首先将E-R图转换成具体的数据库产品支 持的数据模型,如关系模型,形成数据库 逻辑模式
    然后根据用户处理的要求、安全性的考虑, 在基本表的基础上再建立必要的视图 (View),形成数据的外模式
    物理设计阶段
    根据DBMS特点和处理的需要,进行物理 存储安排,建立索引,形成数据库内模式
    需求分析
    一、需求分析的任务

    详细调查现实世界要处理的对象(组织、部门、企业等)
    充分了解原系统(手工系统或计算机系统)
    明确用户的各种需求
    确定新系统的功能
    充分考虑今后可能的扩充和改变(不能仅仅按当前应用 需求来设计数据库)
    调查的重点是“数据”和“处理”,获得用户对数据库要求。

    需求分析的重点:

    信息要求
    用户需要从数据库中获得信息的内容与性质
    由用户的信息要求可以导出数据要求,即在数据 库中需要存储哪些数据
    处理要求
    对处理功能的要求
    对处理的响应时间的要求
    对处理方式的要求(批处理 / 联机处理)
    新系统的功能必须能够满足用户的信息要求、处理 要求、安全性与完整性要求
    需求分析难点:

    确定用户最终需求
    用户缺少计算机知识
    设计人员缺少用户的专业知识
    解决方法
    设计人员必须不断深入地与用户进行交流
    二、需求分析的方法

    1. 调查与初步分析用户需求
      ⑴ 调查组织机构情况

    组织部门的组成情况
    各部门的职责等
    ⑵ 调查各部门的业务活动情况。调查重点之一。

    各个部门输入和使用什么数据
    如何加工处理这些数据
    输出什么信息
    输出到什么部门
    输出结果的格式是什么
    ⑶ 在熟悉业务活动的基础上,协助用户明确对新系统 的各种要求。调查重点之二。
    信息要求
    处理要求
    完全性与完整性要求
    ⑷ 对前面调查的结果进行初步分析
    确定新系统的边界
    确定哪些功能由计算机完成或将来准备让计算机完成
    确定哪些活动由人工完成 由计算机完成的功能就是新系统应该实现的功能。
    2.常用调查方法
    ⑴跟班作业

    通过亲身参加业务工作了解业务活动的情况
    能比较准确地理解用户的需求,但比较耗时
    ⑵开调查会

    通过与用户座谈来了解业务活动情况及用户需求
    ⑶请专人介绍

    ⑷询问

    对某些调查中的问题,可以找专人询问
    ⑸设计调查表请用户填写

    如果调查表设计合理,则很有效,且易于为用户接受
    ⑹查阅记录

    查阅与原系统有关的数据记录
    3.进一步分析和表达用户需求
    结构化分析方法(Structured Analysis,简 称SA方法)

    从最上层的系统组织机构入手
    自顶向下、逐层分解分析系统
    数据流图和数据字典描述系统
    1)首先把任何一个系统都抽象为:
    在这里插入图片描述
    2.分解处理功能和数据
    (1)分解处理功能
    将处理功能的具体内容分解为若干子功能
    (2)分解数据
    处理功能逐步分解同时,逐级分解所用数据, 形成若干层次的数据流图
    (3)表达方法
    处理逻辑:用判定表或判定树来描述
    数据:用数据字典来描述
    3.将分析结果再次提交给用户,征得用户的认可

    三、数据字典
    数据字典的用途是各类数据描述的集合
    进行详细的数据收集和数据分析所获得的主要结果
    数据字典的内容
    1.数据项
    数据项是不可再分的数据单位
    对数据项的描述

    数据项描述=
    {数据项名,数据项含义说明,别名,
    数据类型,长度,取值范围,取值含义,
    与其他数据项的逻辑关系,
    数据项之间的联系 }
    

    2.数据结构
    数据结构反映了数据之间的组合关系。
    一个数据结构可以由若干个数据项组成,也可以由若 干个数据结构组成,或由若干个数据项和数据结构混 合组成。
    对数据结构的描述

    数据结构描述=
    {数据结构名,含义说明,
    组成:{数据项或数据结构}}
    

    3.数据流

    数据流是数据结构在系统内传输的路径。
    对数据流的描述

    数据流描述=
    { 数据流名,说明,数据流来源,
    数据流去向,组成:{数据结构},
    平均流量,高峰期流量}
    

    4.数据存储

    数据存储是数据结构停留或保存的地方,也是数 据流的来源和去向之一。
    对数据存储的描述

    数据存储描述=
    {数据存储名,说明,编号, 
    输入的数据流 ,输出的数据流 , 
    组成:{数据结构},数据量,
    存取频度, 存取方式}
    

    5.处理过程

    具体处理逻辑一般用判定表或判定树来描述
    处理过程说明性信息的描述

    处理过程描述=
    {处理过程名,说明,输入:{数据流},
     输出:{数据流},处理:{简要说明}}
    

    数据字典

    数据字典是关于数据库中数据的描述,是元数据, 而不是数据本身
    数据字典在需求分析阶段建立,在数据库设计过程 中不断修改、充实、完善
    概念结构设计
    一、概念结构

    将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计
    概念结构是各种数据模型的共同基础,它比数据模型更独立于机器、更抽象,从而更加稳定
    概念结构设计是整个数据库设计的关键
    描述概念模型的工具:E-R模型
    二、概念结构设计的方法与步骤
    设计概念结构的四类方法

    自顶向下
    首先定义全局概念结构的框架,然后逐步细化
    在这里插入图片描述
    自底向上
    首先定义各局部应用的概念结构,然后将它们集成 起来,得到全局概念结构
    在这里插入图片描述
    逐步扩张
    首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至总体概念结构
    在这里插入图片描述
    混合策略
    将自顶向下和自底向上相结合,用自顶 向下策略设计一个全局概念结构的框架, 以它为骨架集成由自底向上策略中设计的各局部概念结构。
    自顶向下地进行需求分析
    自底向上地设计概念结构
    在这里插入图片描述
    自底向上设计概念结构的步骤
    第1步:抽象数据并设计局部视图
    第2步:集成局部视图,得到全局概念结构
    在这里插入图片描述
    三、数据抽象与局部视图设计
    1.数据抽象
    抽象是对实际的人、物、事和概念中抽取 所关心的共同特性,忽略非本质的细节, 并把这些特性用各种概念精确地加以描述。
    概念结构是对现实世界的一种抽象
    三种常用抽象:
    分类(Classification)
    定义某一类概念作为现实世界中一组对象的类型
    抽象了对象值和型之间的“is member of”的语义
    聚集(Aggregation)
    定义某一类型的组成成分
    抽象了对象内部类型和成分之间“is part of”的语义
    复杂的聚集,某一类型的成分仍是一个聚集
    概括(Generalization)
    定义类型之间的一种子集联系
    抽象了类型之间的“is subset of”的语义
    继承性
    2.局部视图设计
    设计分E-R图的步骤:
    1)选择局部应用

    在多层的数据流图中选择一个适当层次的数据流图,作为设计分E-R图的出发点
    通常以中层数据流图作为设计分E-R图的依据
    2)逐一设计分E-R图

    将各局部应用涉及的数据分别从数据字典中 抽取出来
    参照数据流图,标定各局部应用中的实体、 实体的属性、标识实体的码
    确定实体之间的联系及其类型(1:1,1:n, m:n)
    两条准则:
    属性不能再具有需要描述的性质。即 属性必须是不可分的数据项,不能再由另一 些属性组成
    属性不能与其他实体具有联系。联系 只发生在实体之间
    四、视图的集成
    各个局部视图即分E-R图建立好后,还需要对它们进行合并,集成为一个整体的数据概念结构即总E-R图。

    多个分E-R图一次集成
    一次集成多个分E-R图
    通常用于局部视图比较简单时
    在这里插入图片描述
    逐步集成
    用累加的方式一次集成两个分E-R图(通常是比较关键的两个局 部视图)
    在这里插入图片描述集成局部E-R图的步骤 :合并;修改与重构
    在这里插入图片描述
    各分E-R图存在冲突
    各个分E-R图之间必定会存在许多不一致的地方
    合并分E-R图的主要工作与关键
    合理消除各分E-R图的冲突
    冲突
    1.属性冲突

    属性域冲突
    属性值的类型
    取值范围
    取值集合不同
    属性取值单位冲突
    2.命名冲突

    同名异义:不同意义的对象在不同的局部应用中 具有相同的名字
    异名同义(一义多名):同一意义的对象在不同 的局部应用中具有不同的名字
    3.结构冲突

    同一对象在不同应用中具有不同的抽象
    同一实体在不同局部视图中所包含的属性不 完全相同,或者属性的排列次序不完全相同。
    产生原因:不同的局部应用关心的是该实 体的不同侧面。
    解决方法:使该实体的属性取各分E-R图 中属性的并集,再适当设计属性的次序。
    实体之间的联系在不同局部视图中呈现不同的类型
    解决方法:根据应用语义对实体联系的类型 进行综合或调整。
    消除不必要的冗余,设计基本E-R图
    1.冗余

    冗余的数据是指可由基本数据导出的数据;
    冗余的联系是指可由其他联系导出的联系
    冗余数据和冗余联系容易破坏数据库的完整性,给 数据库维护增加困难
    并不是所有的冗余数据与冗余联系都必须加以消除, 有时为了提高某些应用的效率,不得不以冗余信息作为代价。
    设计数据库概念结构时,哪些冗余信息必须消除,哪些冗余信息允许存在,需要根据用户的整体需求来确定。
    消除不必要的冗余后的初步E-R图称为基本E- R图。
    2.消除冗余的方法

    分析方法
    以数据字典和数据流图为依据
    根据数据字典中关于数据项之间的逻辑关系 的说明来消除冗余。
    如果是为了提高效率,人为地保留了一些冗 余数据,则应把数据字典中数据关联的说明 作为完整性约束条件。
    一种更好的方法是把冗余数据定义在视图中
    规范化理论
    函数依赖的概念提供了消除冗余联系的形式 化工具
    方法:

    确定分E-R图实体之间的数据依赖 ,并用实体码之间的函数依赖表示。
    求FL的最小覆盖GL ,差集为D = FL-GL。逐一考察D中的函数依赖,确定是否是冗余的联系,若 是,就把它去掉
    (1) 冗余的联系一定在D中,而D中的联系不一定是冗余的;
    (2) 当实体之间存在多种联系时要将实体之间的联系在形式上加以区分。
    验证整体概念结构:
    视图集成后形成一个整体的数据库概念结构,对该 整体概念结构还必须进行进一步验证,确保它能够 满足下列条件:

    整体概念结构内部必须具有一致性,不存在互相矛盾的表达
    整体概念结构能准确地反映原来的每个视图结构,包括属性、实体及实体间的联系
    整体概念结构能满足需求分析阶段所确定的所有要求
    整体概念结构最终还应该提交给用户,征求用户和有关人员的意见,进行评审、修改和优化,然后把它确定下来,作为数据库的概念结构,作为进一步设计数据库的依据
    逻辑结构设计
    逻辑结构设计的任务

    把概念结构设计阶段设计好的基本E-R图转换为与选 用DBMS产品所支持的数据模型相符合的逻辑结构
    逻辑结构设计的步骤

    将概念结构转化为一般的关系、网状、层次模型
    将转换来的关系、网状、层次模型向特定DBMS支持 下的数据模型转换
    对数据模型进行优化
    逻辑结构设计时的3个步骤
    在这里插入图片描述
    一、E-R图向关系模型的转换
    1.转换内容

    E-R图向关系模型的转换要解决的问题
    如何将实体型和实体间的联系转换为关系模式
    如何确定这些关系模式的属性和码
    转换内容
    将E-R图转换为关系模型:将实体、实体的属性和 实体之间的联系转换为关系模式。
    实体型间的联系有以下不同情况 :
    (1)一个1:1联系可以转换为一个独立的关系模式, 也可以与任意一端对应的关系模式合并。
    转换为一个独立的关系模式;
    与某一端实体对应的关系模式合并。
    (2)一个1:n联系可以转换为一个独立的关系模式, 也可以与n端对应的关系模式合并。
    转换为一个独立的关系模式;
    与n端对应的关系模式合并。
    (3) 一个m:n联系转换为一个关系模式。
    (4)三个或三个以上实体间的一个多元联系转换为一个关系模式。
    (5)具有相同码的关系模式可合并
    目的:减少系统中的关系个数
    合并方法:将其中一个关系模式的全部属性加入到另一个关系模式中,然后去掉其中的同义属性(可能同名也可能 不同名),并适当调整属性的次序
    注意:

    从理论上讲,1:1联系可以与任意一端对应的关系模式合并
    但在一些情况下,与不同的关系模式合并效率会大不 一样。因此究竟应该与哪端的关系模式合并需要依应 用的具体情况而定。
    由于连接操作是最费时的操作,所以一般应以尽量减少连接操作为目标。
    二、数据模型的优化

    得到初步数据模型后,还应该适当地修改、调 整数据模型的结构,以进一步提高数据库应用 系统的性能,这就是数据模型的优化
    关系数据模型的优化通常以规范化理论为指导
    1.优化模型方法

    确定数据依赖
    按需求分析阶段所得到的语义,分别写出每个关系模式内 部各属性之间的数据依赖以及不同关系模式属性之间数据 依赖
    消除冗余的联系
    对于各个关系模式之间的数据依赖进行极小化处理,消除 冗余的联系。
    确定所属范式
    按照数据依赖的理论对关系模式逐一进行分析
    考查是否存在部分函数依赖、传递函数依赖、多值依赖等
    确定各关系模式分别属于第几范式
    按照需求分析阶段得到的各种应用对数据处理的要求,分析对于这样的应用环境这些模式是否合适,确定是否要对它们进行合并或分解。
    并不是规范化程度越高的关系就越优,一般说来,第三范式就足够了
    按照需求分析阶段得到的各种应用对数据处理的要求, 对关系模式进行必要的分解,以提高数据操作的效率和存储空间的利用率。常用分解方法:
    水平分解:把(基本)关系的元组分为若干子集合,定义每个子集合为一个子关系,以提高系统的效率。
    适用范围:满足“80/20原则”的应用;并发事务经常存取不相交的数据
    垂直分解:把关系模式R的属性分解为若干子集合,形成若干子关系模式。
    使用范围:取决于分解后R上的所有事务的总效率是否得到了提高
    三、设计用户子模式
    注重的问题
    (1) 使用更符合用户习惯的别名
    (2) 针对不同级别的用户定义不同的View,以满足系统对安全性的要求。
    (3) 简化用户对系统的使用

    数据库的物理设计
    数据库的物理设计

    数据库在物理设备上的存储结构与存取方法称为数据 库的物理结构,它依赖于选定的数据库管理系统
    为一个给定的逻辑数据模型选取一个最适合应用环境 的物理结构的过程,就是数据库的物理设计
    数据库物理设计的步骤

    确定数据库的物理结构,在关系数据库中主要指存取方法 和存储结构
    对物理结构进行评价,评价的重点是时间和空间效率
    如果评价结果满足原设计要求,则可进入到物理实施阶段, 否则,就需要重新设计或修改物理结构,有时甚至要返回 逻辑设计阶段修改数据模型
    在这里插入图片描述
    一、数据库物理设计的内容和方法
    设计物理数据库结构的准备工作
    对要运行的事务进行详细分析,获得选择物理数据库设计所需参数
    充分了解所用RDBMS的内部特征,特别是系统提 的存取方法和存储结构
    选择物理数据库设计所需参数

    数据库查询事务
    查询的关系
    查询条件所涉及的属性
    连接条件所涉及的属性
    查询的投影属性
    数据更新事务
    被更新的关系
    每个关系上的更新操作条件所涉及的属性
    修改操作要改变的属性值
    每个事务在各关系上运行的频率和性能要求
    关系数据库物理设计的内容

    为关系模式选择存取方法(建立存取路径)
    设计关系、索引等数据库文件的物理存储结构
    1.关系模式存取方法选择

    数据库系统是多用户共享的系统,对同一个关系要建立多条存取路径才能满足多用户的多种应用要求
    物理设计的任务之一就是要确定选择哪些存取方法,即建立哪些存取路径
    DBMS常用存取方法

    索引方法
    目前主要是B+树索引方法
    经典存取方法,使用最普遍
    聚簇(Cluster)方法
    HASH方法
    根据应用要求确定

    对哪些属性列建立索引
    对哪些属性列建立组合索引
    对哪些索引要设计为唯一索引
    选择索引存取方法的一般规则

    如果一个(或一组)属性经常在查询条件中出现,则考虑在 这个(或这组)属性上建立索引(或组合索引)
    如果一个属性经常作为最大值和最小值等聚集函数的参 数,则考虑在这个属性上建立索引
    如果一个(或一组)属性经常在连接操作的连接条件中出现, 则考虑在这个(或这组)属性上建立索引
    关系上定义的索引数过多会带来较多的额外开销

    维护索引的开销
    查找索引的开销
    2.聚簇存取方法的选择
    聚簇
    为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组集中存放在连续的物理块称为聚簇
    聚簇的用途

    大大提高按聚簇码进行查询的效率
    节省存储空间
    聚簇以后,聚簇码相同的元组集中在一起了,因而 聚簇码值不必在每个元组中重复存储,只要在一组 中存一次就行了
    聚簇的局限性

    聚簇只能提高某些特定应用的性能
    建立与维护聚簇的开销相当大
    对已有关系建立聚簇,将导致关系中元组移动其物理存储位置,并使此关系上原有的索引无效,必须重建
    当一个元组的聚簇码改变时,该元组的存储位置也要做相应移动
    聚簇的适用范围

    既适用于单个关系独立聚簇,也适用于多个关系组合聚簇。
    当通过聚簇码进行访问或连接是该关系的主要应用, 与聚簇码无关的其他访问很少或者是次要的时候,可 以使用聚簇。
    设计候选聚簇

    对经常在一起进行连接操作的关系可以建立聚簇
    如果一个关系的一组属性经常出现在相等比较条件中,则 该单个关系可建立聚簇
    如果一个关系的一个(或一组)属性上的值重复率很高,则 此单个关系可建立聚簇。即对应每个聚簇码值的平均元组 数不太少。太少了,聚簇的效果不明显
    优化聚簇设计

    从聚簇中删除经常进行全表扫描的关系;
    从聚簇中删除更新操作远多于连接操作的关系;
    不同的聚簇中可能包含相同的关系,一个关系可以 在某一个聚簇中,但不能同时加入多个聚簇
    从这多个聚簇方案(包括不建立聚簇)中选择一个较优的,即 在这个聚簇上运行各种事务的总代价最小
    3.HASH存取方法的选择
    选择HASH存取方法的规则
    当一个关系满足下列两个条件时,可以选择HASH存 取方法

    该关系的属性主要出现在等值连接条件中或主要 出现在相等比较选择条件中
    该关系的大小可预知,而且不变; 或该关系的大小动态改变,但所选用的DBMS提供了 动态HASH存取方法
    三、确定数据库的存储结构
    确定数据库物理结构的内容

    1. 确定数据的存放位置和存储结构

    关系
    索引
    聚簇
    日志
    备份
    确定数据存放位置和存储结构的因素

    存取时间
    存储空间利用率
    维护代价
    基本原则:
    根据应用情况将

    易变部分与稳定部分分开存放
    存取频率较高部分与存取频率较低部分,分开存放
    2. 确定系统配置
    DBMS产品一般都提供了一些存储分配参数

    同时使用数据库的用户数
    同时打开的数据库对象数
    内存分配参数
    使用的缓冲区长度、个数
    存储分配参数
    四、评价物理结构

    评价内容
    对数据库物理设计过程中产生的多种方案进行细致的评价,从中选择一个较优的方案作为数据库的物理结构
    评价方法(完全依赖于所选用的DBMS )
    定量估算各种方案:存储空间;存取时间;维护代价
    对估算结果进行权衡、比较,选择出一个较优的合 理的物理结构
    如果该结构不符合用户需求,则需要修改设计
    数据库的实施和维护
    一、数据的载入和应用程序的调试
    数据的载入

    数据库结构建立好后,就可以向数据库中装载数据了。 组织数据入库是数据库实施阶段最主要的工作。
    数据装载方法
    人工方法
    计算机辅助数据入库
    应用程序的编码和调试

    数据库应用程序的设计应该与数据设计并行进行
    在组织数据入库的同时还要调试应用程序
    二、数据库的试运行
    在原有系统的数据有一小部分已输入数据库后,就可以开始 对数据库系统进行联合调试,称为数据库的试运行
    数据库试运行主要工作包括:
    1)功能测试

    实际运行数据库应用程序,执行对数据库的各种操作,测试应 用程序的功能是否满足设计要求
    如果不满足,对应用程序部分则要修改、调整,直到达到设计 要求
    2)性能测试

    测量系统的性能指标,分析是否达到设计目标
    如果测试的结果与设计目标不符,则要返回物理设计阶段,重 新调整物理结构,修改系统参数,某些情况下甚至要返回逻辑 设计阶段,修改逻辑结构
    分期分批组织数据入库

    重新设计物理结构甚至逻辑结构,会导致数据重 新入库。
    由于数据入库工作量实在太大,费时、费力,所 以应分期分批地组织数据入库
    先输入小批量数据供调试用
    待试运行基本合格后再大批量输入数据
    逐步增加数据量,逐步完成运行评价
    数据库的转储和恢复

    在数据库试运行阶段,系统还不稳定,硬、软件故障随时都可能发生
    系统的操作人员对新系统还不熟悉,误操作也不可避免
    因此必须做好数据库的转储和恢复工作,尽量减少对数据库的破坏。
    三、数据库的运行和维护

    数据库试运行合格后,数据库即可投入正式运行。
    数据库投入运行标志着开发任务的基本完成和维护工 作的开始
    对数据库设计进行评价、调整、修改等维护工作是一 个长期的任务,也是设计工作的继续和提高
    应用环境在不断变化
    数据库运行过程中物理存储会不断变化
    在数据库运行阶段,对数据库经常性的维护 工作主要是由DBA完成的,包括:
    1 . 数据库的转储和恢复
    2 . 数据库的安全性、完整性控制
    3 . 数据库性能的监督、分析和改进
    4 . 数据库的重组织和重构造

    重组织的形式:

    全部重组织;
    部分重组织——只对频繁增、删的表进行重组织。
    重组织的目标:

    提高系统性能
    重组织的工作:

    按原设计要求
    – 重新安排存储位置
    – 回收垃圾
    – 减少指针链
    数据库的重组织不会改变原设计的数据逻辑结构和物理结构
    数据库重构造:
    根据新环境调整数据库的模式和内模式

    增加新的数据项
    改变数据项的类型
    改变数据库的容量
    增加或删除索引
    修改完整性约束条件

    喜欢的同学欢迎加入公众号,每天都会分享java的内容
    在这里插入图片描述

    更多相关内容
  • 对于不太会设计数据库的朋友可以看看,从不同角度去实现数据库设计,此设计方法比较详细的设计了音乐平台数据库后台的需要!
  • PowerDesigner数据库设计与建模,本课程讲述了如何使用PowerDesigner进行数据库分析与建模。包括企业架构及业务流程分析,实体关系模型设计,面向对象和数据库建模的集成等功能模块进行项目需求分析、结构规划、生成...
  • 数据库设计开发规范-阿里.pdf

    热门讨论 2017-06-23 16:26:55
    数据库设计开发规范-阿里.pdf
  • 第7章 数据库设计

    千次阅读 多人点赞 2022-02-14 11:37:37
    7.1 数据库设计概述 ????????7.1.1 数据库设计的特点 ????​​​​​​​????7.1.2 数据库设计方法 ????​​​​​​​????7.1.3 数据库设计的基本步骤 ????​​​​​​​????7.1.4 数据库设计过程中的各级...

    🎈目录🎈

     🍚 7.1 数据库设计概述

               🍖🍖 7.1.1 数据库设计的特点

               🍔​​​​​​​🍔 7.1.2 数据库设计方法

              🥩​​​​​​​🥩 7.1.3 数据库设计的基本步骤

              🍦​​​​​​​🍦 7.1.4 数据库设计过程中的各级模式

     🍨 7.2 需求分析

              🍲​​​​​​​🍲 7.2.1 需求分析的任务

              🧀​​​​​​​🧀 7.2.2 需求分析的方法

              🍓​​​​​​​🍓 7.2.3 数据字典

     🦪 7.3 概念结构设计

              🍪​​​​​​​🍪 7.3.1 概念模型

              🧉​​​​​​​🧉 7.3.2 E-R模型

                    🥟​​​​​​​🥟​​​​​​​🥟 1.实体之间的联系

                    🧁​​​​​​​🧁​​​​​​​🧁 2.E-R图

                    🥘​​​​​​​🥘​​​​​​​🥘 3.一个实例

              🌭​​​​​​​🌭 *7.3.3 扩展的E-R图

              🍘​​​​​​​🍘 *7.3.4 UML 

              🧇​​​​​​​🧇 7.3.5 概念结构设计

     🍟 7.4 逻辑结构设计

              🍱​​​​​​​🍱 7.4.1 E-R图向关系模式的转换

              🍣​​​​​​​🍣 7.4.2 数据模型的优化

              🍡​​​​​​​🍡 7.4.3 设计用户子模式

     🥡 7.5 物理结构设计

              🍤​​​​​​​🍤 7.5.1 数据库物理设计的内容和方法

              🍵​​​​​​​🍵 7.5.2 关系模式存取方法选择

              🥖​​​​​​​🥖 7.5.3 确定数据库的存储位置

              🥞​​​​​​​🥞 7.5.4 评价物理结构

     🍜 7.6 数据库的实施和维护 

              🍞​​​​​​​🍞 7.6.1 数据的载入和应用程序的调试

              🍗​​​​​​​🍗 7.6.2 数据库的试运行

              🍕​​​​​​​🍕 7.6.3 数据库的运行和维护

     🍭 7.7 小结


    7.1 数据库设计概述

    1.数据库设计定义

    数据库设计是指对于一个给定的应用环境,构造(设计)优化数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之可以有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。

    2.信息管理要求

    在数据库中应该存储和管理哪些数据对象

    ps:

    数据对象:比如说 数据表、视图、索引、里面实际的数据等。

    3.数据操作要求

    对数据对象需要进行哪些数据操作,如查询、增、删、该、统计等操作。

    4.数据库设计的目标

    为用户和各种应用系统 提供一个信息基础设施 和 高效率的运行环境

    ps:

    信息基础设施:要向数据库里面放信息、数据。

    5.高效率的运行环境

    ①数据的存储效率高;

    ②数据存储空间的利用率高;

    ③数据库系统运行管理的效率高。


    7.1.1 数据库设计的特点

    1.数据库建设的基本规律

    三分技术、七分管理、十二分基础数据。

    ps:

    举个例子,我们建了一个库房,这个库房用了最好的空调,最好的货架等等,用了最好的环境;但是管理库房的管理员没有做到尽职尽责,货物在存放的时候乱七八糟,那么也会使得数据库管理非常低下。

    数据库在建立好了以后,它就静态的放在那个地方,而动态变化的是数据库里面存放的数据;也就是说,随着时间的变化,这些数据会不断的变化;因此,在更大的程度上,我们会把更多的精力放在数据上(收集、整理、组织、更新等等)。

    管理:数据库建设项目管理 和 企业(应用部门)的业务管理。

    基础结构:数据的收集、整理、组织和不断更新。

    2.结构设计和行为设计相结合

    ps:

    结构设计:数据库是什么样的结构,应该怎样去设计它。

    行为设计:这些数据怎么去处理。

    换句话说,就是指数据库和应用程序 应该是同时相结合来设计的。

    将 数据库设计和数据库处理设计 密切结合。

    ps:

    在过去中,我们通常是把 数据库的设计 和应用程序(软件)的设计 是割裂开来的。先设计软件、应用程序之后,再设计数据库。这样就会出现一个问题,在设计软件的过程当中,可能会出现有些数据、有些数据的结构 在数据库里面没有办法体现、在数据库存放的时候效率低下。

    传统的软件工程:重在行为设计(说白了就是软件的开发)。忽视对应用中数据语义的分析和抽象,只要有可能就尽量推迟 数据结构设计的策略。

    早期的数据库设计:重结构设计(说白了就是注重 数据库里面放哪些表、表里面放哪些数据、应该属于2NF还是3NF就可以了)。致力于数据模型和数据库建模方法研究,忽视了行为设计 对结构设计的影响。

    ps:

     

     


    7.1.2 数据库设计方法

    大型数据库设计是涉及多学科的综合性技术,又是一项庞大的工程项目。它要求多方面的知识和技术。主要包括:

    1. 计算机的基础知识;
    2. 软件工程的原理和方法;
    3. 程序设计的方法和技巧;
    4. 数据库的基本知识;
    5. 数据库设计技术;
    6. 应用领域的知识。

    (1)手工与经验结合的方法

    存在的问题:

    1. 设计质量与设计人员的经验和水平有直接关系。
    2. 缺乏科学理论和工程方法的支持,工程的质量难以保证。
    3. 数据库运行一段时间后常常有不同程度的发现各种问题,增加了维护代价。 

    (2)规范设计法

    ①基本思想:过程迭代和逐步求精

    ②典型方法

    1. 新奥尔良方法
    2. 基于E-R模型的数据库设计方法
    3. 3NF的设计方法
    4. 面向对象的数据库设计方法
    5. 统一建模语言(UML)方法 

    ps:

    新奥尔良方法:把数据库的设计分成4个阶段,需求分析(用户的需求)、概念设计(根据需求设计数据库大致长什么样)、逻辑设计(把概念设计的转换成实际的数据库)、物理设计(存储在什么位置、用什么样的方式来存)。

     面向对象的数据库设计方法:把现实中存在的一个物体作为源头来进行设计的。


    7.1.3 数据库设计的基本步骤

    一、数据库设计分6个阶段 

    需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行和维护。

    ps:

    前面四个就是 新奥尔良方法。

    【分析】

    1. 需求分析:要了解建立数据库的需求,想要把数据库建立成什么样。
    2. 概念结构设计:根据想要的要求,把数据库应该设计成什么样,用E-R图、UML语言等方法把数据库描述出来。
    3. 逻辑结构设计:描述出来以后,就把它转换成为实际的数据库。
    4. 物理逻辑设计:怎么去存储数据库,放在硬盘里以何种方式存放。
    5. 数据库实施:数据库建好了以后就开始用数据库。
    6. 数据库运行和维护:在用数据库的过程中,要进行运行与维护。 

    【说明】

    1. 需求分析概念设计独立与任何数据库管理系统(相当于比如说 打字,用记事本可以、用WPS也可以、用word也可以,它是独立于这个软件的;这两个阶段到最后是用的哪一种关系都无所谓的)。
    2. 逻辑设计物理设计与选用的数据库管理系统密切相关(对数据库的设计不同的软件对应的方法是不一样的)。 

     

     ps:

    数据库设计的6个阶段不是直接就下来的。比如说 到了数据库实施的阶段,发现了一些小错误需要改正,那么要重新修改数据库,又要回到逻辑结构设计部分,就是说 它们相互之间还是有穿插的。

    二、参加数据库设计的人员

    1.系统分析人员和数据库设计人员:自始至终参与数据库设计,其水平决定了数据库系统的质量。

    2.数据库管理员和用户代表:要参加需求分析和数据库的运行与维护。

    3.应用开发人员:包括程序员和操作员,在实施阶段参与进来,分别负责编制程序和准备实施软硬件环境。 

    三、各阶段的主要任务

    1.需求分析阶段:了解客户需求,该阶段是否做得充分与准确,决定了构建数据库的速度和质量。

    2.概念结构设计阶段:对用户需求进行综合、归纳与抽象,形成一个独立于 具体 数据库管理系统的概念模型(E-R图之类的)。

    3.逻辑结构设计阶段:将概念结构转化为 数据库管理系统 所支持的数据模型,并对其进行优化。

    4.物理结构设计阶段:逻辑数据结构 选取一个最适合 应用环境的物理结构,包括存储结构和存取方法。

    5.数据库实施阶段:根据逻辑设计和物理设计的结果构建数据库,编写与调试应用程序,组织数据入库 并进行试运行。

    6.数据库运行和维护阶段:经过试运行后 即可投入正式运行,在运行过程中 必须不断对其进行评估、调整与修改。

    【说明】

    1. 设计一个完善的数据库应用系统 往往是上述6各阶段的不断反复与迭代。
    2. 设计步骤既是数据库设计的过程,也包括了数据库应用系统的设计过程(同步进行的)。
    3. 把数据库的设计和数据处理的设计紧密结合,将这两个方面的需求分析、抽象、设计、实现在各个阶段同时进行(软件开发和数据库的设计是同步进行的)。

    四、各个阶段的数据设计描述

     

     【简要说明】

    1.需求分析阶段

    综合各个用户的应用需求。

    2.概念设计阶段

    独立于机器特点,独立于各个数据库管理系统产品的概念模式(E-R图)。

    3.逻辑设计阶段

    首先将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式。

    然后根据用户处理的需求、安全性的考虑,在基本表的基础上,再建立必要的视图,形成数据的外模式。

    4.物理设计阶段

    根据数据库管理系统特点和处理的需要,进行存储的安排,建立索引,形成数据库内模式。


    7.1.4 数据库设计过程中的各级模式

    ps:

    外模式:从应用程序的角度来看,数据库给其提供的是什么表,通常可以用视图来展示。

    模式:最终的这个表在数据库里面是怎样来存的。

    内模式:数据表在计算机硬盘里面怎么来存的。

     


     7.2 需求分析

    ps:

    核心思想:如何准确地、充分地了解到甲方的需求。

    7.2.1 需求分析的任务

    1. 详细调查现实世界要处理的对象、实体(组织、部门、企业、个人、领导、不同的角色等)。
    2. 充分了解原系统(手工系统或计算机系统)工作概况。
    3. 明确用户的需求。
    4. 确定新系统的功能,新系统必须充分考虑今后可能的扩充和改变。

    ps:

    2.如果是对原来的系统进行更新、重建,那么需要了解原来的系统有哪些数据,结构是什么样的;如果原来是纯手工的业务流程,或者是纯手工的数据存储的方式,那么也需要了解它的工作过程。当然还需要知道原有的系统有哪些不足的地方,还要与甲方进行沟通等。

    【说明】需求分析调查的重点是 “数据”“处理” ,获得用户对数据库在信息、处理、安全性与完整性的要求。 


    7.2.2 需求分析的方法

    需求分析的目的:调查清楚用户的实际需求 并进行初步分析,最终与用户达成共识。

    调查用户需求的步骤:

    1. 调查组织机构情况。
    2. 调查各部门的业务活动情况。
    3. 协助用户明确对新系统的各种要求,包括信息要求、处理要求、安全性与完整性要求。
    4. 确定新系统的边界。

    ps:

    1.可能涉及到数据的流向。 

    4.就是说各个表、模块 之间应该怎么去做,就可以开始设计数据库了。

    常用的调查方法:

    1. 跟班作业。通过亲身参加业务工作了解业务活动的情况(这个方法的缺点就是太费时间了)。
    2. 开调研会。通过与用户座谈来了解业务活动情况及用户需求。
    3. 请专人介绍。
    4. 询问:对某些调查中的问题,可以找专人询问。
    5. 设计调查表请用户填写。调查表设计合理,则很有效。
    6. 查阅记录。查阅于原系统有关的数据记录。 

    结构化分析方法(简称SA方法),SA方法从最上层的 系统组织机构入手,采用自顶向下、逐层分解的方式分析系统。 


    7.2.3 数据字典

    ps:

    数据字典就相当于新华字典一样,只不过新华字典解释的是每一个汉字,而数据字典解释的是每一个数据(每一个数据具有哪些属性,应该进行哪些操作),我们再建数据库的时候就要对照着数据字典,把每一个数据项和每一个要求都要给它实现。

    数据字典 是关于数据库中数据的描述,即元数据,不是数据本身。数据字典是在需求分析阶段建立,是进行详细的数据收集数据分析所获得的,并在数据库设计过程中不断修改、充实、完善

    ps:

    元数据:不是数据本身,并不是说,假如 存的是张三,学号是001,并不是存这些信息;而是描述出学生的学号应该是三位的数字,最多是999,最少是001开始......元数据就是对它的属性的一个描述。

    数据字典的内容:数据项、数据结构、数据流、数据存储、处理过程。

    ps:

    数据结构:这个数据的结构是什么样的,就是一个纯数字,还是 数字+字符 构成的。

    数据流:数据的流向,是从部门A流向部门B......

    数据存储:在计算机当中,是以二维表的形式存储,还是以B+树这样的数据结构来存储,还是以链式结构来存储等。

    处理过程:在数据库当中需要对哪些数据进行处理,查询、删除等,这些处理可以被哪些用户所拥有。

    当我们把数据字典设计好了以后,就相当于把一座大楼的设计图设计好了,剩下的就是按照设计图来建造大楼了,只不过在建的过程中有哪些地方需要更新的,有哪些地方需要修改的 等微小的地方进行修改就可以了。数据字典 就相当于 把整个数据库给规划出来了。

    (1)数据项:数据项是不可再分的数据单位

    数据项描述 = { 数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系,数据项之间的联系 }

    ps:

    举个例子:

    设置学生的学号(Student表)={Sno,记录学生的学号,在别的表里面他就叫 “学号”,字符型,3,001~999,001表示学号是001,SC(Sno,Cno)中外码的逻辑关系,函数依赖}。

    【说明】

    1. “取值范围”、“与其他数据项的逻辑关系”定义了完整性约束条件(用户自定义、参照完整性),是设计数据检验功能的依据。
    2. 可以用关系规范化理论为指导,用数据依赖的 概念分析 和 表示 数据项之间的联系。

     

    (2)数据结构:数据结构反映了数据之间的组合关系。

    数据结构描述={ 数据结构名,含义说明,组成:{数据项或数据结构 } }

    【说明】

    一个数据结构可以由若干个数据项组成,也可由若干个数据结构组成,或由若干个数据项和数据结构混合组成。

    (3)数据流:是数据结构在系统内传输的路径。

    ps:

    数据项是最小不可再分的单位,由数据项又构成了数据结构,那其实在业务流程里面,通常传输的不是单个数据,而是数据结构。

    比如说 在学生的管理系统里面,想要给学生录入考试成绩,那传递给系统的需要 学生的学号,学生的选课等。那么{学生的学号,学生的选课}就是数据结构,数据结构就是由这两个数据项构成。

    比如说 仓库管理员存一个物品,那么会添一个入库单,那么就可以把这个入库单看成数据结构,这个入库单上有好多信息(名字、单价、材质等),这个数据结构是由多个数据向来构成的。

    数据流描述={ 数据流名,说明,数据流来源,数据流去向,组成{数据结构},平均流量,高峰期流量 } 

    ps:

    比如说 查学生的期末考试成绩。

    在数据库里面,可以从学生的选课表里面,抽取出来,反馈给用户。

    {成绩,用于显示学生XX课程的期末考试成绩,SC表,视图/应用程序,学生学号、学生姓名、学生成绩,平均有多少人次查询,高峰期有多少人次查询 } 。 

    【说明】

    1. 数据流来源:说明该数据流来在哪个过程。
    2. 数据流去向:说明该数据流将到哪个过程去。
    3. 平均流量:在单位时间(每天、每周、每月等)里的传输次数。
    4. 高峰期流量:在高峰时期的数据流量。

    (4)数据存储:数据结构停留或保存的地方,也是数据流的来源和去向之一。

    数据存储描述={ 数据存储名,说明,编号,输入的数据流,输出的数据流,组成:{数据结构},数据量,存取频度,存取方式 } 

    【说明】

    1. 存取频度:每小时、每天或每周的存取次数,每次存取的数据量等信息。
    2. 存取方法:批处理/联机处理;检索/更新;顺序检索/随机检索。
    3. 输入的数据流:数据来源。
    4. 输出的数据流:数据去向。 

    (5)处理过程:处理过程的具体处理逻辑 一般用判定表或判定树来描述。数据字典中只需要描述 处理过程的说明性信息。

    ps:

    判定表:一张表;判定树:一棵树;

    举个例子:

    处理过程描述={处理过程名,说明,输入:{数据流},输出:{数据流},处理{简要说明} }

    【说明】“简要说明”说明该处理过程的功能 及处理要求。其中功能是指该处理过程用来作什么。处理要求是指处理频度要求,如单位时间里处理多少事务、多少数据量、响应时间要求等。 

     

    需求分析小结 

    (1)需求分析和分析 作为数据库设计的第一阶段 是十分重要的。

    (2)第一阶段收集的基础数据(用数据字典来表达)是下一步进行概念设计的基础。

    (3)强调两点

    1. 设计人员应充分考虑到 可能的扩充和改变,使设计易于更改,系统易于扩充。
    2. 必须强调用户的参与。


    7.3 概念结构设计

    ps:

    我们知道了需求分析,了解了需求以后,就需要数据库的设计人员 把现实生活当中的需求 抽象成我们的E-R图,这样我们拿着E-R图就可以非常好的捋顺各个业务、各个实体、各个数据整体之间的一个关系了。

    7.3.1 概念模型

    概念结构设计 是将需求分析 得到的用户需求 抽象为信息结构(即概念模型)的过程。

    ps:

    比如说 E-R图,比如说 UML。

    概念模型的特点:

    1. 能真实、充分的反映世界,是现实世界的一个真实模型。
    2. 易于理解,可以用它和不熟悉计算机的用户交换意见(比如说 把E-R图拿给甲方的客户经理或部门主管看一下 这个部门的数据是不是像E-R图所描述的那样)。
    3. 易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充。
    4. 易于向关系、网状、层次的各种数据模型转换。 

    概念模型的描述工具:E-R图。 


    7.3.2 E-R模型

    E-R模型 是用E-R图 来描述现实世界的概念模型。第一章 1.2.2节已经简单介绍实体、属性、实体之间的联系等。

    1.实体之间的联系

    (1)两个实体型之间的联系

    一对一联系(1:1)、一对多联系(1:n)、多对多联系(m:n)。 

    ①一对一联系(1:1)

    如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1:1。

    【例】学校里一个班级只有一个正班长,而一个班长只在一个班中任职,则班级与班长之间具有一对一联系。

    ②一对多联系(1:n)

    如果对于实体集A中的每一个实体,实体集B中有n个实体(n>=0)与之联系;反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多联系,记为1:n。

    ps:

    记得多怕搞晕了吧,看我一个图解决此类问题:

    A是1,B是n;若a:b=1:n并且当b=1时,则a=1/n。而1/n∈整数,至多为1。

    【例】一个班级中由若干个学生,而每个学生只在一个班级中学习 ,则班级与学生之间局有一对多联系。

    ③多对多联系

    如果对于实体集A中的每一个实体,实体集B中有n个实体(n>=0)与之联系;反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m>=0)与之联系,则实体集A与实体集B具有多对多联系,记为m:n。

    ps:

    这个没啥数学计算规律的,就直接记吧。

    把A看做m,把B看做n;然后对于A中的每一个实体,就把A(m)看成1,B中有n个实体与之对应;相反,对于B中的每一个实体,就把B(n)看做1,A中有m个实体与之对应;然后A与B的关系是m:n,这个是记m与n的对应关系。

    但是一般来说,不会考这么细,那么就可以直接这样记更好:

     A与B、B与A之间都是一对多联系。

    【例】一门课程同时有若干个学生选修,而一个学生可以同时选修多门课程,则课程与学生具有多对多联系。 

    两个实体之间的三类联系:

    (2)两个以上的实体型之间的联系

    一般地,两个以上的实体之间也存在着一对一、一对多、多对多联系。

    【例】对于课程、教师、参考书3个实体型,如果一门课程可以由若干个教师讲授,使用若干本参考书,而每一个教师只讲授一门课程,每一本参考书只供一门课程使用,则课程与教师、参考书之间的联系是一对多的。

    【例】有三个实体型:供应商、项目、零件,一个供应商可以供给多个项目多个零件,而每个项目可以使用多个供应商供应的零件,每种零件可由不同供应商供给,由此看出供应商、项目、零件三者之间是多对多的联系。

    三个实体型之间的联系示例

    (3)单个实体型内的联系

    同一个实体集内的各实体之间 也可以存在一对一、一对多、多对多的联系。

    【例】职工实体型内部 具有领导与被领导的联系,即某一职工(干部)“领导”若干名职工,而一个职工仅被另外一个职工直接领导,因此这是一对多的联系。

     

    ps:

    联系的度:参与联系的实体型的数目。

    2个实体型之间的联系度为2,也称二元联系;

    3个实体型之间的联系度为3,也称三元联系;

    N个实体型之间的联系度为N,也称N元联系。

    2.E-R图

    E-R图提供了表示实体型、属性和联系的方法。

    实体型:用矩形表示,矩形框内写明实体名。

    属性:用椭圆表示,并用无向边将其与相应的实体型连接起来。 

    联系:用菱形来表示,菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型(1:1,1:n,m:n)。联系也可以具有属性。

    【例】学生实体具有学号、姓名、性别、出生年份、系、入学时间等属性,用E-R图如下。

    【例】如果用“供应量”来描述联系“供应”的属性,表示某供应商供应了 多少数量的零件给某个项目,那么这三个实体及其之间联系的E-R图如下。 

     

    3.一个实例

    下面用E-R图表示某个工厂物资管理的概念模型。

    (1)物资管理涉及的实体有:

    仓库:属性有 仓库号、面积、电话号码;

    零件:属性有 零件号、名称、规格、单价、描述;

    供应商:属性有 供应商号、姓名、地址、电话号码、账号;

    项目:属性有 项目号、预算、开工日期;

    职工:属性有 职工号、姓名、年龄、职称。

    (2)这些实体之间的联系如下:

    仓库和零件具有多对多的联系。一个仓库可以存放多种零件,一个零件可以存放在多个仓库中,用库存量来表示某种零件在某个仓库中的数量。

    仓库和职工之间是一对多的联系。一个仓库有多个职工当仓库保管员,一个职工只能在一个仓库工作。

    职工之间具有领导与被领导关系。即仓库主任领导若干保管员,因此职工实体型具有一对多的联系。

    供应商、项目和零件三者具有多对多的联系。即一个供应商可以供给若干项目多种零件,每个项目可以使用不同供应商供应的零件,每种零件可由不同供应商供给。

    (3)E-R图 


    *7.3.3 扩展的E-R图

    E-R模型得到了广泛的应用,人们在基本E-R模型的基础上进行了某些方面的扩展,使其表示现实的能力更强。

    1.ISA联系

    ps:

    在 “一对一联系”“一对多联系”“多对多联系”之后,又增加了“ISA联系”。

    用E-R方法构建一个项目的模型时,经常会遇到某些实体型是某个实体型的子集。例如,研究生和本科生是学生的子类,学生是父类。这种 父类-子类 的联系称为ISA联系,表示“is a”的语义,如下图,研究生 is a 学生,本科生 is a 学生。ISA联系用三角形来表示。

     

    【说明】ISA联系描述了一个实体型中实体的一种分类方法其一个重要的性质是子类继承了父类的所有属性,同时子类也可有自己的属性。

    ps:

    研究生除了有学生的所有属性,还有自己的属性——导师姓名、研究方向。

    (1)分类属性

    根据分类属性的值 把父实体型中的实体 分派到子实体中。

    【例】下图中在ISA联系符号三角形的右边加一个分类属性“学生类别”,说明一个学生是研究生还是本科生由“学生类别”这个属性决定。

     (2)不相交约束 与 可重叠约束

    不相交约束:父类中的一个实体 不能同时属于 多个子类中的实体集,即一个父类中的实体最多属于一个子类实体集。用ISA联系三角形符号内加一个“X”来表示。

    ps:

    比如说 上述中 学生这个父实体分为了研究生和本科生这两个子实体,而一个学生不可能既是研究生又是本科生;只能要不是研究生,要不是本科生;这种情况叫做 不相交约束。

    可重叠约束:父类中的一个实体 能同时属于多个子类中的实体集,三角形符号中没有“X”来表示。

    (3)完备性约束

    完备性约束:描述父类中一个实体是否必须是某一个子类中的实体。如果是,则为是完全特化。否则为部分特化。

    ps:

    也就是说,是不是学生这个实体 必须要分 研究生、必须要分本科生,还是说,这个实体不属于研究生和本科生当中的任何一个。如果必须要分研究生和本科生,没有其他的选项了,那么就叫做完全特化,用双线来连接;否则就叫做部分特化(也就是说,父类中只有一部分符合下面的子类),用单线来连接。

    完全特化用双线来连接,部分特化用单线来连接。

    2.基数约束

    是对实体之间一对一、一对多和多对多联系的细化。约束用一数对min..max表示,0<=min<=max。

    ps:

    这个“多”到底是多多少,我们并没有给它细化,那么在设计数据库的时候,对其完备性约束会缺失(到底是最多不会超过30个,还是多少)。

    而基数函数就是对这个“多”来进行细化。

    【例】0..1、1..3、1..*(*代表无穷大) 

    min=1的约束叫做强制参与约束,即 被施加基数约束的实体型中的每个实体都要参与联系。

    min=0的约束叫做非强制参与约束,即 被施加基数约束的实体型中的可以出现在联系中,也可以不出现在联系中。

     【例】学生和学生证联系中,一个学生必须拥有一本学生证,一本学生证只能属于一个学生,因此都是1..1。

    【例】学生和课程联系中,假设学生实体型的基数约束是20..30,课程的一个合理的基数约束是0..*。

    ps:

    学生旁边的0..*是对课程的约束;课程旁边的20..30是对学生的约束。

    【例】班级和学生联系中,一个学生必须参加一个班,并只能参加一个班,因此1..1,一个班级最少30个学生,最多40个学生,因此是30..40。

    3.Part-of联系

    即部分联系,表明某个实体型是另外一个实体型的一部分。

    【例】汽车和轮子是两个实体型,汽车是轮子的一部分,即Part-of实体型。

    ps:

    需要区分的是,ISA是属于实体与实体都属于某一类(如研究生与本科生都属于学生);而Part-of是组成的关系。如果说,汽车又分为吉普车、商用车等,那么就是ISA的联系。

     

    Part-of联系的分类:

    (1)非独占的Part-of联系:整体实体如果被破坏,部分实体仍然可以独立存在。非独占的Part-of联系可以通过基数约束来表达。

    【例】汽车实体型和轮子实体型之间,汽车车体被毁坏了,轮子还存在,可以拆下来独立使用。具体如下图:

    (2)独占的Part-of联系:实体如果被破坏,部分实体不能存在。在E-R图中用弱实体类型和识别联系来表示独占联系。

    如果一个实体型的存在依赖于其他实体型的存在,则这个实体型叫做弱实体型,否则叫做强实体型。

    判断方法:如果不能从一个实体型属性中找出可以作为的属性,这个实体型是弱实体型。

    在E-R图中用双矩形表示弱实体型,用双菱形表示识别联系。 

    【例】用户从银行贷款购房,这笔贷款一次贷出,分期归还。还款就是一个弱实体,因为它只有还款序号、日期和金额三个属性,第一笔还款的序号为1,第二笔还款的序号为2,第三笔还款的序号为3,这些属性的组合都不能作为还款的码。还款的存在必须依赖于贷款实体。

    【例】房间和楼房的联系。每座楼都有唯一的编号或名称,每个房间都有编号,如果房间号不包含楼号,则房间号不能作为码,所以房间是个弱实体。


    *7.3.4 UML 

    UML是统一建模语言或标准建模语言,是始于1997年一个QMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括需求分析到规格,到构造和配置。也可以作为表示E-R图的一种方法。

    UML表示E-R图的说明:

    1. 实体型:用类表示,矩形框上部写实体名,下面列出属性名。
    2. 实体的码:在类图中属性后面加“PK”。
    3. 联系:上面用类图之间的“关联”来表示(E-R图上面的菱形),下面要写它们的基数约束。

    【例】学生、课程它们之间的联系以及基数约束的E-R图用UML表示。

     

    ps:

    当然平常还是用E-R图更多一些。


    7.3.5 概念结构设计

    概念设计的第一步 就是对需求分析阶段 收集到的数据 进行分类、组织,确定实体、实体属性、实体间联系类型,形成E-R图。

    1.实体与属性的划分规则

    为了简化E-R图的处置,现实世界的事物能作为属性对待的,尽量作为属性对待。

    两条准则:

    (1)作为属性,不能再具有需要描述的性质。属性必须是不可分的数据项,不能包含其他属性(要满足1NF)。

    (2)属性不能与其他实体具有联系,即E-R图中所表现的联系是实体之间的联系。 

    【例】职工是一个实体,职工号、姓名、年龄是职工的属性。

    职工如果没有与工资、福利挂钩(支撑没有再分为工资、福利两个属性),根据准则(1)可以作为职工实体的属性。如果不同的职称有不同的工资、住房标准和不同的附加福利,则职称作为一个实体更恰当。

     

    【例】在医院中,一个病人只能住在一个病房,病房号可以作为病人实体的一个属性;如果病房还要与医生实体发生联系,即一个医生负责几个病房的病人的医疗工作,根据准则(2)病房应作为一个实体。

     【例】如果一种货物只存放在一个仓库,那么就可以把存放货物的仓库的仓库号 作为描述货物存放地点的属性。

    如果一种货物可以存放在多个仓库中,或者仓库本身又用面积作为属性,或者仓库与职工发生管理上的联系,那么就应该把仓库作为一个实体。

    【例】销售管理子系统E-R图的设计。

    该子系统的主要功能是:

    处理顾客与销售员的订单;工厂是根据货安排生产的;交出货物同时开出发票;收到顾客付款后,根据发票存根和信贷情况 进行应收款处理。

    先进行E-R图如下:

     参照需求分析和数据字典中的详尽描述,遵循前面给出的两个准则,进行如下调整:

    1. 订单与订单两个实体之间是1:n的联系。每张订单有订单号、若干头信息和订单细节组成。订单细节又有订货的零件号、数量等来描述。按照准则(2),订单就不能做订单的属性处理 而应该上升为实体。一张订单可以定若干实体。
    2. 原订单和产品之间的联系 实际上是 订单细节和产品的联系。每条订货细节对应一个产品描述,订单处理时从中获得当前单价、产品重量等信息。
    3. 增加一个“折扣规则”实体。工厂对大宗订货给予优惠。每种产品都规定了不同订货数量的折扣,应该增加一个“折扣规则”实体存放这些信息,而不应该把它们放在产品实体中。 

     最后得到的销售管理子系统E-R图如下 :

    对每个实体定义的属性如下:

    顾客:{ 顾客号,顾客名,地址,电话,信贷情况,账目余额 }

    订单:{ 订单号,顾客号,订货项数,订货日期,交货日期,工种号,生产地点 }

    订单细则:{ 订单号,细则号,零件号,订货数,金额 }

    应收账款:{ 顾客号,订单号,发票号,应收金额,支付日期,支付金额,当前余额,货款限额 }

    产品:{ 产品号,产品名,单价,重量 }

    折扣规则:{ 产品号,订货数量,折扣 } 

    2.E-R图的集成

    E-R图的集成一般需要分两步:

    第一步:合并。解决各分E-R图之间的冲突,将分E-R图合并起来生成初步E-R图。

    ps:

    合并的原则 以相同的实体为纽带,将其合并起来。

    第二步:修改和重构。消除不必要的冗余,生成基本E-R图。

    ps:

    可能有重复的,也可能有冲突的(比如在这个关系中叫做学生,在那个关系叫做Student之类的)等等。

     

     (1)合并E-R图,生成初步E-R图

    各个局部应用所面向的问题不同,各个子系统的E-R图之间必定会存在许多不一致的地方,称之为冲突。

    子系统E-R图之间的冲突主要有三类:属性冲突、命名冲突、结构冲突。

    ①属性冲突

    属性域冲突,即属性值的类型、取值范围或取值集合不同。

    ps:

    例如:零件号,有的部门把它定义为整数,有的部门把它定义成字符型;

    年龄,有些部门以出生日期形式表示职工的年龄,而另一部门用整数表示职工的年龄。

    属性取值单位冲突。

    ps:

    例如:零件的重量有的以公斤为单位,有的以斤为单位,有的以克为单位。

     ②命名冲突

    同名异义,即不同意义的对象 在不同的局部应用中具有相同的名字。

    异名同义(一义多名),即同一意义的对象 在不同的局部应用中具有不同的名字。

    ps:

    比如说 在整个军校管理系统里面,可能有“班长”这个实体名,而这个“班长”可能是1班的班长,也可能是 炊事班的班长。

    比如说 对科研项目,不同的部门叫法不一样,财务科称为项目,科研处称为课题,生产管理处称为工程。

     命名冲突,可能发生在实体、联系一级上;也可能发生在属性一级上;通过讨论、协商等行政手段加以解决。

     ③结构冲突

    同一对象在不同应用中具有不同的抽象(就是用不同的图例来表示的)。

    ps:

    例如,职工在某一局部应用中被当作实体,而在另一局部应用中被当做属性。职工在一座大厂里面被当作实体,但是如果对于大厂这个实体,可能就被当成大厂的属性了。

    解决方法:把属性变换为实体 或 把实体变换为属性,使同一对象具有相同的抽象(但是如果把 属性变换为实体 可能会更可靠点) 。

    同一实体在不同子系统的E-R图中包含的属性个数和属性排列次序不完全相同。

    ps:

    比如说 都是“学生”这一个属性,在宿舍关系的系统中学生属性可能有(床铺号,宿舍号),而在课程管理的系统中可能有(学号,课号,成绩),在学籍管理的系统中可能有(姓名,学籍,家庭住址)等。

    解决方法:该实体的属性各取子系统的E-R图中属性的并集,再适当调整属性的次序。

    ps:

    学生(床铺号,宿舍号,学号,课号,成绩,姓名,学籍,家庭住址) 

    实体间的联系 在不同的E-R图中为不同的类型。

    ps:

    实体E1与E2在一个E-R图中是多对多联系,在另一个E-R图中是一对多联系。

    解决方法:是根据应用的语义对实体联系的类型进行综合或调整。

    ps:

    其实吧,一对一,一对多,多对多是包含的关系,然后即可以往上面靠的设计。 

    【例】零件与产品之间存在多对多的联系“构成”。产品、零件和供应商三者之间还存在多对多的联系“供应”。 

    (2)消除不必要的冗余,设计基本E-R图

    所谓冗余的数据是指 可由基本数据导出的数据,冗余的联系是指 可由其他联系导出的联系。

    ps:

    所谓冗余 简单的来说就是指 可以通到其他的关系或数据来导出这个关系或数据,那么就把导出来的关系或数据叫做冗余。

    消除冗余主要采用分析方法,即以数据字典和数据流为依据,根据数据字典中关于数据项之间逻辑关系的说明来消除冗余。

    消除冗余后的初步E-R图,称为基本E-R图。

    【例】如下图,Q3=Q1×Q2,Q4=∑Q5 。所以Q3和Q4是冗余数据,可以消去。并且由于Q3消去,产品与材料间m:n也应消去(可以从 产品-零件-材料 方面导出)。

     【说明】并不是所有的冗余数据与冗余联系都必须消除,有时为了提高效率,不得不以冗余信息为代价。

    若果每次查询都要查询每个仓库中 此种材料的库存,在求和,就使得查询效率低下。因此应保留Q4,同时把Q4=∑Q5定义为Q4的完整性约束条件。每当Q5修改后,触发完整性检查。

    用规范化理论来消除冗余:

    ①确定分E-R图实体间的数据依赖。

    实体之间一对一、一对多、多对多的联系可以用实体码之间的函数依赖来表示。

    【例】如下图:

    部门和职工之间 一对多的联系可表示为:职工号——>部门号。

    职工和产品之间 多对多的联系可表示为:(职工号,产品号)——>工作天数等。

    于是有函数依赖集Fl。

    ②求Fl的最小覆盖Gl,差集为D=Fl-Gl。

    逐一考察D中的函数依赖,确定是否是冗余的联系,若是,就把它去掉。

    注意下面两个问题:

    1. 冗余的联系一定在D中,而D中的联系不一定是冗余的;
    2. 当实体之间存在多种联系时,要将实体之间的联系在形式上加以区分。

    ps:

    某工厂管理信息系统的视图集成:

     【注意】

    集成过程中需要解决以下问题:

    1. 异名同义,项目和产品含义相同。
    2. 取消冗余联系。


     7.4 逻辑结构设计

    ps:

    总结的来说,概念模式设计是在教我们怎么画出E-R图来;下面我们再来介绍,当E-R图合成以后,我们根据E-R图在数据库当中建立一张实际的二维表,这个就是逻辑结构设计。

    逻辑结构设计的任务:把概念结构设计好的基本E-R图转换为与选用数据库管理系统产品所支持的数据模型相符合的逻辑结构。 


    7.4.1 E-R图向关系模式的转换

    E-R图由实体型(矩形)、实体的属性(椭圆)和实体型之间的联系(菱形)三个要素组成。

    E-R图像关系模型的转换就是将实体型、实体的属和实体型之间的联系转化为关系模式。

    1.转化规则:一个实体型转换为一个关系模式。关系的属性(列)为实体的属性,关系的码为实体的码。

    2.实体之间的联系有以下不同情况

    (1)一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。

    ps:

    即既可以把联系单独转化为一张表,也可以加入到另外一张表。 

    ①转换为一个独立的关系模式(新建一张二维表,可能会冗余)

    关系的属性:与该联系相连的各实体的码及联系本身的属性。

    关系的候选码:每个实体的码均是该关系的候选码。 

    ②与某一端实体对应的关系模式合并

    合并后关系的属性:加入对应关系的码和联系本身的属性。

    合并后关系的码:不变。

     

    (2)一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。

    ①转换为一个独立的关系模式

    关系的属性:与该联系相连的各实体的码及联系本身的属性。

    关系的候选码:n端实体的码。

     ②与n端对应的关系模式合并

    合并后关系的属性:在n端关系中加入1端关系的码和联系本身的属性。

    合并后的码:不变。

    该方法可以减少系统中的关系个数,一般情况下更倾向于采用这种方法。 

     

    (3)一个m:n联系 转换为一个关系模式

    关系的属性:与该联系相连的各实体的码及联系本身的属性。

    关系的候选码:各实体码的组合。

     【例】“选修”联系是一个m:n联系,可以将它转换为如下关系模式,其中学号与课程号为关系的组合码:

    选修(学号,课程号,成绩)

     (4)三个或三个以上实体间的一个多元联系(多对多联系)转换为一个关系模式。

    关系的属性:与该联系相连的各实体的码及联系本身的属性。

    关系的候选码:各实体码的组合。

    (5)具有相同码的关系模式可合并。

    目的:减少系统中的关系个数。

    合并方法:

    第一步:将其中一个关系模式的全部属性 全部加入到另一个关系模式当中。

    第二步:去掉其中的同义属性(可能同名也可能不同名)。

    第三步:适当调整属性的次序。

     


    7.4.2 数据模型的优化

    数据库逻辑设计的结果不是唯一的。为了进一步提高数据库应用系统的性能,还应该适当地修改、调整数据模型的结构,这就是数据模型的优化。

    优化数据模型的方法:

    (1)确定数据依赖。按需求分析阶段所得到的语义,分别写出每个关系模式内部个属性值间的数据依赖以及不同关系模式属性值间的数据依赖。

    (2)对于各个关系模式之间的数据依赖进行极小化处理,消除数据冗余的联系。

    (3)按照数据依赖的理论 对关系模式进行分析,考察是否存在部分函数依赖、传递函数依赖、多值函数依赖等,确定各关系模式分别属于第几范式。

    (4)按照需求分析阶段得到的各种应用对数据处理的要求,分析对于这样的应用环境这些模式是否合适,确定是否要对它们进行合并或分解。

    【说明】并不是规范化程度越高的关系就越优。

    例如当查询经常涉及两个或多个关系模式的属性时,系统必须经常的进行连接运算,代价相当高,因此在这种情况下,第二范式甚至是第一范式也许是合适的。 

    (5)对关系模式进行必要分解,提高数据操作效率和存储空间的利用率。

    常见分解方法有水平分解和垂直分解。

    ①水平(行)分解:把(基本)关系的元组分为若干子集合,定义每个子集合为一个子关系。

    分解方法:

    一是对符合80/20的,把经常使用的数据(约20%)水平分解出来,形成一个子关系。

    二是使每个事物存取的数据对应一个子关系。

    ②垂直分解:把关系模式R的属性分解为若干子集合,形成若干子关系模式(第6章讲到过)。

    分解原则:经常在一起使用的属性从R中分解出来形成一个子关系模式。

    分解优点:可以提高某些事务的效率。

    分解缺点:可能使另一些事务不得不执行连接操作,降低了效率。

    适用范围:取决于分解后R上的所有事务的总效率是否得到了提高。

    分解方法:

    简单情况直观分解。

    复杂情况用第6章中的模式分解算法。

    垂直分解必须不损失 关系模式的语义(保持无损连接性和保持函数依赖)。


    7.4.3 设计用户子模式

    ps:

    用户子模式指的是 数据库要给应用程序提供数据(各种管理系统就是不同的应用程序),对应的就是不同的用户,这些用户要访问数据库需要设立一个访问数据库的接口,通常使用视图、查询等等来建立对接。

    定义数据库模式 主要是从 系统的时间效率、空间效率、易维护等角度出发。

    定义用户外模式时应该更注重考虑用户的习惯与方便。包括三个方面:

    (1)使用更符合用户习惯的别名

    合并各分E-R图 曾做了消除命名冲突的工作,以使数据库系统中同一关系和属性具有唯一的名字。用视图机制可以在设计用户视图是重新定义某些属性名,使其与用户习惯一致,方便使用。

    (2)针对不同级别的用户 定义不同的视图,以保证系统的安全性。

    假设有关系模式产品(产品号,产品名,规格,单价,生产车间,生产负责人,产品成本,产品合格率,质量等级),可以在产品关系中建立两个视图:

    为一般顾客建立视图:

    产品1(产品号,产品名,规格,单价)

    为产品销售部门建立视图:

    产品2(产品号,产品名,规格,单价,车间,生产负责人)

    (3)简化用户对系统的使用

    如果某些局部应用中 经常要使用某些很复杂的查询,为了方便客户,可以将这些复杂查询定义为视图。


    7.5 物理结构设计

    ps:

    物理结构设计 说白了就是 把创建出来的数据库选择一种合适的、合理的存储方式,读取的方式。 

     1.什么是数据库的物理设计

    数据库在物理设备上的 存储结构 与 存取方法 称为数据库的物理结构,它依赖于选定的数据库管理系统(不同的数据库管理系统有不同的要求)

    为一个给定的逻辑数据模型 选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计。

    2.数据库物理设计的步骤

    (1)确定数据库的物理结构

    在关系数据库中主要存取方法和存储结构(顺序存取、链式存取等)。

    (2)对物理结构进行评价

    评价的重点是时间和空间效率。若评价结果满足原设计要求,则可进入到物理实施阶段;否则,就需要重新设计或修改物理结构,有时甚至要返回逻辑设计阶段修改数据模型。


    7.5.1 数据库物理设计的内容和方法

    1.设计物理数据库结构的准备工作

    (1)充分了解应用环境,详细分析要运行的事务以获得选择物理数据库设计所需参数。

    (2)充分了解所用关系型数据库管理系统的内部特征(用的是哪些类型的数据库),特别是系统提供的存取方法和存储结构。 

    2.选择物理数据库设计所需参数

    (1)对于数据库查询事务,需要得到以下信息:

    ①查询的关系。

    ②查询条件所涉及的属性。

    ③连接条件所涉及的属性。

    ④查询的投影属性。

    (2)对于数据更新事务,需要得到以下信息:

    ①被更新的关系。

    ②每个关系上的更新操作条件所涉及的属性。

    ③修改操作要改变的属性值。

    (3)每个事务(增删改查)在各关系上运行的频率和性能要求。

    3.关系数据库物理设计的内容

    为关系模式选择存取方法(建立存取路径)以及设计关系、索引等数据库文件的物理存储结构。

    ps:

    存取方法:怎么读取。

    物理存储结构:怎么放。


    7.5.2 关系模式存取方法选择

    数据库系统是多用户共享的系统,对同一个关系要建立多条存取路径才能满足多用户的多种应用需求。

    物理结构设计的任务之一是 根据关系数据库系统 支持的存取方法 确定选择哪些存取方法。

    数据库系统常用的存取方法:

    1. B+树索引存取方法。
    2. Hash索引存取方法。
    3. 聚簇存取方法。 

     (1)B+树存取方法的选择

    选择索引存取方法 实际上就是根据应用要求确定对哪些属性列建立索引、对哪些属性列建立组合索引、对哪些索引要求设计唯一索引等。

    ps:

    索引:相当于一本书的目录,可以一下就找到对应存储的位置。如果没有索引的话,计算机就需要全盘检索。

     选择索引存取方法的一般规则:

    1. 如果一个(或一组)属性经常在查询条件中出现,则考虑在这个(或这组)属性上建立索引(或组合索引)。
    2. 如果一个属性经常作为最大值或最小值等聚焦函数的参数,则考虑在这个属性上建立索引(因为作为索引的前提会进行排序)。
    3. 如果一个(或一组)属性经常在连接操作的连接条件中出现,则考虑在这个(或这组)属性上建立索引。

    (2)Hash存取方法的选择

    选择Hash存取方法的规则:如果一个关系的属性主要出现在等值连接条件中或主要出现在等值比较选择条件中,而且满足下列两个条件之一:

    1. 该关系的大小可知,而且不变。
    2. 该关系的大小动态改变,但所选用的数据库管理系统提供了动态Hash存取方法。 

    (3)聚簇存取方法的选择

    聚簇是为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组 集中存放在连续的物理块中称为聚簇。

    【说明】

    1. 聚簇对于某些类型的查询,可以提高查询效率。
    2. 在一个基本表上最多只能建立一个聚簇索引。
    3. 聚簇索引的适用条件,一是很少对基本表进行增删操作,二是很少对其中的变长列进行修改操作。

     

     【例】假设学生关系按所在系建有索引,现在要查询信息系的所有学生名单。

    信息系的500名学生分布在500个不同的物理块上时,至少要执行500次1/0操作。如果将同一系的学生 集中存放,则每读一个物理块可得到多个满足查询条件的元组,从而显著的减少了访问磁盘的次数。

     

    选择聚簇存取方法:

    (1)设计候选聚簇

    1. 常在一起进行连接操作的关系可以建立组合聚簇。
    2. 如果一个关系的一组属性 经常出现在相等比较条件中,则该单个关系可建立聚簇。
    3. 如果一个关系的一个(或一组)属性上的重复率较高,则此单个关系可建立聚簇。

    (2)检查候选聚簇中的关系,取消其中不必要的关系

    1. 从聚簇中删除经常进行全表扫描的关系。
    2. 从聚簇中删除更新操作 远多于连接操作的关系。
    3. 从聚簇中删除重复出现的关系。当一个关系同时加入多个聚簇时,必须从这多个聚簇方案(包括不建立聚簇) 中选择一个较优的,即在这个聚簇上运行各种事务的总代价最小。

     


    7.5.3 确定数据库的存储位置

    确定数据库结构主要指 确定数据库的存放位置和存储结构。

    包括:确定关系、索引、聚簇、日志、备份等的存储安排和存储结构,确定系统配置等。

    确定数据的存放位置和存储结构 要综合考虑存取时间、存储空间利用率和维护代价3个方面的因素。 

    1.确定数据的存放位置

    根据应用情况 将易变部分与稳定部分分开存放、经常存取部分与存取频率较低部分分开存放。

    【例】可以将比较大的表分别放在两个磁盘上,以加快存取进度,这在多用户环境下特别有效。

    可以将日志文件与数据库对象(表、索引等)放在不同的磁盘上以改进系统的性能。

     2.确定系统配置

    数据库管理系统一般都提供了一些系统配置变量和存储分配参数,初始情况下,系统都为这些变量赋予了合理的缺省值,在进行物理设计时需要根据应用环境来确定这些参数值,使系统性能最佳。


    7.5.4 评价物理结构

    对数据库物理结构设计过程中产生的多种方案进行评价,从中选择一个较优的方案作为数据库的物理结构。

    评价方法主要是定量估算各种方案的存储空间、存取时间、维护代价,对估算结果进行权衡、比较,选择出一个较优的合理的物理结构。


    7.6 数据库的实施和维护 

    7.6.1 数据的载入和应用程序的调试

    1.数据的载入

    数据库建立好以后,就可以向数据库中装载数据了。组织数据入库是数据库实施阶段最主要的工作。

    数据装载方法:人工方法、计算机辅助数据入库。

    2.应用程序的调试

    数据库应用程序的设计应该与数据设计并行进行,在组织入库的同时还要调试应用程序。


    7.6.2 数据库的试运行

    应用程序调试完成,并且已有一小部分数据入库后,就可以开始对数据库系统进行联合调试,也称数据库的试运行。

    主要工作包括:

    功能测试:实际运行应用程序,执行对数据库的各种操作,测试应用程序的各种功能。

    性能测试:测量系统的性能指标,分析是否符合设计目标。

    【说明】

    1. 数据的分期入库。
    2. 做好数据库的转存和恢复。


    7.6.3 数据库的运行和维护

     在数据库运行阶段,对数据库经常性的维护工作主要是由数据库管理员完成。

    主要工作包括:

    1.数据库的转存和恢复

    数据库管理员要针对不同的应用要求制定不同的转储计划,以保证一旦发生介质故障,尽快将数据库恢复到某种一致性状态。

    2.数据库的安全性、完整性控制

    当应用环境发生变化,对安全性的要求也会发生变化,同样数据库的完整性约束条件也会变化。

    3.数据库性能的监督、分析和改进

    在数据库运行过程中,数据库管理员必须监督系统运行,对监测数据进行分析,找出改进系统性能的方法。

    4.数据库的重组织与重构造

    (1)数据库的重组织

    数据库运行一段时间后,由于记录的不断增、删、该,会使数据库的物理存储变坏,从而降低数据库存储空间的利用率和数据库的存储效率,使数据库的性能下降。

    数据库的重组织不会改变原设计的数据逻辑结构和物理结构。

    重组值的方法:按原设计要求重新安排存储位置、回收垃圾、减少指针链。

    (2)数据库的重构造

    数据库应用环境发生变化,会导致实体及实体间的联系也发生相应的变化,会使原有的数据库设计不能很好的满足新的需求。

    数据库的重构造需根据新环境调整数据库的模式和内模式。

    重构造的方法:增加或删除某些数据项、改变数据项的类型,增加或删除某个表、改变数据库的容量、增加或删除某些索引等。

    若应用变化太大,已经无法通过重构数据库来满足新的需求,或重构的数据库的代价太大,应该重新设计新的数据库应用系统了。


    7.7 小结

    1.数据库设计的方法和步骤

    2.数据库设计的6个阶段

    重点是概念结构的设计和逻辑结构的设计。

    3.概念结构的设计

    概念结构的设计着重介绍了E-R模型的基本概念和图示方法。应重点掌握实体型、属性和联系的概念,理解实体型之间的一对一、一对多和多对多联系。掌握E-R模型的设计以及把E-R模型转换为关系模型的方法。

    4.逻辑结构的设计

    将概念模型转化为具体的数据模型。

    展开全文
  • 一、数据库设计流程 1、需求分析 确定用户对数据库系统的使用要求和各种约束条件,形成用户需求规约 2、概念设计 对用户要求描述的现实世界,通过对其分类、聚集和概括,建立抽象的概念数据模型 3、逻辑设计 ...

    一、数据库设计流程

     

    1、需求分析

    确定用户对数据库系统的使用要求和各种约束条件,形成用户需求规约

    2、概念设计

    对用户要求描述的现实世界,通过对其分类、聚集和概括,建立抽象的概念数据模型

    3、逻辑设计

    将现实世界的概念数据模型设计成数据库的一种逻辑模式,即适应于某种特定数据库管理系统所支持的逻辑数据模式

    4、物理设计

    对具体的应用任务选定最合适的物理存储结构、存取方法和存取路径等

    5、验证设计

    在其他设计基础上,收集数据并具体建立一个数据库,运行一些典型的应用任务来验证数据库设计的正确性和合理性

    6、运行与维护设计

    在数据库系统正式投入运行的过程中,必须不断地对其进行评估、调整与修改

    二、E-R图

    1、什么是实体

    实体是客观事物或者逻辑事物的抽象,是可以独立存在的,由构成该事物的其他属性组成的一个概念,是可以包含多种变化的一个名词性的事务

    2、实体的特性

    (1)实体是独立的

    (2)实体在保持自身不变的同时,允许“由于自身变化”而产生不同的性质或者表现

    (3)实体是变中不变的东西,是生成变化的基础,是一组具有相同属性事物的集合

    3、什么是属性

    属性即事物本身所固定的性质,是物质必然的、基本的、不可分离的特性,又是事物某个方面质的表现

     4、什么是关系

    关系是指存在某些事物或实体之间的关联

    5、关系的两个重要概念

    (1)关系的度:包含于特定关系中的实体叫做参与者,在关系中参与者的数目叫做关系的度

    (2)递归关系:在不同的角色中有多次具有相同性质的实体参与的关系

    @简单E-R图

    @关系的度

     

    @递归关系

     6、什么是E-R关系图

    (1)E-R图(Entity Relationship Diagram)

    (2)称为实体-关系图,用于图形化描述实体-关系模型,是指提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型

    7、什么是E-R方法

    是“实体-关系方法”的简称,是描述显示世界概念结构模型的有效方法

    8、E-R图的基本要素

    (1)实体型

    (2)属性

    (3)关联关系

            一对一关系(1:1)

            一对多关系(1:N)

            多对多关系(N:N)

     三、设计范式

    1、什么是范式

    范式是为了消除重复数据减少冗余数据,从而让数据库内的数据更好地组织,让磁盘空间得到更有效利用的一种标准,满足高等级范式的先决条件是满足低等级范式

    2、范式的目标

            减少冗余数据

            消除异常

            让数据组织的更加和谐

    3、第一范式(1NF)

    数据库表的每一行都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。

    表的每一行包含一个实例的信息

    如果一个关系模型R的所有属性都是不可分的基本数据项,则R是第一范式的关系

     4、第二范式(2NF)

    要求数据库表中的每个实例或行必须是唯一的。为实现区分,通常需要为表加一个列,以存储各个实例的唯一标识(即主键)

    实体的属性完全依赖于主关键字。所谓完全依赖指的是不能存在仅依赖主关键字一部分的属性。如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。

    如果关系模型R(U,F)中的所有非主属性都完全依赖于任意一个候选关键字,则称关系R是属于第二范式的。

     

     5、第三范式(3NF)

    一个数据库表中不包含已在其他表中包含的非主关键字信息。例如存在一个部门信息表,其中每个部门有部门编号DEPI_ID、部门名称、部门简介等信息。那么在员工信息表中列出的部门编号DEPT_ID后,就不能再有关于部门的其他信息,否则就会造成数据冗余。

    如果关系模式R(U,F)中的所有非主属性对任何候选选关键字都不存在传递信赖,则称关系R是属于第三范式的。

     

    四、数据库设计常用规范

    为了优化数据库的设计,提高数据库设计的合理性和数据访问高效性,同时便于阅读和理解数据库的结构,以提高数据共享的质量和效率,促进数据库编码的标准化,特制订一套数据库规范

    1、数据库命名规则

    (1)对象名

    使用有意义的英文单词,杜绝使用汉语拼音,单词之间用下划线分割

    最大长度32个字符

    名称中的缩写要统一

    尽量使用名词结构

    (2)表名、字段名

     

     2、数据库设计规范

     

     

     五、E-R数据模型设计

    1、实体

    在现实世界中,任何可以互相区别,且可被人们识别的事、物以及概念等统统可抽象为实体,每一个实体可用一个关系表来表示

    每个实体都有一个唯一的名字,实体的名字通常使用名词

    在E-R数据模型中,实体用一个矩形表示

    2、弱实体

    这种实体不能单独存在,总是依附于某个实体,因此将其称之为弱实体

    在E-R数据模型中,若实体用双框的矩形表示

     3、属性

     4、关系

     5、关系数据模型

     

     

     

     6、关键的键

     

     7、关系的完整性约束

     

     

     

    六、关系数据库设计

    1、关系

    2、一对一关系

     

     

     3、一对多关系

     

    4、多对多关系

     

    展开全文
  • 学生成绩管理系统数据库设计--MySQL/SQL Server

    万次阅读 多人点赞 2020-06-18 13:02:04
    MySQL/SQL Server 数据库设计(学生成绩管理系统) 设计大纲 1. 项目背景及需求分析 1.1 项目背景 1.2 需求分析 1.2.1 信息需求 1.2.2 功能需求 1.2.3 安全性与完整性需求 2. 概念结构设计 2.1 抽象出系统实体 2.2 ...

    MySQL 数据库设计-学生成绩管理系统

    设计大纲

    在这里插入图片描述

    友情链接

    1、医疗信息管理系统数据库–MySQL

    医疗信息管理系统数据库–MySQL

    2、邮件管理数据库设计–MySQL

    邮件管理数据库设计–MySQL

    3、点餐系统数据库设计–SQL Server

    点餐系统数据库设计–SQL Server

    4、商品管理系统数据库设计–SQL Server

    商品管理系统数据库设计–SQL Server

    5、SQL Server医疗信息管理系统数据库【英文版-源码】–(Medical Management System Database)

    SQL Server医疗信息管理系统数据库【英文版-源码】–(Medical Management System Database)

    6、SQL Server电影院数据库管理系统【英文版-源码】–(Movie Theatre Management System Database)

    SQL Server电影院数据库管理系统【英文版-源码】–(Movie Theatre Management System Database)

    1. 项目背景及需求分析

    1.1 项目背景

    为了深刻的理解MySQL数据库,以学生成绩信息管理为例,设计一个简单、规范、高效的学生成绩信息管理系统数据库。

    1.2 需求分析

    1.2.1 信息需求

    对学校而言,学生成绩管理是管理工作中重要的一环,但是高校学生的成绩管理工作量大、繁杂,人工处理非常困难。因此,借助于强大计算机的处理能力,能够把人从繁重的成绩管理工作中解脱出来,并且更加准确、安全、清晰的管理环境。

    1.2.2 功能需求

    能够进行数据库的数据定义、数据操纵、数据控制等处理功能。具体功能应包括:可提供课程安排、课程成绩数据的添加、插入、删除、更新、查询,学生及教职工基本信息查询的功能。

    1.2.3 安全性与完整性要求

    对于学生成绩管理系统数据库来讲,由于其主要数据是学生成绩,只能由本人以及所教老师及教务处知道,因此做好数据安全性是重中之重。另外,要求所有在校学生的信息都要录入其中,并且要设计好个别情况。

    2. 概念结构设计

    概念结构设计是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。
    根据学生成绩信息管理数据库设计需求抽象出学生、教师、课程、成绩四个实体,对四个实体做简化处理,默认一门课程仅被一位老师讲授。因简化后关系结构比较简单,故省略了局部E-R图。对4个实体之间的关系进行分析如下:
    一位学生会被多位老师教导,一位老师会教导多位学生,所有学生与教师之间是多对多(m:n)的关系;
    一位学生可能会选修多门课程,一门课程会被多位学生选修,所以学生与课程之间是多对多(m:n)的关系;
    一位学生会有多项成绩(具体指某学生一门课程的分数),一项成绩仅被一位学生拥有,所以学生与成绩是一对多(1:n)的关系;
    一位教师会讲授多门课程,一门课程会被一位教师讲授,所以教师与课程的关系是一对多(1:n)的关系;
    一门课程拥有多项成绩,一项成绩仅被一门课程拥有,所以课程与成绩的关系是一对多(1:n)的关系;

    2.1 抽象出系统实体

    学生(学号、姓名、班级、性别、专业、出生日期、学分);
    老师(教师编号、姓名、学院);
    课程(课程编号、教师编号、课程名称、课程学分);
    成绩(学号、课程编号、分数);

    2.2 全局E-R图

    在这里插入图片描述

    3. 逻辑结构设计

    3.1 关系模式

    E-R图向关系模型转化要解决的问题是如何将实体型和实体间的联系转化为关系模式,如何确定这些关系模式的属性和码。
    设计学生成绩管理数据库,包括学生(students)、老师(teachers)、课程(courses)、成绩(scores)四个实体,其关系模式中对每个实体定义属性如下:

    students 表:学号(sid)、姓名(sname)、班级(sclass)、性别(sgender)、专业(smajor)、出生日期(sbirthday)、学分(credit_points),此为联系“students表”所对应的关系模式,学号为该关系的候选码,满足第三范式。

    teachers表:教师编号(tid)、姓名(tname)、学院(tschool),此为联系“teachers表”所对应的关系模式,教师编号为该关系的候选码,满足第三范式。

    courses表:课程编号(cid)、教师编号(tid)、课程名称(cname)、学分(credit_point),此为联系“courses表”所对应的关系模式,课程编号和教师编号为该关系的候选码,满足第三范式。

    scores表:学号(sid)、课程编号(cid)、分数(score),此为联系“scores表”所对应的关系模式,学号和课程编号为该关系的候选码,满足第三范式。

    3.2 函数依赖识别

    后续更新补充

    3.3 范式

    后续更新补充

    3.4 表结构

    数据库中包含4个表,即学生(students)、老师(teachers)、课程(courses)、成绩(scores)。

    students表的表结构
    在这里插入图片描述
    teachers表的表结构
    在这里插入图片描述
    courses表的表结构
    在这里插入图片描述
    scores表的表结构
    在这里插入图片描述

    4. 物理设计和实施

    4.1 数据库及表创建

    4.1.1 创建数据库

    -- 如果已有该数据库,则删除
    DROP DATABASE IF EXISTS StudentScore;
    
    -- 创建数据库
    CREATE DATABASE StudentScore CHARSET=UTF8;
    

    4.1.2 创建数据表

    -- 使用数据库
    USE StudentScore;
    
    -- 创建数据表
    -- table 1: students
    DROP TABLE IF EXISTS students;
    CREATE TABLE students(
    sid INT(20) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
    sname VARCHAR(20),
    sclass INT(10),
    sgender VARCHAR(10),
    smajor VARCHAR(20),
    sbirthday DATE,
    credit_points INT(5) -- 学生已修学分
    );
    
    -- table 2: teachers
    DROP TABLE IF EXISTS teachers;
    CREATE TABLE teachers(
    tid INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
    tname VARCHAR(20),
    tschool VARCHAR(20)
    );
    
    -- table 3: courses
    -- 需要完整代码请添加文章底部微信,付费咨询
    
    -- table 4: scores
    -- 需要完整代码请添加文章底部微信,付费咨询
    
    

    4.2 表数据增删改查测试

    4.2.1 MySQL基础知识点总结

    在这里插入图片描述

    4.2.2 精选MySQL练习题数据及解析

    点击查看
    4.2.2 精选MySQL练习题数据及答案解析

    4.2.2.1. 连接查询 - 4题

    1.1 查询同时选修了课程 1 和 课程 2 的学生的信息

    1.2 查询课程 1 比 课程 2 成绩高的学生的信息及课程分数

    1.3 查询课程 1 分数小于 60 的学生信息和课程分数,按分数降序排列

    1.4 查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩

    4.2.2.2. 子查询、连接查询 - 4题

    2.1 查询有成绩的学生信息

    2.2 查询学过 孙悟空 老师所授课程的学生信息

    2.3 查询至少有一门课与学号为 1 的同学所学相同的学生信息

    2.4 查询选修了课程 2 但是没有选修课程 1 的学生信息

    4.2.2.3. 聚合分组、连接查询 - 8题

    3.1 查询同名学生名单,并统计同名人数

    3.2 查询选修了 3 门课程的学生信息

    3.3 查询平均成绩大于等于 85 的所有学生的学号、姓名、平均成绩(保留2位小数)

    3.4 查询平均成绩大于等于 60 分的学生学号、姓名、平均成绩(保留2位小数)

    3.5 查询两门及以上课程分数小于60分的学生学号、姓名及平均成绩(保留2位小数)

    3.6 查询姓 赵 的同学的学生信息、总分,若没选课则总分显示为 0

    3.7 查询所有同学的学号、姓名、选课总数、总成绩,没选课的学生要求显示选课总数和总成绩为 0

    3.8 查询所有学生学号、姓名、选课名称、总成绩,按总成绩降序排序,没选课的学生显示总成绩为 0

    4.2.2.4. if 或 case 语句 - 2题

    4.1 若学号sid为学生座位编号,现开始对座位号调整,奇数号和偶数号对调,如1和2对调、3和4对调…等, 如果最后一位为奇数,则不调换座位,查询调换后的学生座位号(sid)、姓名,按sid排序

    4.2 查询各科成绩最高分、最低分和平均分: 以如下形式显示:课程id、课程名、选修人数、最高分、最低分、平均分、及格率、中等率、优良率、优秀率
    及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
    要求查询结果按人数降序排列,若人数相同,按课程号升序排列,平均分、及格率等保留2位小数

    4.2.2.5. 时间函数 - 6题

    5.1 查询 1990 年出生的学生信息

    5.2 查询各学生的年龄,分别按年份和按出生日期来算

    5.3 查询本周或下周过生日的学生

    5.4 查询本月或下月过生日的学生

    5.5 查询学生信息,要求:学号和年龄同时至少比一位学生的学号和年龄大

    5.6 查询连续相邻3年出生的学生中,学生性别相同的学生信息

    4.2.2.6.综合应用 - 12题

    6.1 查询和学号为 1 的同学学习的课程完全相同的其他同学的信息

    6.2 查询每科均及格的人的平均成绩:学号、姓名、平均成绩(保留2位小数)

    6.3 查询选修 张若尘 老师所授课程的学生中,该门课成绩最高的学生信息及成绩(成绩可能重复)

    6.4 查询各科成绩,按各科成绩进行排序,并显示排名 分数重复时保留名次空缺,即名次不连续

    6.5 查询各科成绩,按各科成绩进行排序,并显示排名 分数重复时不保留名次空缺,即名次连续

    6.6 查询学生 赵雷 的 变形 课程成绩的排名:学生信息,分数,排名 分数重复时不保留名次空缺,即名次连续

    6.7 查询课程 时空穿梭 成绩在第2-4名的学生,要求显示字段:学号、姓名、课程名、成绩 分数重复时不保留名次空缺,即名次连续

    6.8 查询学生的总成绩,并进行排名,总分重复时不保留名次空缺,即名次连续

    6.9 查询学生的总成绩,并进行排名,总分重复时保留名次空缺,及名次不连续 排名名次不连续,不需要去重

    6.10 统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 分别所占百分比 结果:保留2位小数

    6.11 查询各科成绩前三名的记录,按照课程编号和分数排序 分数重复时,重复分数按照一名算,即不保留名次空缺,及名次连续

    6.12 查询各科成绩的前两名,列出学生信息、课程名、分数,按照课程名、分数排序 分数重复时,重复分数按照一名算,即不保留名次空缺,及名次连续

    4.2.2.7 MySQL练习题数据及答案解析

    点击查看
    4.2.2 精选36道MySQL练习题数据及答案解析

    4.3 创建视图

    4.3.1 创建一个学生视图,要求显示学生学号、姓名、班级、性别、专业、各科成绩、平均分、总分

    DROP VIEW IF EXISTS v_students_info;
    
    CREATE VIEW v_students_info AS
    SELECT  stu.sid,
    		stu.sname,
    		stu.sclass,
    		stu.sgender,
    		stu.smajor,
    		-- 需要完整代码请添加文章底部微信,付费咨询
    		ifnull(sum(sc.score), 0) AS "总分"
    FROM 	students stu LEFT JOIN
    		scores sc ON stu.sid = sc.sid LEFT JOIN
    		courses c ON c.cid = sc.cid
    GROUP BY stu.sid;
    

    查看视图:
    在这里插入图片描述
    在这里插入图片描述

    4.4 创建函数

    4.4.1 创建一个通过学号sid获取学生信息的函数

    DROP FUNCTION IF EXISTS get_student_info_by_sid;
    
    DELIMITER //
    CREATE DEFINER = CURRENT_USER FUNCTION get_student_info_by_sid(id INT)
    RETURNS VARCHAR(300)
    DETERMINISTIC
    BEGIN
    -- 需要完整代码请添加文章底部微信,付费咨询
    END//
    DELIMITER ;
    -- 调用函数
    SELECT get_student_info_by_sid(8);
    

    调用函数结果:
    在这里插入图片描述
    其中DELIMITER 先定义结束符为 // , 然后又将结束符改为mysql默认的分号结束符。

    了解delimiter 关键字请点击:
    MySQL中 delimiter 关键字详解
    如果出现报错1418:

    Error Code : 1418 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)

    参考下面:
    MySQL ERROR 1418 的解决方法

    4.4.2 自定义函数 2:要求函数体中包含其中一种流程控制语句,要求输入学生学号sid、课程编号,显示学生姓名、课程名称、成绩是否及格(即成绩>=60)

    
    DROP FUNCTION IF EXISTS get_student_scores_by_id;
    
    DELIMITER //
    CREATE DEFINER = CURRENT_USER FUNCTION get_student_scores_by_id(sid INT, cid INT)
    RETURNS VARCHAR(300)
    DETERMINISTIC
    BEGIN
    	-- 多个变量要分开声明,否则会报错
    	DECLARE score INT;
    	DECLARE name VARCHAR(20);
    	DECLARE course_name VARCHAR(20);
    	-- 需要完整代码请添加文章底部微信,付费咨询
    	ELSE
    		RETURN '找不到该学生、课程或该学生没有选课!';
    	END IF;
    END//
    DELIMITER ;
    
    -- 调用函数
    SELECT get_student_scores_by_id(1, 2);
    
    

    调用函数结果:
    在这里插入图片描述

    4.5 创建存储过程

    4.5.1 学生每选修一门课,如果该门课程成绩达到60分及以上,则把该门课程学分加到学生学分里面,输出该学生姓名、学分

    DROP PROCEDURE IF EXISTS add_scores;
    
    DELIMITER //
    CREATE DEFINER = CURRENT_USER PROCEDURE add_scores(
    	IN stu_id INT, 
    	IN co_id INT, 
    	IN s_score INT,
    	OUT name VARCHAR(20),
    	OUT s_credit_point INT
    )
    DETERMINISTIC
    BEGIN
    -- 多个变量要分开声明,否则会报错
    DECLARE points INT;
    -- 需要完整代码请添加文章底部微信,付费咨询
    COMMIT;
    END//
    DELIMITER ;
    
    -- 测试调用存储过程
    SELECT * FROM students WHERE sid > 10;
    CALL add_scores(11, 2, 33, @name, @s_credit_point);
    SELECT @name, @s_credit_point;
    CALL add_scores(12, 2, 88, @name, @s_credit_point);
    SELECT @name, @s_credit_point;
    
    

    调用存储过程结果:
    在这里插入图片描述

    4.6 创建触发器

    4.6.1 创建一个更新学生学分的触发器,如果该学生分数>=60,则给该学生加上这门课的学分

    语法
    create trigger triggerName
    after/before insert/update/delete on 表名 for each row #这句话在mysql是固定的 begin
    sql语句;
    end;

    
    DROP TRIGGER IF EXISTS update_credit_point;
    
    DELIMITER //
    CREATE TRIGGER update_credit_point
    AFTER INSERT ON scores FOR EACH ROW
    BEGIN 
    	DECLARE points INT;
    	-- 需要完整代码请添加文章底部微信,付费咨询
    	END IF;
    END//
    DELIMITER ;
    
    
    -- 测试数据
    SELECT * FROM students WHERE sid < 3;
    INSERT INTO scores VALUES
    (1, 4, 77),
    (2, 4, 55);
    SELECT * FROM students;
    

    测试结果:
    在这里插入图片描述
    终于写完啦!

    展开全文
  • 数据库:数据库设计(需求,设计,运行,维护)

    万次阅读 多人点赞 2020-11-16 16:47:49
    1,数据库设计概述 1.1,数据库设计的基本概念 数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种...
  • 文章目录一:数据库设计定义二:数据库建设及特点(1)数据库建设基本规律(2)结构(数据)设计和行为(处理)设计相结合三:数据库设计方法四:数据库设计基本步骤(1)6个阶段(2)具体描述(3)所使用的工具五:...
  • 数据库设计概念总结

    千次阅读 2022-03-20 11:25:46
    目录 一.明确需求 二.... 1.1ER图的设计 1.2设计ER图的必要 ...三.规范数据库设计规范 ...四....五....一....在我们设计数据库表的时候首先是对我们的需求进行分析,看我们的需求是什么样的的来...在数据库设计的流程上,我们通常根据
  • 数据库设计-逻辑结构设计

    千次阅读 2022-04-30 20:48:29
    文章目录数据库设计-逻辑结构设计ER图转换成关系模式集的算法步骤1 实体类型的转换步骤2 联系类型的转换二元联系类型的转换(重点)一元联系类型的转换三元关系类型的转换采用ER模型的逻辑设计步骤 数据库设计-逻辑...
  • 数据库设计原则

    千次阅读 2019-06-09 09:52:33
    一,数据库设计原则 1. 原始单据与实体之间的关系  可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。 在特殊情况下,它们可能是一对多或多对一的...
  • 邮件管理数据库设计--MySQL

    千次阅读 多人点赞 2021-12-22 20:16:04
    邮件管理数据库设计--MySQL 友情链接 1、医疗信息管理系统数据库--MySQL 2、学生成绩管理系统数据库设计--MySQL 3、SQL Server医疗信息管理系统数据库【英文版-源码】--(Medical Management System Database) 4、...
  • 时学东摘 要 随着时代的发展,信息化时代已经逐渐的到来,计算机技术逐渐的成为了人们的生活发展中不可或缺的一部分,而数据库技术是计算机领域中很重要的一种技术,在实际中得到了广泛的应用,同时在系统设计中占据...
  • 数据库设计概述

    千次阅读 2021-12-29 10:23:10
    数据库设计 数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据...
  • 数据库设计概述 数据库设计的任务和特点 数据库shi 数据库应用系统设计 数据库文档设计 数据库应用程序设计案例
  • 点餐系统数据库设计--SQL Server

    万次阅读 多人点赞 2022-02-16 11:35:10
    1、学生成绩管理系统数据库设计–MySQL 学生成绩管理系统数据库设计–MySQL 2、医疗信息管理系统数据库–MySQL 医疗信息管理系统数据库–MySQL 3、邮件管理数据库设计–MySQL 邮件管理数据库设计–MySQL 4、SQL ...
  • 口罩预约管理系统——数据库设计(前端+PHP+MySQL)

    万次阅读 多人点赞 2020-09-14 20:55:54
    口罩预约管理系统(数据库设计)基本功能实现,如何结合前端基础、后端PHP和MySQL数据库实现呢?手把手教你设计数据库,搭建口罩预约管理系统,实现基本需求功能!
  • 本资源为大连理工大学软件学院的数据库设计大作业 背景为某一农产品网上商城系统的数据库设计 图表 说明 SQL语句详尽 各位学弟学妹们可以做以参考
  • 四种优秀的数据库设计工具

    千次阅读 2021-01-18 19:19:19
    【51CTO.com快译】众所周知,...本文将从如下四个方面和您一起比较四种优秀数据库设计工具的各自优缺点。用户界面可支持的数据库数据工具售价1.DbSchemaDbSchema是一种可用于复杂数据库设计和管理的可视化工具。该...
  • 数据库设计步骤(超级详细)|数据库

    万次阅读 多人点赞 2020-11-27 17:25:34
    数据库设计 我们先来看这样一个问题 假如遇到下面这样的设计需求,我们如何完成数据库的设计呢? 设计需求: 假设商品经销商有基本实体集:供应商Vendors、产品目录Products、顾客信息Customers和顾客订单Orders。 ...
  • 数据库系统原理 实验3 数据库设计

    千次阅读 2022-04-18 20:37:07
    数据库原理实验
  • 游戏数据库设计经验

    万次阅读 多人点赞 2019-07-13 18:31:18
    一、游戏模板数据库设计特点 软件行业一般数据库设计原则,”保持数据的完整性一致性“,”避免数据冗余“,”范式设计“。但游戏领域的游戏模板表设计上还需要考虑这些特点 1.1、对游戏程序只读,游戏程序只需要...
  • 数据库题目之数据库设计

    万次阅读 多人点赞 2019-01-10 15:21:25
    1、在数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它是数据库设计的 阶段。 A.需求分析 B.概念设计 C.逻辑设计 D.物理设计 【答案:】B 2、在关系数据库设计中,设计关系模式是 的...
  • 电子商城数据库设计

    千次阅读 2022-01-13 20:31:46
    电子商城数据库设计 1.需求分析 2.准备工作 在MySQL中创建一个数据库mall,用来保存电子商城中的数据` 建表语句 mysql> CREATE DATABASE mall; Query OK, 1 row affected (0.00 sec) mysql> USE mall; ...
  • 商品管理系统数据库设计--SQL Server

    万次阅读 多人点赞 2022-02-16 14:55:47
    1、学生成绩管理系统数据库设计–MySQL 学生成绩管理系统数据库设计–MySQL 2、医疗信息管理系统数据库–MySQL 医疗信息管理系统数据库–MySQL 3、邮件管理数据库设计–MySQL 邮件管理数据库设计–MySQL 4、SQL ...
  • 数据库设计的六个基本步骤

    万次阅读 2021-04-01 15:35:32
    按照规范设计的方法,考虑数据库及其应用系统开发全过程,可将数据库设计分为以下6个阶段,分别为:1.需求分析,2.概念结构设计,3.逻辑结构设计,4.物理结构设计,5.数据库实施,6.数据库的运行和维护。 数据库设计...
  • 数据库设计教程(第二版)pdf

    千次下载 热门讨论 2012-04-10 15:53:54
    数据库设计教程(第二版)pdf
  • 数据库设计的过程是将数据库系统与现实世界密切地、有机地、协调一致地结合起来的过程。 数据库的设计质量与设计者的知识、经验和水平密切相关。作为数据库应用系统的重要组成部分,数据库设计的成败往往直接关系到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,594,976
精华内容 637,990
关键字:

数据库设计