个人版机房收费——数据库设计

在做机房收费系统个人版的时候又一次的遇到了数据库设计方面的内容,还记得第一次机房收费系统的时候,数据库的设计基本上是边敲边设计的,搞得特别的乱,也不符合编程的规范。既然我们现在已经是专业人士了,那么就应该采取一些专业的手段来设计,并且一个数据库设计的好坏直接影响到后台数据,对软件的运行效率也是密切联系的。下面就分享下这次做数据库的心得。

ER模型

在自学考试中,学习过有关ER模型方面的知识,这是被广泛被采用的概念模型设计方法,就是所谓的图形的方式来展示用户需求中各方面的联系,这与Use Case是不一样,用例图只是单一的展示了用户的需求,没有加入任何的关系操作,而ER模型在此基础上引入了联系的基本元素。

基本元素

实体:一个数据对象,指应用中可以区别的客观存在的事物

联系:表示多个实体间的关系

属性:实体的某一特性

操作方法

1.分析需求

下面机房收费系统中用户的描述

学生:可以上机,查看自己的余额,查看自己的上机记录,还有自己的充值记录,并且可以自己修改自己的密码。

值班教师:我是机房的值班老师,由我来管理学生的上机情况,我的职责是负责同学上机,并且可以帮助

同学注册,充值和退卡,也可以管理学生的上机情况。当然了也可以查看今天收取金额的情况。

管理员:我可以管理值班教师,比如添加和删除值班教师,查看他们的工作记录,并且我也可以

把近段时间来的金额进行汇总结账,只能由我来设置学生上机消费的金额信息信息

2.设计局部ER模型

2.1 确定局部结构的范围

我们从用户的需求中,然后根据用户的不同职责来划分出范围(学生、值班教师、管理员)

2.2 定义实体

这就需要从每一个局部的结构中概括出一些实体类型

比如学生这个职责范围内的实体(学生、上机情况、余额情况、密码等)

2.3 定义联系

为实体与实体之间根据需求分析的结果,考察是否存在联系

2.4  分配属性

最后根据需求分析的结果,为每一个实体定义自己的特性,例如学生的属性有——姓名、卡号、性别等

下面是学生ER图的连接http://my.csdn.net/my/album/detail/1764165

3.设计全局ER模型

3.1 确定公共实体

当分别设计完局部的ER图后,就可以把局部合并成为全局,在合并的过程中也要合并实体,因为不同

的类别范围内查找的实体可能会重复。

3.2 合并局部ER模型

在确定完公共实体后,就可以根据公共的实体来合并局部的ER图

下面是合并完后全局ER图的连接http://my.csdn.net/my/album/show/274159

通过ER模型我们就能够很清楚的了解到软件项目中包括的实体,以及实体与实体之间的联系,就能够从宏观上

把握软件的架构。

    关系模型

所谓的关系模型简单的说就是我们数据库中一张一张的表,当然了数据库中的数据也有自己的设置规则

1.1 实体参照性规范

主键值不能为空,否则主键就起不到惟一标识的作用

1.2参照完整性原则

在数据表中的外键值不是空值就是定于其他表的主键值

1.3 用户定义完整性规则

为了方便用户的管理,用户还可以自己制定相应的数据约束

ER模型到关系模型的转变

在ER模型中有:实体、联系和属性,我们知道在数据库中有记录、字段和表名

这些都是相互对应的,下面就说一下如何来从ER模型来转变为关系模型

转变

1.1 实体转换为模型

1.2 若实体间联系是1:1,则可以在两个实体间加入任何一个实体的主键值

1.3 若实体间联系是M:N,则可以把两个实体的主键提取出来重新组合成新的关系

最后机房收费系统后的关系模型如下:


教师(教工号、水平、年龄、性别、姓名、状态)


学生(卡号、学号、班级、年级、性别、姓名、系、密码、状态)


退款记录(学生卡号教工号、值班教师、退款日期,退款金额,退款人员、退款时间)


收取金额(学生卡号教工号、值班教师,收取日期、收取金额、收款人)


基本数据(教职工号、临时用户费用、递增时间、至少上机时间、准备时间、最少金额)


值班记录(教工号、值班教师、值班日期、值班时间、下机日期)


充值记录(学生卡号、充值教师、充值金额、充值日期、充值时间)


