之前,学习编写机房收费系统的文档时,曾写过 机房收费系统数据库概念设计模型ER图 这篇文章,现在到了机房收费系统个人版重构阶段,需要再次进行数据库的设计。可以说,之前的数据库的概念设计给我现在的设计奠定了一定的基础,但是仍然发现自己的设计中有
之前,学习编写机房收费系统的文档时,曾写过 机房收费系统数据库概念设计模型——ER图 这篇文章,现在到了机房收费系统个人版重构阶段,需要再次进行数据库的设计。可以说,之前的数据库的概念设计给我现在的设计奠定了一定的基础,但是仍然发现自己的设计中有许多不合理并且需要改进的地方。
在这次的数据库设计当中,学习了一些数据库的命名规范,重温了经典的三范式(属性原子化,避免局部依赖,避免传递依赖)。但是发现,在需求面前,一些分属两张表的字段,为了方便,还是得放到一张表中,不得不破坏三范式。
现在将自己设计的数据库分享如下:(因为自己还没真正进行机房的重构,不知道在实际应用中,这些表是否合理,还请大家提宝贵意见。
)
数据库名ComputerRoomChargeSystem
学生信息表(T_StudentInfo)
名称
意义
类型
studentID
学号(主键)
Char(10)
studentName
姓名
Char(10)
sex
性别
Char(2)
department
系别
Char(20)
grade
年级
Char(10)
class
班级
Char(10)
这里,我将学生的信息和卡的信息分成两张表,首先,考虑到它们本身就属于不同的实体,其次,想到如果卡不用 了,就得把卡的信息删除,那么学生信息也得跟着删除(不过,后来想到,卡的信息可以不用删除,可通过标记其状态为“未使用”来区分)。最后,感觉把这么多字段放在一个表中,它看起来实在是太“臃肿”了。
用户信息表(T_UserInfo)
名称
意义
类型
UserID
用户名(主键)
Char(10)
realName
真实姓名
Char(10)
userLevel
用户级别
Char(8)
userPassword
用户密码
Char(10)
accountHolder
开户人
Char(10)
卡信息(T_CardInfo)
名称
意义
类型
cardID
卡号(主键)
Char(10)
studentID
学号(外键)
Char(10)
account
余额
Decimal(10,4)
usageState
使用状态
Char(6)
cardType
卡类型
Char(8)
registrationDate
注册日期
Date
registrationTime
注册时间
Time(0)
UserID
用户名
Char(10)
checkStatus
结账状态
Bit(1)
这里,使用状态用来标记该卡是使用,还是未使用(已退卡)。卡类型来标记是固定用户还是临时用户。
账单(T_AccountSheet)
名称
意义
类型
checkID
结账编号(主键)
Decimal(18,0)
lastCardMoney
上期充值卡金额
Decimal(18,4)
currentChargeMoney
本期充值金额
Decimal(18,4)
currentReturnMoney
本期退卡金额
Decimal(18,4)
currentConsumeMoney
本期消费金额
Decimal(18,4)
currentCardMoney
本期充值卡金额
Decimal(18,4)
checkDate
结账日期
Date
checkTime
结账时间
Time(0)
userID
用户名
Char(10)
账单,我为其设置了一个结账编号,作为主键,我想在真正建表时,可以按照结账编号从大到小排列,因为在打印账单或是日结账, 周结账都是结最近的账单吧。
本期充值卡金额=上期充值卡金额+本期充值金额-本期消费金额-本期退卡金额
充值记录表(T_ChargeRecord)
名称
意义
类型
cardID
卡号(外键)
Char(10)
chargeDate
充值日期
Date
chargeTime
充值时间
Time(0)
chargeMoney
充值金额
Decimal(10,4)
checkStatus
结账状态
Bit(1)
userID
用户名
Char(10)
退卡记录表(T_ReturnRecord)
名称
意义
类型
cardID
卡号(外键)
Char(10)
returnDate
退卡日期
Date
returnTime
退卡时间
Time(0)
account
退卡金额
Decimal(10,4)
checkStatus
结账状态
Bit(1)
userID
用户名
Char(10)
上下机记录表(T_OnOffLineRecord)
名称
意义
类型
cardID
卡号(外键)
Char(10)
onDate
上机日期
Date
onTime
上机时间
Time(0)
offDate
下机日期
Date
offTime
下机时间
Time(0)
offWay
下机方式
Char(8)
consumeMoney
消费金额
Decimal(10,4)
userID
用户名
Char(10)
checkStatus
结账状态
Char(6)
onFlag
正在上机标志
Bit(1)
在这个表中,我增加了结账状态这个字段,因为想到结账时,除了会结购卡数,充值金额,退卡金额,还要结消费金额。
基本数据表(T_BasicData)
名称
意义
类型
fixedPerCharge
固定每小时费用
Decimal(10,4)
temporaryPerCharge
临时每小时费用
Decimal(10,4)
increasingUnitTime
递增单位时间
SmallInt
leastTime
至少上机时间
SmallInt
prepareTime
准备时间
SmallInt
minMoney
最少金额
Decimal(10,4)
操作员工作记录(T_WorkLog)
名称
意义
类型
UserID
用户名(外键)
Char(10)
LoginDate
登录日期
Date
LoginTime
登录时间
Time(0)
ExitDate
注销日期
Date
ExitTime
注销时间
Time(0)
onFlag
正在上机标志
Bit(1)
computerID
机器名
Varchar(10)
小结:自己感觉数据库设计是件很有意思的事情,在画机房重构版的类图时,感觉还得先从数据库设计入手,所以数据库设计还是很重要的啊!