开始机房重构了,不自己设计一个数据库怎么好意思说自己是在重构机房呢?而且原数据库本身就有很多瑕疵,不符合数据库的规范,今天我们就根据数据库三范式,来设计属于我们自己的一版数据库。
本次的数据库是为了服务于我们的机房收费系统,机房收费系统大致的要求是什么呢?看图:
这是我们机房收费系统的主要的功能,这涉及到许多需要存储成表的数据。接下来看能产生表数据的图:
这其中,能生成6个记录表,还有一个用户表,一个账单表,一个卡表,还有一个存储基础数据的表,所以在我的设计中,共用到了10张表。
在之前的原数据库表中,卡和学生是一张表的,接下来我们说,为什么把它们分开了。
数据抽象实体:学生、卡、上下机记录、退卡记录、充值记录、用户、值班教师、工作记录、账单、基础数据表。
下面这张图是我的数据库实体联系图,也就是我们常说的ER图:
ER图中没有画属性,在下面的实体设计中会有体现,这张图中,没有M比N的关系,所以生成的表也就是图中所有的实体,共10个。
学生(学号,姓名,年龄,性别,系别,专业,年级,班级,备注)
T_STUDENTS(StudentNo,StudentName,Age,Sex,Department,Major,Grade,Class,Explain)
卡(卡号,学号,卡名,注册日期,余额,类型,状态)
T_CARDS(CardNo,StudentNo,CardName,RegisterDate,Cash,Type,Status)
上下机记录(卡号,卡名,机器名,上机日期,上机时间,下机日期,下机时间,消费时间,消费金额,状态)
T_ONOFFLINE(CardNo,CardName,Computer,OnDate,OnTime,OffDate,OffTime,ConsumeTime,ConsumeCash,Status)
退卡记录(卡号,卡名,退卡金额,退卡日期,退卡时间,状态,操作者)
T_BACKCARD(CardNo,CardName,BackCash,BackDate,BackTime,Status,Head)
充值记录(卡号,卡名,充值金额,充值日期,充值时间,状态,操作者)
T_RECHARGE(CardNo,CardName,AddMoney,ChargeDate,ChargeTime,status,Head)
用户(用户名,密码,用户级别,状态,开户人)
T_USERS(UserID,PassWord,Level,Status,Head)
值班教师(用户名,机器号,级别,登录日期,登录时间)
T_TEACHER(UserID,Computer,Level,LoginDate,LoginTime)
工作记录(用户名,登录日期,登录时间,退出时间,机器名,状态)
T_WORKLOG(UserID,LoginDate,LoginTime,ExitTime,Computer,Status)
账单(注册金额,充值金额,上机消费金额,退卡金额,盈利,结账日期,结账时间,操作者)
T_CHECK(RegisterCash,RechargeCash,ConsumeCash,BackCash,Profit,CheckDate,CheckTime,Head)
基础数据(固定用户费用,临时用户费用,累加时间,准备时间,最低消费,修改日期,修改时间,操作者)
T_BASICDATA(Rate,TmpRate,UnitTime,PrepareTime,LimitCash,ModiffyDate,ModiffyTime,Head)
物理设计阶段就是根据字段的类型,分配合理的数据类型。由于比较懒,就贴出数据库的实体图好啦:
学生
卡
上下机记录
退卡记录
充值记录
用户
值班教师
工作记录
账单
基础数据
对于数据库设计,这只是初版,这个版本并不是最终的,因为还有好多可以优化的地方等待我去发现。
对于字段类型的分配,可以参考下一个博客:数据类型。