上机记录(学生卡号、上机日期、上机时间、下机日期、下机时间)


日结账单(教工号、上次余额、本日消费金额、本日充值金额、本日退款金额、日期)


周结账单(教工号、上周余额、本期消费金额、本期充值金额、本期退款金额、日期)

  优化

1 消除重复

我们看到教师查看收取金额记录和学生的充值记录是重复的,所以需要去除重复来消除冗余。

2.三范式

1NF:表中的列是不可以在分的(原子性)

例如一张员工信息的表(姓名、住址、电话号码),但是员工的电话号码又分为住址号码和手机号码,所以就违反了1NF

要修改的话,要不就把电话号码的属性拆分为住址号码和手机号码,要不就强制员工直流一个号码

2NF:表中不存在重复的记录(即表中的行是不可以重复的)

我们就拿上面机房收费系统设计出来的表为例,学生信息表(学号、姓名、班级、系别)。如果这样设计的话,我们可以知道一个系里面大概有1000多名学生,那么这个字段就会在这站张表中重复1000多次,而且还有班级这个字段也是同样的道理

这样做的话就会造成

数据冗余:一站表中多次出现了重复的记录

更新异常:若要调整表中系别的字段的话,所有的系别都需要更新,有可能出现同一个学生出现在不同的系里面

插入异常:如果学校新开一个系别,如果没有学生的话,那么这个系别无法保存进去

要改的话把系别和学生信息区别开来(系别号、系别)和(学号、系别号、姓名、性别),然后这两张表通过系别号来进行连接

3NF:一个表中的列不依赖与另一个表中的非主键的列

其实数据库的要求就是要遵从概念单一化"一事一地"原则,即一个关系模式描述一个实体或者实体间的一种联系。通过三范式的约束后,我们来看一下最后的数据库


教师(教工号、系别号、年龄、性别、姓名、状态)


系(系别号、系)


学生(卡号、学号、班级、年级、性别、姓名、系、密码、状态)


退款记录(学生卡号教工号、值班教师、退款日期,退款金额,退款人员、退款时间)


基本数据(教职工号、临时用户费用、递增时间、至少上机时间、准备时间、最少金额)


值班记录(教工号、值班教师、值班日期、值班时间、下机日期)


充值记录(学生卡号、充值教师、充值金额、充值日期、充值时间)


上机记录(学生卡号、上机日期、上机时间、下机日期、下机时间)


日结账单(教工号、上次余额、本日消费金额、本日充值金额、本日退款金额、日期)


周结账单(教工号、上周余额、本期消费金额、本期充值金额、本期退款金额、日期)







个人版机房收费——数据库设计

时间: 2024-10-13 01:59:35

个人版机房收费——数据库设计的相关文章

总结个人版机房收费系统

个人版机房收费系统是在学习完vb.net语言和三层架构思想后的第一个系统,我们要从C/S向B/S进发过程中一个铺路石,在没开始C/S之前,虽然没有什么直接的联系.但学习就是有很多共同的地方,在这个过程中有很多知识是在巩固,有很多东西新接触或者实践.我最大的感受就是,走过了这个过程就一定会带走些什么. 个人版机房收费和第一版系统有很多相同的地方,这些相同的地方就在进行重构的过程中,帮助我们i+1. 比如: 1.开发语言:虽然一个用的是vb一个是vb.net.但不得不说有了第一版的经验,重构版用起来

个人版机房收费系统总结

用了一个月的时间,重构完成了个人版的机房收费系统,不来个总结心里就有点儿不踏实. 首先说说一年前第一次敲机房收费系统的事儿,那是纯面向过程,能实现功能就可以.当初完成了这个系统,可谓是在提高班学习中的又一个里程碑,纯手工制作,精心打造.我们学会了分析业务流程,消化吸收VB和数据库的学习成果,提高对代码的亲和力,培养对编程的兴趣. 一年后的现在经历了第二次机房收费系统,深刻体会到了米老师编制培养计划的良苦用心,我们其实是在攀登一座高山,一步一个台阶.在第一次机房收费系统中暴露出来的问题得以解决和完

机房重构—数据库设计

