前言
前一段时间要参加自考,要考《数据库原理》,在其中也更加了解了好多数据库的问题。比如,如何创建一个好的数据库,怎么创建数据库。
图一 数据库创建框架
现在开始机房的重构,以前用的是师哥师姐设计的数据库,现在发现自己也可以设计出来了,所以,按这步骤来自己设计一个机房收费系统的数据库。
一、规划
由于机房收费系统是第二遍做的,所以在总体规划阶段很容易看出系统在技术、经济、效益、法律是可行的;目标就是要更好的搭配应用程序合理运行。
二、需求分析
这一阶段是计算机人员(系统分析员)和用户双方共同收集数据库所需要的信息内容和用户对处理的需求。并以需求说明书的形式确定下来,作为以后系统开发的指南和系统验证的依据。
在机房收费系统中,分配了三种权限的用户。用户可以实现不同的工能。
图二 机房收费系统功能框架
三、概念设计
目标:反应用户单位信息需求的数据库概念结构。
概念模式是独立于计算机硬件结构,独立于支持数据库的DBMS。
机房收费系统的E-R图
图三 机房收费系统ER图
我们通过ER图就可以找到存在的实体,可以抽象成表。
四、逻辑设计
主要是把概念模型转换成DBMS能处理的逻辑模型。转换过程中要对模型进行评价和性能测试,以便获得较好的模式设计。
在机房收费系统中,我们可以把在概念设计中的ER图转换为我们的逻辑模型。
机房收费系统的关系模式:
1)用户信息(用户编号、用户姓名、级别、密码、创建者)
2)基本数据(用户编号、会员单价、普通单价、递增时间、至少上机时间、准备时间、最少金额、编辑日期、编辑时间)
3)学生信息(学号、用户编号、学生姓名、性别、系别、年级、班级、备注、注册日期、注册时间)
4)卡(卡号、用户编号、卡状态、卡类型、金额、是否结账、注册时间)
5)充值(卡号、用户编号、充值金额、充值日期)
6)上机情况(卡号、上机日期、上机时间、下机日期、下机时间、消费时间、消费金额、上机状态)
7)退卡(卡号、用户编号、退还金额、退还日期)
8)日结账单(用户编号、上期余额、当日充值金额、当日消费、单日退还、本期金额、日期)
9)周结账单(用户编号、上期余额、当日充值金额、当日消费、单日退还、本期金额、日期)
10)工作记录(用户编号、上机时间、下机时间、所在机号、用户状态)
五、物理设计
这个阶段主要是在数据库的存储记录格式、存储记录安排和存取方法。这个阶段完全依赖给定的硬件环境和数据库产品。
按照需求把没有个表设计出来:
(1)用户信息(User_Info)
描述 | 字段名 | 数据类型 | 大小 | 是否空 |
---|---|---|---|---|
用户编号 | UserNo | varChar | 10 | |
用户姓名 | UserName | varChar | 10 | 是 |
级别 | Level | varChar | 10 | |
密码 | Password | varChar | 10 | |
创建者 | ConstuctorNo | varChar | 10 | 是 |
(2)基本数据(BasicData_Info)
描述 | 字段名 | 数据类型 | 大小 | 是否空 |
---|---|---|---|---|
用户编号 | UserNo | varChar | 10 | |
会员单价 | VIPRate | int | ||
普通单价 | CommonRate | int | ||
递增时间 | IncreaseTime | int | ||
最少上机时间 | LeastTime | int | ||
准备时间 | ReadyTime | int | ||
最少金额 | LeastCash | int | ||
编辑日期时间 | SetDateTime | DataTime | 是 |
(3)学生信息(Student_Info)
描述 | 字段名 | 数据类型 | 大小 | 是否空 |
---|---|---|---|---|
用户编号 | UserNo | varChar | 10 | |
学号 | StudentNo | varChar | 10 | |
学生姓名 | StudentName | varChar | 10 | |
性别 | Sex | varChar | 10 | |
系别 | Department | varChar | 10 | |
年级 | Grade | varChar | 10 | |
班级 | Class | varChar | 10 | |
备注 | Explain | varChar | 50 | 是 |
注册时间 | RegisterDateTime | DataTime | 是 | |
学生状态 | StudentState | varChar | 10 | 是 |
卡号 | CardNo | varChar | 10 |
(4)充值(Recharge_Info)
描述 | 字段名 | 数据类型 | 大小 | 是否空 |
---|---|---|---|---|
卡号 | CardNo | varChar | 10 | |
用户编号 | UserNo | varChar | 10 | |
充值时间 | RechargeDateTime | DataTime | ||
充值金额 | Recharge | int |
(5)上机情况(Online_Info)
描述 | 字段名 | 数据类型 | 大小 | 是否空 |
---|---|---|---|---|
卡号 | CardNo | varChar | 10 | |
上机时间 | OnComDateTime | datatime | ||
下机时间 | OffComDateTime | datatime | ||
消费时间 | UseTime | int | ||
消费金额 | UsedCost | int | ||
上机状态 | ComState | varchar | 10 | |
电脑名称 | ComName | int |
(6)退卡(BackCard_Info)
描述 | 字段名 | 数据类型 | 大小 | 是否空 |
---|---|---|---|---|
卡号 | CardNo | varChar | 10 | |
用户编号 | UserNo | varChar | 10 | |
退卡时间 | BackDateTime | DataTime | ||
退卡金额 | BackCash | int |
(7)卡(card_Info)
描述 | 字段名 | 数据类型 | 大小 | 是否空 |
---|---|---|---|---|
卡号 | CardNo | varChar | 10 | |
用户编号 | UserNo | varchar | 10 | |
余额 | Cash | int | 是 | |
卡类型 | CardType | varchar | 10 | |
结账 | IsCheck | varchar | 10 | |
注册时间 | RegisterDateTime | datetime | ||
卡状态 | CardState | varchar | 10 |
(8)工作记录(WorkLog_Info)
描述 | 字段名 | 数据类型 | 大小 | 是否空 |
---|---|---|---|---|
用户编号 | UserNo | varChar | 10 | |
上机时间 | EnterComDateTime | datetime | ||
下机时间 | OffComDateTime | datetime | 是 | |
电脑名称 | ComName | varchar | 50 | |
用户状态 | UserState | varchar | 10 |
(9)日结账单(DayCheck_Info)
描述 | 字段名 | 数据类型 | 大小 | 是否空 |
---|---|---|---|---|
用户编号 | UserNo | varChar | 10 | |
上期余额 | RemainCash | int | 是 | |
当日充值金额 | RechargeCash | int | 是 | |
当日消费 | ConsumeCash | int | 是 | |
当日退还 | BackCash | int | 是 | |
今日金额 | AllCash | int | 是 | |
日期 | CheckDate | date |
(10)周结账单(WeekCheck_Info)
描述 | 字段名 | 数据类型 | 大小 | 是否空 |
---|---|---|---|---|
用户编号 | UserNo | varChar | 10 | |
上周余额 | RemainCash | int | 是 | |
本周充值金额 | RechargeCash | int | 是 | |
本周消费 | ConsumeCash | int | 是 | |
本周退还 | BackCash | int | 是 | |
本周金额 | AllCash | int | 是 | |
日期 | CheckDate | date |
六、数据库实现
把表建立起来后基本就完成了,这个时候就要对数据库和应用程序进行交流,引用这个数据库,数据库试运行。
七、数据库运行与维护
在编写程序的过程中,发现有的地方数据库的数据类型会有影响,可以进行更新更改。对数据库进行维护。
<号外>心灵鸡汤
通过对数据库的设计,我又从新走了一遍软件的创建过程,基本和软工的思想是一样的,其中还是需要我们不断的理解不断的创新,比如,ER图的画法,如何找实体,如何找出其中的关系,这都是我们这个阶段都要掌握的,这就是我们的基础!
【作者:王雷 http://blog.csdn.net/kisscatforever】