软件开发数据库设计-stm32库开发实战指南
* 如何将E-R图转换为表 UID主键 TID主键 RID主键 SID主键 * 如何将E-R图转换为表 添加各表之间的关系 * 设计数据库课堂练习 收集信息: 学生管理系统功能: 1、年级管理:维护年级基本信息 2、班级管理:维护班级基本信息 3、学员管理:维护学员基本信息 4、科目管理:维护科目基本信息,并要求维护某个学员针对某门科目的成绩。 * 数据规范化 仅有好的RDBMS并不足以避免数据冗余,必须在数据库的设计中创建好的表结构 Dr E.F.codd 最初定义了规范化的三个级别,范式是具有最小冗余的表结构。这些范式是: 第一范式(1st NF -First Normal Fromate) 第二范式(2nd NF-Second Normal Fromate) 第三范式(3rd NF- Third Normal Fromate) * 第一范式 (1st NF) BuyerID Country City 1 1 4 2 中国 中国 日本 美国 北京 北京 东京 纽约 … … … BuyerID Address 1 2 3 4 中国北京市 美国纽约市 英国利物浦 日本东京市 …… 第一范式的目标是确保每列的原子性 如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF) * 第二范式 (2nd NF) 如果一个关系满足1NF,并且除了主键以外的其他列,都要求完全依赖与该主键(不能存在仅依赖主关键字一部分的列 ),则满足第二范式(2NF) 第二范式要求每个表只描述一件事情 Score 字段 例子 课程编号 学生编号 得分 学生姓名 1 001 98 张三 …… Score 字段 例子 课程编号 学生编号 1 001 Students 字段 例子 学生编号 学生姓名 001 张三 得分 98 * 第三范式 (3rd NF) 如果一个关系满足2NF,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式(3NF) Orders 字段 例子 订单编号 订购日期 顾客编号 001 2000-2-3 AB001 顾客姓名 Tony …… Orders 字段 例子 订单编号 订购日期 顾客编号 001 2000-2-3 AB001 …… * 总结 1-1 在需求分析阶段,设计数据库的一般步骤为: 收集信息 标识对象 标识每个对象的属性 标识对象之间的关系 在概要设计阶段和详细设计阶段,设计数据库的步骤为: 绘制E-R图 将E-R图转换为表格 应用三大范式规范化表格 * 总结 1-2 为了设计结构良好的数据库,需要遵守一些专门的规则,称为数据库的设计范式。
第一范式(1NF)的目标:确保每列的原子性。 第二范式(2NF)的目标:确保表中的每列,都和主键相关 。 第三范式(3NF)的目标:确保每列都和主键列直接相关,而不是间接相关 。 * * * * * * 在项目开始前,先向学员介绍软件开发流程 * * 强调项目团队的重要性 * * 介绍瀑布模型 * * * * 讲解要点: 由修建茅屋和大厦的对比,得出结论:当数据库比较复杂(如数据量大,表较多,业务关系复杂)时, 我们需要先创建数据库; * * 讲解要点: 既然我们建库前需要预先设计数据库,那到底如何设计呢? 我们一起从数据库设计的角度,看看项目开发周期的不同阶段,数据库设计的具体工作有哪些。 1.重点讲解与数据库设计相关的各个阶段。 2.强调需求分析阶段:分析客户的业务需求。 3.强调概要设计阶段:重点是分析数据库E-R图(类似建筑方面的施工图), 用于项目团队之间以及团队和客户之间的沟通,客户根据图纸提出修改意见, 项目组修改后再与客户反复沟通,直到客户确认。 E-R的好处主要是简洁直观。 4.强调详细设计阶段:重点是实现,需要把E-R图转化为具体的多张表。 但是10个人有10种设计方案,所以我们需要评估、审核并优化,审核时就需要一些设计规则进行审核, 这些规则就是三大范式。
5.在代码编写阶段:我们再根据项目性能要求、项目经费、技术实现难度等选择是Access/SQl Server还是Oracle等 进行物理实现:建库、建表、加约束等。 * * 讲解要点: 在需求分析阶段,设计数据库的一般步骤(结合BBS论坛系统讲解): 1.收集信息: 提问学员:论坛的基本功能有哪些?引导回答:注册、登录、发贴、版主论坛管理等 * * 2.标识对象: 告诉学员实体的概念:相当于Java中讲解的对象,现实中实实在在存在的事物都是实体,如汽车、房子、人等。 强调实体一般是名词,英文是Entity 提问学员:BBS论坛中有哪些实体?引导回答:用户、主贴、跟贴 。因为主贴和跟贴的信息不完全一样(如跟贴数等)软件开发数据库设计,所以分开。版主不是实体,因为它属于用户实体,它只是一种拥有特权的特殊用户。 * * 3.标识每个对象的属性。 告诉学员属性的概念:相当于某个实体的子成员信息,类似Java中类的属性。 提问学员用户、主贴、回帖、版块等实体有哪些属性,列出主要的即可。 * * 4.世界万物都是联系的,一个系统中的实体间也是如此,所以我们还需要标出实体间的关系。
强调关系一般是动词。如用户发出主贴,发出就是一个关系,用于表示用户实体和主贴实体间的联系,它是一个动词。 提问学员: 1)跟贴和主贴有什么关系? 2)版块和用户(版主)有什么关系 3)主贴和版块有什么关系 4)跟贴和版块有什么关系 答案参考幻灯片。 * * 讲解要点: 1)分别讲解各种映射关系的生活例子,还可以让学员举例。 例如: 1对1关系,1台车对于一个车位。 2)告诉学员,1对多有的参考资料还表示为1:M或1:∞ ,多对多表示为:M:N或∞ :∞ * * 告诉学员:在设计阶段,设计数据库的一般步骤为: 1.绘制E-R图图纸,用于和客户沟通交流意见,并反复修改,直到客户确认 2.客户确认后,将E-R图转换为表 3.应用三大范式对设计的多张表进行审核并规范化表的结构 我们先看看如何绘制E-R图,它和施工图一样,有许多行业规定的绘图符合,表示特殊的含义。 * * * * 展示BBS论坛的ER图示例,强调: 1)实体的符号 2)属性的符号 3)关系的符号 4)关系映射的表示:关系显示标出1:M等。 绘制了ER图后,需要和客户反复沟通,确认和需求是否一致或信息表示是否完整,客户提出意见并修改,直到确认为止。
告诉学员绘制ER图可以使用微软的Word或VISIO以及Sybase公司的PowerDesigner,不同的工具表示方法略有不同。 上机我们将使用业界流行的PowerDesigner绘制。 * * 客户确认后,需要把ER图转换为一张张表。 规则如下: 1)实体->表 2)属性->表中的列 3)关系->表之间的主外键约束关系 告诉学员:有时为了设置主键或外键,需要添加没有实际含义的ID列,也称为编号列。 * * 讲解要点: 1)实体对应表 2)实体的列对应表中的列 3)为了体现实体间的关系,需要设置主外键。为了设置主外键,表中有时需要添加ID列,如用户表中的UID列(用户编号)等。 告诉学员,为了表示属于哪个表,所以表中的列名前加了固定的前缀。 这样的好处是可以避免多个表中列名的重复。 * * 展示表间的关系: 让学员指出哪个表的哪一列与其他表的哪一列建立关系,哪个是主表,哪个是从表。 * * 4.世界万物都是联系的,一个系统中的实体间也是如此,所以我们还需要标出实体间的关系。 强调关系一般是动词。如用户发出主贴,发出就是一个关系,用于表示用户实体和主贴实体间的联系,它是一个动词。
提问学员: 1)跟贴和主贴有什么关系? 2)版块和用户(版主)有什么关系 3)主贴和版块有什么关系 4)跟贴和版块有什么关系 答案参考幻灯片。 * * 表设计后,很可能结构不合理,出现数据重复保存,简称数据的冗余,这对数据的增删改查带来很多后患,所以我们需要审核是否合理,就想施工图设计后,还需要其他机构进行审核图纸是否设计合理一样。 如何审核呢?需要一些有关数据库设计的理论指导规则,这些规则业界简称数据库的范式。 * * 讲解每个范式的含义:关键是说明范式的目的,这样规定有什么好处。 * * 总结: 方式多样,例如:可以指定某些睡觉的学员总结,随机抽号总结,集体总结,调动课堂氛围。 软件开发及数据库设计 1、 软件开发流程 2、 数据库设计 一、软件开发流程 * 软件开发流程 比尔盖子是一名建筑工人 起初只干一些比较简单的建筑工作 凭个人技术和经验,不需要特别设计,可以顺利完成 * 软件开发流程 新任务:建造一间非常美丽而完整的房间 工作变得复杂许多 * 软件开发流程 软件复杂性 图形用户界面 客户/服务器结构 数据通信 超大型关系型数据库 * 项目团队中的角色 比尔想到需要更多的人手帮他 终于组成了自己工作团队 就像软件中的项目团队 * 软件项目团队中的角色 项目经理 软件架构师 项目团队 设计人员 开发人员 测试人员 * 项目人员构成比例 例子: 微软 EXCHANGE 2000 SERVER 的开发: 项目经理:25人 开发人员:140人 测试人员:350人 WINDOWS 2000: 项目经理:250人 开发人员:1700人 测试人员:3200人 * 软件工程师的工作 团队管理 项目设计与分析 编写文档 编码 测试 * 软件工程师的素质 良好的编码能力 规范化编码习惯 规范意识 团队精神 具有软件工程的概念 求知欲、进取心 和学习总结的能力 * 软件开发过程 “这次不能盲目开工,我们需要首先好好设计一下!” 构想 分析 设计 构造 评估 软件的制作过程也非常相似 * 软件开发过程 软件开发 可行性研究与计划 需求分析 设计 开发 评估/测试 维护 建造房屋 构想 分析 设计 构造 评估 维护 * 软件开发过程模型 软件开发需要经历几个步骤 具体如何实施,具体项目不同,有所区别 软件开发过程模型:制作具体软件时,开发步骤的具体实施方法 瀑布模型 * 瀑布模型 瀑布模型—— “线性顺序模型” 将每个阶段都清楚定义了起止点 产生明确的交付成果 阶段之间通过文档进行沟通 每个阶段都必需完成全部规定的任务(文档)后才能够进入下一个阶段 可行性研究与计划 需求分析 设计 开发 测试 维护 可行性研究报告 需求说明书 设计文档 程序 测试报告 * 软件开发过程 比尔通过类似软件瀑布模型的方式成功完成了自己的建筑项目 二、数据库设计 * 为什么需要设计数据库 修建茅屋需要设计吗? 修建大厦需要设计吗? 结论:当数据库比较复杂时我们需要设计数据库 * 为什么需要设计数据库 良好的数据库设计 节省数据的存储空间 能够保证数据的完整性 方便进行数据库应用系统的开发 糟糕的数据库设计: 数据冗余、存储空间浪费 内存空间浪费 数据更新和插入的异常 * 软件项目开发周期 需求分析阶段:分析客户的业务和数据处理需求; 概要设计阶段:设计数据库的E-R模型图,确认需求信息的正确和完整; 详细设计阶段:将E-R图转换为多张表,进行逻辑设计,并应用数据库设计的三大范式进行审核; 代码编写阶段:选择具体数据库进行物理实现,并编写代码实现前端应用; 软件测试阶段:…… 安装部署:…… 现实世界 建模 信息世界 模型转换 规范化 数据库世界 数 据 库 数 据 库 * 设计数据库的步骤 收集信息: 与该系统有关人员进行交流、坐谈,充分理解数据库需要完成的任务 BBS论坛的基本功能: 用户注册和登录,后台数据库需要存放用户的注册信息和在线状态信息; 论坛版块管理:后台数据库需要存放各个版块信息,如版主、版块名称、贴子数等; 用户发贴,后台数据库需要存放贴子相关信息,如贴子内容、标题等; * 设计数据库的步骤 标识对象(实体-Entity)标识数据库要管理的关键对象或实体 实体一般是名词: 用户:论坛普通用户、各版块的版主。
用户发的主贴 用户发的跟贴(回贴) 版块:论坛的各个版块信息 * 设计数据库的步骤 论坛用户 呢称 密码 电子邮件 生日 性别 用户的等级 备注信息 注册日期 状态 积分 主贴 发贴人 发贴表情 回复数量 标题 正文 发贴时间 点击数 状态 最后回复时间 回贴 贴子编号 回贴人, 回贴表情 标题 正文 回贴时间 点击数 版块 版块名称 版主 本版格言 点击率 发贴数 标识每个实体的属性(Attribute) * 设计数据库的步骤 标识对象之间的关系(Relationship) 跟贴和主贴有主从关系:我们需要在跟贴对象中表明它是谁的跟贴; 版块和用户有关系:从用户对象中可以根据版块对象查出对应的版主用户的情况; 主贴和版块有主从关系:需要表明发贴是属于哪个版块的; 跟贴和版块有主从关系:需要表明跟贴是属于哪个版块的; * 绘制E-R图 映射基数 一对一 X X X X Y Y Y Y X X X X Y Y Y Y 一对多 X X X X Y Y Y 多对一 X X X X Y Y Y Y 多对多 客户 订单 产品 MN 1N * 绘制E-R图 E-R(Entity-Relationship)实体关系图 符合 含义 实体,一般是名词 属性,一般是名词 关系,一般是动词 * 绘制E-R图 管理 bbsUser (用户,版主) …… 出生日期 昵称 版块名称 版主 …… bbsSection (版块) * 1 1 1 1 M 1 M M M M 用户积分 性别 用户等级 备注信息 注册日期 版块名称 本版留言 发贴数 状态 密码 昵称 电子邮件 生日 论坛用户(BBSUser) 管理 发表 发表 跟随 属于 属于 点击率 版主 标题 发贴人 贴子编号 正文 点击率 版块(BBSSection) 发贴(BBSTopic) 发贴人 正文 状态 贴子编号 所在版块 最后回复时间 发贴表情 回复数量 点击率 发贴时间 标题 M 跟贴(BBSReply) 所在版块 发贴时间 最后回复时间 发贴表情 1 绘制E-R图 论坛E-R图 * 如何将E-R图转换为表 将各实体转换为对应的表,将各属性转换为各表对应的列 标识每个表的主键列,需要注意的是:没有主键的表添加ID编号列,它没有实际含义,用于做主键或外键,例如用户表中的“UID”列,版块表中添加“SID”列,发贴表和跟贴表中的“TID”列 在表之间建立主外键,体现实体之间的映射关系 * 两实体集间1:N联系 对于两实体集间1:n联系:可将“一方”实体的主键字纳入“n方”实体中做外键。
对于两实体集间m:n联系:必须对“联系”单独建立一个关系,用来联系双方实体集。该关系的属性中至少要包括被它所联系的双方实体集的“主关键字”,并且如果联系有属性,也要归入这个关系中。 * 两实体集间的1:1的联系 假设A实体集与B实体集是1:1的联系,联系的转换有三种方法: ①、把A实体集的主关键字加入到B实体集对应的关系中; ②、把B实体集的主关键字加入到A实体集对应的关系中; ③、建立第三个关系,关系中包含两个实体集的主关键字。 * 备课提示 * * * * * * 在项目开始前,先向学员介绍软件开发流程 * * 强调项目团队的重要性 * * 介绍瀑布模型 * * * * 讲解要点: 由修建茅屋和大厦的对比,得出结论:当数据库比较复杂(如数据量大,表较多,业务关系复杂)时, 我们需要先创建数据库; * * 讲解要点: 既然我们建库前需要预先设计数据库,那到底如何设计呢? 我们一起从数据库设计的角度,看看项目开发周期的不同阶段,数据库设计的具体工作有哪些。 1.重点讲解与数据库设计相关的各个阶段。 2.强调需求分析阶段:分析客户的业务需求。 3.强调概要设计阶段:重点是分析数据库E-R图(类似建筑方面的施工图), 用于项目团队之间以及团队和客户之间的沟通,客户根据图纸提出修改意见, 项目组修改后再与客户反复沟通,直到客户确认。
E-R的好处主要是简洁直观。 4.强调详细设计阶段:重点是实现,需要把E-R图转化为具体的多张表。 但是10个人有10种设计方案,所以我们需要评估、审核并优化,审核时就需要一些设计规则进行审核, 这些规则就是三大范式。 5.在代码编写阶段:我们再根据项目性能要求、项目经费、技术实现难度等选择是Access/SQl Server还是Oracle等 进行物理实现:建库、建表、加约束等。 * * 讲解要点: 在需求分析阶段,设计数据库的一般步骤(结合BBS论坛系统讲解): 1.收集信息: 提问学员:论坛的基本功能有哪些?引导回答:注册、登录、发贴、版主论坛管理等 * * 2.标识对象: 告诉学员实体的概念:相当于Java中讲解的对象,现实中实实在在存在的事物都是实体,如汽车、房子、人等。 强调实体一般是名词,英文是Entity 提问学员:BBS论坛中有哪些实体?引导回答:用户、主贴、跟贴 。因为主贴和跟贴的信息不完全一样(如跟贴数等),所以分开。版主不是实体,因为它属于用户实体,它只是一种拥有特权的特殊用户。 * * 3.标识每个对象的属性。
告诉学员属性的概念:相当于某个实体的子成员信息,类似Java中类的属性。 提问学员用户、主贴、回帖、版块等实体有哪些属性,列出主要的即可。 * * 4.世界万物都是联系的,一个系统中的实体间也是如此,所以我们还需要标出实体间的关系。 强调关系一般是动词。如用户发出主贴,发出就是一个关系,用于表示用户实体和主贴实体间的联系软件开发数据库设计,它是一个动词。 提问学员: 1)跟贴和主贴有什么关系? 2)版块和用户(版主)有什么关系 3)主贴和版块有什么关系 4)跟贴和版块有什么关系 答案参考幻灯片。 * * 讲解要点: 1)分别讲解各种映射关系的生活例子,还可以让学员举例。 例如: 1对1关系,1台车对于一个车位。 2)告诉学员,1对多有的参考资料还表示为1:M或1:∞ ,多对多表示为:M:N或∞ :∞ * * 告诉学员:在设计阶段,设计数据库的一般步骤为: 1.绘制E-R图图纸,用于和客户沟通交流意见,并反复修改,直到客户确认 2.客户确认后,将E-R图转换为表 3.应用三大范式对设计的多张表进行审核并规范化表的结构 我们先看看如何绘制E-R图,它和施工图一样,有许多行业规定的绘图符合,表示特殊的含义。
* * * * 展示BBS论坛的ER图示例,强调: 1)实体的符号 2)属性的符号 3)关系的符号 4)关系映射的表示:关系显示标出1:M等。 绘制了ER图后,需要和客户反复沟通,确认和需求是否一致或信息表示是否完整,客户提出意见并修改,直到确认为止。 告诉学员绘制ER图可以使用微软的Word或VISIO以及Sybase公司的PowerDesigner,不同的工具表示方法略有不同。 上机我们将使用业界流行的PowerDesigner绘制。 * * 客户确认后,需要把ER图转换为一张张表。 规则如下: 1)实体->表 2)属性->表中的列 3)关系->表之间的主外键约束关系 告诉学员:有时为了设置主键或外键,需要添加没有实际含义的ID列,也称为编号列。 * * 讲解要点: 1)实体对应表 2)实体的列对应表中的列 3)为了体现实体间的关系,需要设置主外键。为了设置主外键,表中有时需要添加ID列,如用户表中的UID列(用户编号)等。 告诉学员,为了表示属于哪个表,所以表中的列名前加了固定的前缀。 这样的好处是可以避免多个表中列名的重复。 * * 展示表间的关系: 让学员指出哪个表的哪一列与其他表的哪一列建立关系,哪个是主表,哪个是从表。
* * 4.世界万物都是联系的,一个系统中的实体间也是如此,所以我们还需要标出实体间的关系。 强调关系一般是动词。如用户发出主贴,发出就是一个关系,用于表示用户实体和主贴实体间的联系,它是一个动词。 提问学员: 1)跟贴和主贴有什么关系? 2)版块和用户(版主)有什么关系 3)主贴和版块有什么关系 4)跟贴和版块有什么关系 答案参考幻灯片。 * * 表设计后,很可能结构不合理,出现数据重复保存,简称数据的冗余,这对数据的增删改查带来很多后患,所以我们需要审核是否合理,就想施工图设计后,还需要其他机构进行审核图纸是否设计合理一样。 如何审核呢?需要一些有关数据库设计的理论指导规则,这些规则业界简称数据库的范式。 * * 讲解每个范式的含义:关键是说明范式的目的,这样规定有什么好处。 * * 总结: 方式多样,例如:可以指定某些睡觉的学员总结,随机抽号总结,集体总结,调动课堂氛围。