数据库设计--概念设计阶段 这个阶段主要是根据需求画出ER图,如下图所示,是我根据机房收费系统的需求画出的ER图,图中有6个实体,分别为:教师.学生.卡.基础数据.账单.电脑,它们之间有一对多的关系也有多对多的关系,其中教师还有很多不同的角色,这里没做细分,不过以后我们会做安全机制方面的设计就要仔细对待了.根据转换原则,但我们把ER图转换为表时多对多的关系就会抽出一张表,这样在逻辑设计阶段我们就可以得到相应的10张表(电脑只有一个属性,故省略). 数据库设计--逻辑设计阶段 下图是我根据ER图得

机房重构--数据库设计(二)

在完成了机房收费系统数据库需求分析.ER图.关系模型的阶段之后,就该根据关系模型来设计数据库了,下面是我对这个阶段的一个总结. 这次的关系模型有用户.学生.卡.基本数据.电脑.账单.工作记录.充值.退卡.上机共10个,要由这10个关系模型来设计数据库表,其中对于电脑(电脑名  系统时间  系统日期)这个关系,没有必要单独拿出来设计,其他的几个都需要转换成数据表,在确定了哪些关系模型需要转换为关系表之后,就需要分析的数据表字段的明确以及数据表三范式的规范的确定. 先来重温下数据库设计三大范式: (

机房收费系统重构(六)—泛型集合

      机房收费系统重构仍在进行,但是在进行过程中,也许数据类型的转换是永远也避不开的,今天我就来讲讲关于数据类型转换的问题!       在个人版机房收费系统中,在DAL层中,如果是增删改,是不需要返回参数的,返回值是Boolean,但是在查询中,需要有返回值,而且返回的是Dateset类型,所以在这里问题就来了.      如果在返回值过程中一直返回的是表的类型,也许就没有那么多麻烦的事情了,但是dateset使得系统具有了强耦合性,但是如果返回的是实体类呢!关于这点我也查了查资料,为什

机房收费系统——存储过程的运用

在机房收费系统中的"结账"部分,要求选中操作员然后点击"结账"button后,将该操作员办理的注冊.充值.退卡业务的状态改为"已结账".注冊.充值和退卡分别记录在三张表中,假设依照传统的办法,须要在DAL层写三个函数,分别update每张表的isCheck为"true",且不说写多少代码,费多少力气,这样还减少了系统的执行速度,easy出错. 在个人版机房收费系统重构中,我们不是像曾经那样仅仅要功能实现就可以,而是变"

机房收费系统中遇到的SQL语句问题

个人版机房收费系统正在进行中,遇到了几个有关SQL语句的问题. 1.sum函数的使用: 在结账部分,要求出某个表中某一列的和.在第一次机房系统中,我不知道sum函数的存在,很傻很天真地用循环一个一个往上加.下面以求所有卡中余额的和来说说sum函数怎么使,SQL语句为:select sum(cash)from T_Card.这个格式不是固定的,可以根据需求更改,比如求多列的和:select sum(列名1),sum(列名2)...from [表名] where....查询出来的结果只有一行,如果只

重构机房收费系统——数据库设计

曾记得,第一次编写机房收费系统的文档模板,整整有12个文档需要编写,仅仅花了两三天的时间就让师傅验收,完结项目,就这样囫囵吞枣的文档编写完成了. 要知道:欠下的账,终究是要还的.现在到了机房收费系统个人版重构阶段, (1)进行数据抽象,设计局部概念模型: (2)将局部概念模型综合成全局概念模型 (3)就可以按要求绘制机房收费系统数据库概念设计模型--ER关系图. 可以说,之前的数据库的概念设计给我奠定了一丢丢的设计基础,外加<数据库系统原理>中的三范式定理,本着求知好学.虚心请教的理念,于是乎

机房收费系统数据库设计

之前,学习编写机房收费系统的文档时,曾写过 机房收费系统数据库概念设计模型--ER图 这篇文章,现在到了机房收费系统个人版重构阶段,需要再次进行数据库的设计.可以说,之前的数据库的概念设计给我现在的设计奠定了一定的基础,但是仍然发现自己的设计中有许多不合理并且需要改进的地方. 在这次的数据库设计当中,学习了一些数据库的命名规范,重温了经典的三范式(属性原子化,避免局部依赖,避免传递依赖).但是发现,在需求面前,一些分属两张表的字段,为了方便,还是得放到一张表中,不得不破坏三范式. 现在将自己设计