之前,学习编写机房收费系统的文档时,曾写过 机房收费系统数据库概念设计模型——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)