精华内容
下载资源
问答
  • 数据库设计

    2018-04-30 15:55:24
    一个学校的学生信息,具有一定的工作量,而学生信息,它的工作量可能是其它信息工作量的几倍,班级的增加、班级的查找、班级的修改;学生档案;课程管理;成绩管理;缴费管理;统计等等,每个信息的数据都在不断地...
  • 数据库设计概述 数据库设计的任务和特点 数据库shi 数据库应用系统设计 数据库文档设计 数据库应用程序设计案例

    数据库设计概述

    数据库设计的任务和特点

    数据库设计的基本方法

    数据库开发设计的步骤

    数据库应用系统设计

    系统需求分析

    概念结构分析

    逻辑结构设计

    数据库行为设计

    数据库实施

    数据库运行和维护

    数据库文档设计

    数据库应用程序设计案例

    下面设计基于CSDN博主若如初见kk

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

    目录

    学生成绩管理系统数据库设计... 1

    1. 概述... 1

    1.1 项目背景... 1

    1.2 需求分析... 1

    需求分析... 2

    概念结构设计... 2

    逻辑结构设计... 2

    物理设计和实施... 3

    数据操作要求及实现... 3

    设计总结... 3

    主要参考文献。... 3

     

     

    1. 概述

    1.1 项目背景

    为了深刻的理解数据库,使用一种规范设计方法新奥尔良法,它将数据库设计分为4个阶段:需求分析、概念设计、逻辑设计和物理设计,使用E-R模型来搭建概念设计,设计一个学生成绩信息管理数据库。

    1.2 需求分析

    1.2.1 信息需求

    对学校而言,学生成绩管理是管理工作中重要的一环,但是高校学生的成绩管理工作量大、繁杂,人工处理非常困难。因此,借助于强大计算机的处理能力,能够把人从繁重的成绩管理工作中解脱出来,并且更加准确、安全、清晰的管理环境。同时也方便管理学生的成绩,以及方便了学生的查看数据,确认数据,构建一个学生成绩管理数据库既方便了学校管理学生成绩以方便学生查改,因此是很有必要的。

    1.2.2 功能需求

    能够进行数据库的数据定义DDL、数据操纵DML、数据控制DCL等处理功能。具体功能应包括:可提供课程安排、课程成绩数据的添加、插入、删除、更新、查询,学生及教职工基本信息查询的功能。管理员(1).添加教师名单;(2).查询教师名单;(3).修改教师信息;(4).删除教师名单;(5).添加学生名单;(6).查询学生名单;(7).修改学生信息;(8).删除学生名单;(9).统计生源地信息;(10).修改密码;教师(1).查看个人信息;(2).查看每门课程平均成绩统计;(3).输入学生成绩, 自动生成该学生已修总学分;(4).查看任课信息;(5).查看学生成绩名次;(6).修改密码;.学生(1).查看个人信息;(2).查看自己的课表;(3).查看不同班级的开课情况;(4).查询考试成绩;(5).修改密码;

    1.2.3 安全性与完整性要求

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

    数据流图:

    1.2.4数据字典

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

    Students表:

    学生(学号、姓名、班级、性别、专业、出生日期、学分);

    Teacher表:

    老师(教师编号、姓名、学院);

    Course表

    课程(课程编号、教师编号、课程名称、课程学分);

    Score表

    成绩(学号、课程编号、分数);

    数据流名:忘记密码

    来源:判断核对

    去向:用户信息表

    组成:{用户名+用户类型+用户信息+新密码}

    备注:当用户忘记密码时可以通过验证信息修改掉旧密码。

    数据流名:成绩单

    来源:教师

    去向:学生

    组成:{学号+教师号+课程号+分数+学年}

    备注:教师录入成绩后生成成绩单,学生可查询。

    数据处理名:管理员查询

    输入:查询条件

    处理逻辑:根据输入的条件判断是否有对应记录,并提示结果

    输出:信息显示

    备注:用于查询和显示需要的信息

    数据处理名:管理员修改

    输入:要修改的信息

    处理逻辑:判断输入的记录的主码是否存在,给出提示显示结果

    输出:提示结果

    备注:用于管理员修改需要的对应信息

    数据处理名:管理员删除

    输入:需要删除的记录的主码

    处理逻辑:判断是否存在,给出提示

    输出:提示结果

    备注:用于管理员删除不需要的对应记录

    数据处理名:修改密码

    输入:用户名、旧密码、新密码

    处理逻辑:判断输入的用户名旧密码是否有对应记录,并给出提示

    输出:提示结果

    备注:用于修改用户密码

    数据处理名:成绩录入

    输入:学号、教师号、课程号、成绩、学年

    处理逻辑:判断输入的学号、教师号、课程号是否有对应记录,并给出提示输出:提示结果

    备注:用于教师录入学生成绩

    数据存储:学生成绩情况

    说明:存放的是每个学生的成绩情况

    输入数据流:各门功课的成绩情况

    流出数据流:学生的成绩单

    数据量:由学生的人数决定

    存储方式:按学号先后顺序排列。

    需求分析

    {

    信息要求

    处理要求(功能需求)

    安全性和完整性要求

    数据字典

    }

    概念结构设计

    概念结构设计是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。

    根据学生成绩信息管理数据库设计需求抽象出学生、教师、课程、成绩四个实体,对四个实体做简化处理,默认一门课程仅被一位老师讲授。因简化后关系结构比较简单,故省略了局部E-R图。对4个实体之间的关系进行分析如下:

    一位学生会被多位老师教导,一位老师会教导多位学生,所有学生与教师之间是多对多(m:n)的关系;

    一位学生可能会选修多门课程,一门课程会被多位学生选修,所以学生与课程之间是多对多(m:n)的关系;

    一位学生会有多项成绩(具体指某学生一门课程的分数),一项成绩仅被一位学生拥有,所以学生与成绩是一对多(1:n)的关系;

    一位教师会讲授多门课程,一门课程会被一位教师讲授,所以教师与课程的关系是一对多(1:n)的关系;

    一门课程拥有多项成绩,一项成绩仅被一门课程拥有,所以课程与成绩的关系是一对多(1:n)的关系;

    2.1 抽象出系统实体(及E-R图)

    学生(学号、姓名、班级、性别、专业、出生日期、学分);

    老师(教师编号、姓名、学院);

     

    课程(课程编号、教师编号、课程名称、课程学分)

    成绩(学号、课程编号、分数);

    全局E-R图如下

     

     

     

    逻辑结构设计

    E-R模式转换关系模式

    E-R图向关系模型转化要解决的问题是如何将实体型和实体间的联系转化为关系模式,如何确定这些关系模式的属性和码。

    设计学生成绩管理数据库,包括学生(students)、老师(teachers)、课程(courses)、成绩(scores)四个实体,其关系模式中对每个实体定义属性如下:

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

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

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

     

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

    {

    关系模式(数据字典)

    表结构

    }

    物理设计和实施

    {

    根据逻辑结构设计

    数据库及表的创建

    表数据增删改查

    创建视图

    创建函数

    创建存储过程

    创建触发器

    }

    数据操作要求及实现

    设计总结

    主要参考文献

    侵权必删

     

     

    展开全文
  • 数据库设计(一)——数据库设计 一、数据库设计简介 按照规范设计,将数据库的设计过程分为六个阶段:  A、系统需求分析阶段 B、概念结构设计阶段 C、逻辑结构设计阶段 D、物理结构设计阶段 E、数据库实施阶段 F...

    数据库设计(一)——数据库设计

    一、数据库设计简介

    按照规范设计,将数据库的设计过程分为六个阶段: 
    A、系统需求分析阶段
    B、概念结构设计阶段
    C、逻辑结构设计阶段
    D、物理结构设计阶段
    E、数据库实施阶段
    F、数据库运行与维护阶段
    需求分析和概念结构设计独立于任何数据库管理系统。

    二、系统需求分析

    1、需求分析的任务

    需求分析的任务:对现实世界要处理的对象进行详细的调查,通过对原系统的了解,收集支持新系统的基础数据并对其进行处理,在此基础上确定新系统的功能。
    A、调查分析用户活动
    B、收集和分析需求数据,确定系统边界信息需求,处理需求,安全性和完整性需求
    C、编写系统分析报告

    2、需求分析的方法

    需求分析有两种方法:自顶向下、自底向上
    A、自顶向下
    自顶向下方法从最上层的系统组织机构入手,采用逐层分解的方式分析系统。
    用数据流图和数据字典描述系统
    数据流图:描述输入数据到输出数据的变换过程
    数据流:由一组固定成分的数据组成,代表数据的流动方向
    处理:描述了输入数据到输出数据的变换
    文件:用于存储数据
    源或宿:存在于系统之外的人员或组织,表示系统输入数据的来源和输出数据的去向
    B、自底向上

    3、实例

    教学管理系统
    基本需求:
    某学校设计学校教学管理系统,学生实体包括学号、姓名、性别、生日、民族、籍贯、简历、入学日期,每名学生选择一个主修专业,专业包括专业编号、名称、类别,一个专业属于一个学院,一个学院可以有多个专业。学院信息要存储学院号、学院名、院长。教学管理要管理课程表、学生成绩表。课程包括课程号、课程名、学分,每门课程由一个学院开设。学生选修的每门课程获得一个成绩。

    三、概念结构设计

    1、概念结构设计简介

    概念结构设计的目标是设计数据库的E-R模型图,确认需求信息的正确和完整。具体来说就是从需求分析中找到实体,确认实体的属性、确认实体的关系,画出ER图。

    2、概念结构设计的步骤

    数据库设计(一)——数据库设计
    数据库设计(一)——数据库设计
    第一步,数据抽象与局部E-R模型设计
    A、数据抽象
    在多层数据流中选择一个适当层次作为设计E-R图的出发点。
    确定每个局部应用包含哪些实体,实体包含哪些属性,实体之间的联系
    划分实体和属性的方法
    分类:将一组具有某些共同特性和行为的对象抽象为一个实体。
    聚合:将对象类型的组成成分抽象为属性。
    B、局部E-R模型设计
    局部E-R模型设计的原则是属性必须是不可分的数据项,不能再由放弃其他属性组成;属性不能与其他实体具有联系,联系只能发生在实体之间。
    为简化E-R图,凡是能作为属性对待的,尽量作为属性。
    第二步,全局E-R模型设计
    集成各局部E-R模型,形成全局模型。视图集成的方法有两种:
    A、多元集成法:一次性将多个局部E-R图合并为一个全局E-R图。
    B、二元集成法:首先集成两个重要的局部E-R图,然后用累加的方法逐步将一个新的E-R图集成进来。
    合并:
    合并局部E-R图,消除冲突,初步生成E-R图。合并的关键是合理消除各局部E-R图的冲突。
    冲突分类如下:
    数据库设计(一)——数据库设计
    优化:
    消除初步E-R图中不必要的冗余,生成基本的E-R图。
    冗余数据:可由基本的数据导出的数据。
    冗余联系:可由基本的联系导出的联系。
    数据库设计(一)——数据库设计

    3、实例

    教学管理系统的E-R图
    实体:学生、专业、学院、课程
    实体表要记录的属性:
    学生(学号、姓名、性别、生日、籍贯、民族、简历、入学日期)
    数据库设计(一)——数据库设计
    专业(专业号、专业名称、类别)
    学院(学院号、学院名称、院长)
    课程(课程号、课程名称、学分)
    数据库设计(一)——数据库设计
    教学管理ER图:
    数据库设计(一)——数据库设计

    四、逻辑结构设计

    1、逻辑结构设计简介

    逻辑结构设计的任务是将概念结构设计阶段完成的实体模型转换成特定的DBMS所支持的数据模型的过程。逻辑结构设计的目的是将E-R图中的实体、属性和联系转换成为关系模式。
    数据库设计(一)——数据库设计

    2、初始关系模型设计

    (1)实体间关系转换遵循的原则:
    一个实体转换为一个关系模式,实体的属性就是关系的属性,实体的键就是关系的键。
    一个联系转换为一个关系模式,与该联系相连的各实体的键以及联系的属性均转换为该关系的属性。
    联系关系的键有三种情况:
    如果联系为1:1,则每个实体的键都是关系的候选键
    如果联系为1:n,zen端实体的见识关系的键
    如果联系为n:m,则各实体的键的组合是关系的键
    特殊情况:多元联系
    多元联系在转换为关系模式时,与该多元联系相连的各实体的主键及联系本身的属性均转换为关系的属性,转换后所得到的的关系的主键为各实体键的组合
    (2)实体间关系的转换规则:
    A、一个1:1关系可以转换为一个独立的关系模式,也可以与任意一端所对应的关系模式合并。 
    数据库设计(一)——数据库设计
    原实体对应关系模式分别为:
    班级(班号,专业,人数)
    班长(学号,姓名,专长)
    将关系“管理”合并到实体“班级”对应的模式后为:
    班级(班号,专业,人数,班长学号)
    班长(学号,姓名,专长)
    关系“管理”也可以合并到实体“班长”对应的模式,将关系“管理”合并到实体“班级”对应的模式后为:
    班级(班号,专业,人数)
    班长(学号,姓名,专长,班号)
    B、一个1:n关系可以转换为一个独立的关系模式,也可以与n端所对应的关系模式合并。
    数据库设计(一)——数据库设计
    实体对应的关系模式
    系(系号,系名,系主任,电话)
    教师(教师号,姓名,专业,职称,性别,年龄)
    关系对应的关系模式
    管理(教师号,系号)
    合并到实体“教师”后(只能合并到“多”的一端的关系模型):
    教师(教师号,姓名,专业,职称,性别,年龄,系号)
    C、一个m:n关系转换为一个关系模式。转换的方法为:与该关系相连的各实体的码以及关系本身的属性均转换为关系的属性,新关系的码为两个相连实体码的组合。
    关系只能转换为独立模式,模式的属性由关系本身的属性及两个实体的键构成;主键由两端实体的键组合而成。
    数据库设计(一)——数据库设计
    课程(课程号,课程名,学时,类别) 实体表
    学生(学号,姓名,性别,专业,出生日期,照片) 实体表
    选修(学号,课程号,分数) 关系表
    D、三个或三个以上实体间的多元关系转换为一个关系模式。
    关系的属性:与该多元关系相连的各实体的码以及关系本身的属性
    关系的码:各实体码的组合
    “讲授”关系是一个三元关系,可以转换为如下关系模式,其中课程号、职工号和书号为关系的组合码:
      讲授(课程号,职工号,书号)

    3、关系模式规范化

    应用数据库设计的范式理论对初始关系模型进行优化。数据库设计的三大范式如下:
    第一范式 每一个分类必须是一个不可分的数据项。属性不可再分,确保每列的原子性。
    第二范式 要求每个表只描述一件事情,每条记录有唯一标识列。
    第三范式 数据库表中不包含已在其它表中已包含的非主关键字信息。
    关系模式的规范化过程如下:
    A、确定范式级别
    考察关系模式的函数依赖关系,确定范式等级。
    B、实施规范化处理
    利用规范化方法和理论将关系模式规范化。
    C、模式改进
    合并:
    将用于关联查询的具有相同主键的各表合并可提高查询效率
    分解:
    水平分解,将关系的元组分为若干子集,提高查询效率;垂直分解,把关系中经常一起使用的属性分解出来,形成一个子关系,提高执行效率。分解时要保持无损连接和函数依赖。

    4、实例

    教学管理系统
    由ER模型转化为的关系模型:
    学生(学号、姓名、性别、生日、籍贯、民族、入学日期、专业号)实体表
    专业(专业号、专业名称、类别、学院号)实体表
    学院(学院号、学院名称、院长)实体表
    课程(课程号、课程名称、学分、学院号)实体表
    成绩表(学号、课程号、成绩)关系表
    在转换为关系模型时,一对多的联系都在相应的多方实体的关系中增加一个外键。
    需求的增加:
    如果教学管理系统还要管理教师教学安排,教师包括编号、姓名、年龄、职称,一个教师只能属于一个学院,一名教师可以上若干门课程,一门课程可以有多名老师来上,每个教师所上的每门课都有一个课堂号和课时数。
    教师实体的ER图:
    数据库设计(一)——数据库设计
    教学管理系统ER图:
    数据库设计(一)——数据库设计
    关系表 多对多
    成绩表 (学号,课程号,成绩,时间,地点)

    五、物理结构设计

    1、物理结构设计简介

    物理结构设计:对于给定的逻辑数据模型,选取一个最适合应用环境的物理结构。数据库的物理结构设计分为两步:
    A、确定物理结构:存取方法和存储结构
    B、评价物理结构:评价重点是时间和空间效率
    根据具体的数据库管理系统所提供的多种存储结构和存取方法等依赖于具体计算机结构的各项物理设计措施,对具体的应用任务选定最合适的物理存储结构(数据类型 索引 主键)。

    2、确定物理结构

    (1)存储结构的设计
    物理结构中,数据的基本存取单位是存储记录。
    某一类型的所有存储记录的集合称为文件。
    确定数据库存储结构时要综合考虑存取时间、存储空间利用率和维护代价三方面的因素。例如消除一切冗余数据虽然能够节约存储空间,但往往会导致检索代价的增加,因此必须进行权衡,选择一个折中方案。
    (2)数据存取路径的设计
    在关系数据库中,选择存取路径主要是指确定如何建立索引。例如,应把哪些域作为次码建立次索引,建立单码索引还是组合索引,建立多少个为合适,是否建立聚集索引等。
    (3)数据存放位置的设计
    为了提高性能,可将数据的易变部分、稳定部分、经常存取部分和存储频率较低部分分开存放。
    (4)系统配置的设计
    DBMS产品一般都提供了一些存储分配参数,供设计人员和DBA对数据库进行物理优化。初始情况下,系统都为这些变量赋予了合理的缺省值,但是这些值不一定适合每一种应用环境,在进行物理设计时,需要重新对这些变量赋值以改善系统的性能。

    3、评价物理结构

    物理结构设计过程中需要对时间效率、空间效率、维护代价和各种用户要求进行权衡,其结果可以产生多种方案,数据库设计人员必须对方案进行细致的评价,从中选择一个较优的方案作为数据库的物理结构。
    评价物理数据库的方法完全依赖于所选用的DBMS,主要是从定量估算各种方案的存储空间、存取时间和维护代价入手,对估算结果进行权衡、比较,选择出一个较优的合理的物理结构。

    4、实例

    教学管理系统
    表1-1 学院
    数据库设计(一)——数据库设计
    表1-2 专业 
    数据库设计(一)——数据库设计
    表1-3 学生
    数据库设计(一)——数据库设计
    表1-4 课程
    数据库设计(一)——数据库设计
    表1-5 成绩单
    数据库设计(一)——数据库设计

    六、数据库实施

    1、数据库实施的过程

    数据库实施:指根据逻辑设计和物理设计的结果,在计算机上建立起实际的数据库结构、装入数据、进行测试和试运行的过程。
    数据库设计(一)——数据库设计

    2、实例

    学生表:
    数据库设计(一)——数据库设计
    课程表:
    数据库设计(一)——数据库设计
    专业表:
    数据库设计(一)——数据库设计
    学院表:
    数据库设计(一)——数据库设计
    成绩表:
    数据库设计(一)——数据库设计

    七、数据库运行与维护

    数据库运行与维护的主要任务包括:
    A、维护数据库的安全性与完整性
    B、监测并改善数据库性能
    C、重新组织和构造数据库
    只有数据库系统在运行,就需要不断地进行修改、调整和维护。

    ©著作权归作者所有:来自51CTO博客作者天山老妖S的原创作品,如需转载,请注明出处,否则将追究法律责任

    展开全文
  • 数据库设计范式

    2019-01-05 16:26:43
    什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些 规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以...

     

     

    https://www.cnblogs.com/knowledgesea/p/3667395.html

    数据库设计三大范式

    数据库设计范式

    什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些

    规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。

    什么是三大范式:

    第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要

    求,否则,将有很多基本操作在这样的关系模式中实现不了。

    第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。

    第三范式:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF.

    注:关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性

    理解三大范式

    第一范式

       1、每一列属性都是不可再分的属性值,确保每一列的原子性

     

       2、两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。

     

     

     

    如果需求知道那个省那个市并按其分类,那么显然第一个表格是不容易满足需求的,也不符合第一范式。

     

     

     

    显然第一个表结构不但不能满足足够多物品的要求,还会在物品少时产生冗余。也是不符合第一范式的。

     

    第二范式

     

    每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。

     

     

    一个人同时订几个房间,就会出来一个订单号多条数据,这样子联系人都是重复的,就会造成数据冗余。我们应该把他拆开来。

     

     

     

     

     

    这样便实现啦一条数据做一件事,不掺杂复杂的关系逻辑。同时对表数据的更新维护也更易操作。

     

    第三范式

     数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系。像:a-->b-->c  属性之间含有这样的关系,是不符合第三范式的。

    比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)

    这样一个表结构,就存在上述关系。 学号--> 所在院校 --> (院校地址,院校电话)

    这样的表结构,我们应该拆开来,如下。

    (学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)

     

    最后:

    三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

     

     

    分类: MSSQL数据库

    标签: 数据库三大范式

    好文要顶 关注我 收藏该文


     

    42

    « 上一篇:c#写windows服务
    » 下一篇:SqlServer索引的原理与应用

    posted @ 2014-04-16 09:02 张龙豪 阅读(136371) 评论(9) 编辑 收藏

    https://www.cnblogs.com/knowledgesea/p/3667395.html

     

     

     

     

     

     

    https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%8C%83%E5%BC%8F/7309898?fr=aladdin

    数据库范式

     编辑

    设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

    目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

    中文名

    数据库标准化

    外文名

    Database Normalization

    定    义

    减少数据库中数据冗余的过程

    种    类

    六种

    目录

    1. 范式简介
    2. 各类范式
    3. 范式应用实例

    范式简介

    编辑

    设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

    目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。

    各类范式

    编辑

    第一范式(1NF)

    所谓第一范式(1NF)是指在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。

    说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的设计基本要求,一般设计中都必须满足第一范式(1NF)。不过有些关系模型中突破了1NF的限制,这种称为非1NF的关系模型。换句话说,是否必须满足1NF的最低要求,主要依赖于所使用的关系模型

    第二范式(2NF)

    在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)

    第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。例如在员工表中的身份证号码即可实现每个一员工的区分,该身份证号码即为候选键,任何一个候选键都可以被选作主键。在找不到候选键时,可额外增加属性以实现区分,如果在员工关系中,没有对其身份证号进行存储,而姓名可能会在数据库运行的某个时间重复,无法区分出实体时,设计辟如ID等不重复的编号以实现区分,被添加的编号或ID选作主键。(该主键的添加是在ER设计时添加,不是建库时随意添加)

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

    第三范式(3NF)

    在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

    第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性,也就是在满足2NF的基础上,任何非主属性不得传递依赖于主属性。

    巴斯-科德范式(BCNF)

    Boyce-Codd Normal Form(巴斯-科德范式)

    在3NF基础上,任何非主属性不能对主键子集依赖(在3NF基础上消除对主码子集的依赖)

    巴斯-科德范式(BCNF)是第三范式(3NF)的一个子集,即满足巴斯-科德范式(BCNF)必须满足第三范式(3NF)。通常情况下,巴斯-科德范式被认为没有新的设计规范加入,只是对第二范式与第三范式中设计规范要求更强,因而被认为是修正第三范式,也就是说,它事实上是对第三范式的修正,使数据库冗余度更小。这也是BCNF不被称为第四范式的原因。某些书上,根据范式要求的递增性将其称之为第四范式是不规范,也是更让人不容易理解的地方。而真正的第四范式,则是在设计规范中添加了对多值及依赖的要求。

    定义:关系模式R<U,F>∈1FNF,若X→Y且Y不是X的子集时X必含有码,则R<U,F>∈BCNF。也就是说,关系模式R<U,F>中,若每一个决定因素都包含码,则R<U,F>∈BCNF。

    由BCNF的定义可以得到结论,一个满足BCNF的关系模式有:

    -所有非主属性对每一个码都是完全函数依赖。

    -所有主属性对每一个不包含它的码也是完全函数依赖。

    -没有任何属性完全函数依赖于非码的任何一组属性。

    若R∈BCNF,按定义排除了任何属性对码的传递依赖与部分依赖,所以R∈3NF。 [1] 

    一般关系型数据库设计中,达到BCNF就可以了!

    范式应用实例

    编辑

    下面以一个学校的学生系统为例分析说明,这几个范式的应用。

    第一范式(1NF)

    数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。

    首先我们确定一下要设计的内容包括那些。学号、学生姓名、年龄、性别、课程名称、课程学分、系别、学科成绩,系办地址、系办电话等信息。为了简单我们暂时只考虑这些字段信息。我们对于这些信息,所关心的问题有如下几个方面。

    学生有那些基本信息?

    学生选了那些课,成绩是什么?

    每个课的学分是多少?

    学生属于那个系,系的基本信息是什么?

    第二范式(2NF)

    首先我们考虑,把所有这些信息放到一个表中(学号,学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话)下面存在如下的依赖关系。

    (学号, 课程名称) → (姓名, 年龄, 成绩, 学分)

    问题分析

    姓名和年龄不依于课程,即不完全依赖于主属性因此不满足第二范式的要求,会产生如下问题:

    数据冗余:同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。

    更新异常:

    1)若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。

    2)假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。

    删除异常 :假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。

    解决方案

    把选课关系表SelectCourse改为如下三个表:

    学生:Student(学号,姓名,年龄,性别,系别,系办地址、系办电话);

    课程:Course(课程名称,学分);

    选课关系:SelectCourse(学号,课程名称,成绩)。

    第三范式(3NF)

    接着看上面的学生表Student(学号,姓名,年龄,性别,系别,系办地址、系办电话),关键字为单一关键字"学号",因为存在如下决定关系:

    (学号)→ (姓名,年龄,性别,系别,系办地址、系办电话

    但是还存在下面的决定关系:

    (学号) → (系别)→(系办地点,系办电话)

    即存在非关键字段"系办地点"、"系办电话"对关键字段"学号"的传递函数依赖。

    它也会存在数据冗余、更新异常、插入异常和删除异常的情况。

    根据第三范式把学生关系表分为如下两个表就可以满足第三范式了:

    学生:(学号,姓名,年龄,性别,系别);

    系别:(系别,系办地址、系办电话)。

    上面的数据库表就是符合I,Ⅱ,Ⅲ范式的,消除了数据冗余、更新异常、插入异常和删除异常。

    参考资料

    • 1.  王珊,萨师煊.数据库系统概论(第5版):高等教育出版社,2014:184

    学术论文

    内容来自 

    查看全部 

    词条标签:

    科学 , 学科

    https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%8C%83%E5%BC%8F/7309898?fr=aladdin

     

     

     

     

     

     

     

     

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

    万次阅读 多人点赞 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 数据库设计-学生成绩管理系统

    设计大纲

    在这里插入图片描述

    更新时间:2020.6.23

    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
    DROP TABLE IF EXISTS courses;
    CREATE TABLE courses(
    cid INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
    cname VARCHAR(20),
    credit_point INT(5), -- 课程学分
    tid INT(10) UNSIGNED NOT NULL,
    FOREIGN KEY(tid) REFERENCES teachers(tid)
    );
    
    -- table 4: scores
    DROP TABLE IF EXISTS scores;
    CREATE TABLE scores(
    sid INT(10) UNSIGNED NOT NULL,
    cid INT(10) UNSIGNED NOT NULL,
    score DECIMAL(5, 2),
    FOREIGN KEY(sid) REFERENCES students(sid),
    FOREIGN KEY(cid) REFERENCES courses(cid)
    );
    
    

    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,
    		sum(if(c.cname = "变形", sc.score, 0)) AS "变形",
    		sum(if(c.cname = "时空穿梭", sc.score, 0)) AS "时空穿梭",
    		sum(if(c.cname = "分解术", sc.score, 0)) AS "分解术",
    		sum(if(c.cname = "炼器", sc.score, 0)) AS "炼器",
    		sum(if(c.cname = "炼丹", sc.score, 0)) AS "炼丹",
    		sum(if(c.cname = "飞行", sc.score, 0)) AS "飞行",
    		round(ifnull(avg(sc.score), 0), 2) AS "平均分",
    		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
    RETURN (SELECT CONCAT('姓名: ', sname, ' , ', '性别: ', sgender, ' , ', '专业:', smajor)
    FROM students WHERE sid = id);
    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);
    	SELECT sc.score INTO score
    	FROM scores AS sc
    	WHERE sc.sid = sid AND sc.cid = cid;
    	SELECT sname INTO name FROM students AS stu WHERE stu.sid = sid;
    	SELECT cname INTO course_name FROM courses AS co WHERE co.cid = cid;
    	IF score >= 60 THEN
    		RETURN CONCAT(name, '--', course_name, '--', '及格');
    	ELSEIF score > 0 AND score < 60 THEN
    		RETURN CONCAT(name, '--', course_name, '--', '不及格');
    	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;
    INSERT INTO scores (sid, cid, score)
    VALUES (stu_id, co_id, s_score);
    SELECT credit_point INTO points FROM courses WHERE cid = co_id;
    IF s_score >= 60 THEN
    	UPDATE students 
    	SET credit_points = credit_points + points
    	WHERE sid = stu_id;
    END IF;
    -- 注意:多个输出值一定要用多个SELECT来赋值,否则会报错
    SELECT sname INTO name FROM students WHERE sid = stu_id;
    SELECT credit_points INTO s_credit_point FROM students WHERE sid = stu_id;
    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;
    	SELECT co.credit_point INTO points FROM courses AS co WHERE co.cid = new.cid;
    	IF new.score >= 60 THEN
    		UPDATE students SET credit_points = credit_points + points
    		WHERE sid = new.sid;
    	END IF;
    END//
    DELIMITER ;
    
    
    -- 测试数据
    SELECT * FROM students WHERE sid < 3;
    INSERT INTO scores VALUES
    (1, 4, 77),
    (2, 4, 55);
    SELECT * FROM students;
    

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

    展开全文
  • 掌握数据库设计的全过程;设计E-R模型,掌握表的创建语句,注意表的约束的应用:主键,外键及check约束;学会使用数据库辅助设计工具软件;掌握查询、增删改等数据操作语句;掌握视图的建立与删除方法并体会其作用;...
  • 课堂学习效果反馈系统数据库设计 前言 一个数据库的设计可以说关系到系统方方面面。基本当数据库被设计出来,系统的实现的工作量就完成了一大半了。 前段时间根据某个题目设计了一个系统的数据库,想想在之前的设计...
  • 关系数据库设计理论

    千次阅读 2018-07-11 18:32:27
    关系数据库设计理论 设计一个好的关系数据库系统,关键是要设计一个好的数据库模式(数据库逻辑设计问题) 数据库逻辑设计主要解决的问题 关系数据库应该组织成几个关系模式 关系模式中包括哪些属性 ...
  • 图书管理系统数据库设计

    千次阅读 多人点赞 2019-12-22 20:30:13
    实验八 图书管理系统数据库设计 一、实验学时 2学时 二、实验目的 (1)熟悉SQL Sever基本操作。 (2)利用T-SQL语句实现相关操作。...设计一个简单的图书管理系统包括图书馆内书籍的信息、学校在...
  • 数据库设计报告

    2014-05-29 23:38:42
    三、数据库设计 1.需求分析 高校学生的成绩管理工作量大、繁杂人工处理非常困难。学生成绩管理系统借助于计算机强大的处理能力大大减轻了管理人员的工作量并提高了处理的准确性。学生成绩管理系统的开发运用实现了...
  • 简单的教务系统数据库可以由如下六个表组成。下面给出了各个表格的主键与外键。 学生表 主键为学号,无外键 课程表 主键为课程编号,无外键 老师表 主键为教师工号,无外键 开课表 主键为教师工号、课程编号、学期...
  • 试题库管理系统--数据库设计

    万次阅读 多人点赞 2017-12-28 09:14:02
    一、概要设计 1.1 背景和意义 目前,许多高校绝大多数课程还采用考教统一的模式来完成教学过程,这种传统的考试模式在教学到实施考试的过程带有很大的主观随意性和不规范性。另外随着各高校近年来学生规模的扩大,...
  • 数据库设计 1、数据库设计概述 1)、数据库设计的特点 2)、数据库设计方法 3)、数据库设计的基本步骤 4)、数据库设计过程中的各级模式 2、需求分析 1)、需求分析的任务 2)、需求分析的方法 3)、数据...
  • 教务管理系统 数据库设计

    千次下载 热门讨论 2011-12-25 21:52:54
    数据库原理课,设计了一个高校教务管理系统数据库,word文档,包括需求分析,ER图,具体的代码设计,SQL语句的数据库查询,创建视图
  • 数据库概述之数据库设计实例分析

    千次阅读 2019-01-09 16:43:35
    学校中有若干系,每个系有若干班级和教研室,每个教研室有若干教员,其中有的教授和副教授每个各带若干研究生,每个班有若干学生,每个学生选修若干课程,每门课可由若干学生选修。请用E-R图画出此学校的概念模型,...
  • 数据库设计10.1 数据库设计概述10.2 系统需求分析10.3 概念结构设计10.4 逻辑结构设计10.5 数据库的物理设计10.6 数据库系统的实施阶段10.7 数据库运行维护与管理 10. 数据库设计 忙活9章,终于来到我的主场,撒花...
  • 学校做课程设计时设计的简单的图书管理系统的数据库设计,表总量不是很多,里面的SQL是MSSQL2000的语句,不过不妨碍理解表结构,表名和字段名是中英文都有的,当然这个大家最好改为英文的,避免出现编码问题;...
  • 数据库设计心得

    2010-10-30 16:44:00
    在培训学校学习期间,老师一直很重视培养我们的(在这里只指关系数据库)数据库设计能力的提高,在软工期间很注意,现在的项目练习中又重点训练,这是我对数据库的设计不敢轻视。 第一个问题,数据库的表依据什么来...
  • 数据库系统---数据库设计

    千次阅读 2018-08-18 08:20:34
    1. 数据库设计的方法  目前已有的数据库设计方法可分为四类,即直观设计法、规范设计法、计算机辅助设计法和自动化设计法。直观设计法又称单步逻辑设计法,它依赖于设计者的知识、经验和技巧,缺乏工程规范的支持...
  • 数据库设计 关系型数据库的设计分为以下5个阶段: 需求分析 (1) 明确用户需求,到底做什么? 概念模式设计 (1) 该阶段是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象。主要 是通过E-R图表示。 ...
  • 数据库设计说明书.rar

    2019-07-09 08:13:47
    数据库为教务管理系统,主要是针对学校教学管理方面而设计的。学校教务处因为工作需要,必须对每个班的信息,学生的信息,教师的信息,专业信息有一定的了解,并以此为基础来安排课程。安排课程必须根据学校的软...
  • 数据库设计的过程是将数据库系统与现实世界密切地、有机地、协调一致地结合起来的过程。 数据库的设计质量与设计者的知识、经验和水平密切相关。作为数据库应用系统的重要组成部分,数据库设计的成败往往直接关系到...
  • 数据库设计范式介绍

    2019-06-11 13:46:58
    一、数据库设计范式及其意义和不足 数据库的设计范式是数据库设计所需要满足的规范,数据库的规范化是优化表的结构和优化把数据组织到表中的方式,这样使数据更明确,更简洁。实践中,通常把一个数据库分成两个或多...
  • 数据库设计三范式与实例讲解

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,743
精华内容 13,097
关键字:

学校简单数据库设计