日期:2014-05-16 浏览次数:20441 次
机房收费系统——数据库表中隐藏字段的设计
前天,机房收费系统已验收,尽管自己做的时候很认真,经过组长的验收,还是发现了几个问题。
一是:数据库表的设计中,有的字段名的命名不规范,不能见名知其义,只有自己能看懂的字段命名不是好的命名。
如下图:T_User表中的Head字段名,它表示的是:该用户是由谁添加的。如果我不解释,别人很难一眼看出该字段表达的是什么意思。
二是:数据表中的“隐藏”字段没有发现。
我这里说的隐藏字段,其实是一些标识性字段,这些字段依据窗体的界面我们是很难发现的,而是要通过我们对业务的分析,从整体把握系统的角度才能发觉的字段。
我还以上面的T_User表为例,T_User表中的信息基本来自于“添加用户窗体”(如下图),如,表中的UserID,Password,Level,Username,但是表中还有些这段不能从添加用户窗体中看出来,比如Head字段,还有后面我讲到的Status字段,我把这些字段称为“隐藏”字段。这些隐藏字段在我们建表之初是很难考虑到的,但是它又是必须要有的字段,否则会给我们的程序带来很多的麻烦。比如T_User表中隐藏字段Status虽然与添加用户窗体无很大的关系,但是它与其它的窗体(删除用户窗体,结账窗体)有很大的关系。
比如我们 在“添加删除用户”窗体中,选中 "用户名=156"的这条记录,点击的“删除”按钮,是否真的从T_User表中删除这条记录呢?
只看表面,的确是界面上删除一条记录,数据库就删除一条记录,但是我们不要忘了数据库中的各个表是相互联系的,一张表可能与多个窗体相关联。
比如:T_User表中的数据不但与"添加删除用户"窗体,还有"结账"窗体有关系,结账窗体中的"操作员用户名"的数据就是来源于T_User表中的数据,如果我们真的把T_User表表中的某记录删除了,并且被删除的那个用户还没有结账,在结账的用户名中我们又不会看到删除记录的操作员名,那么于被删除的操作员永远也就不可能结账了。
T_User表中的用户名=156的这条记录要删除,但是其它窗体,比如结账窗体还要用到这条记录。
那么我们该怎么解决呢?
很好解决,我们在T_User表中在增加一个字段Status,用它来标记该用户是否还使用。当用户处于使用状态时,Status=True,否则Status=False .
在机房收费系统中,还有一个表的设计存在类似的问题,比如学生信息表,当我们学生注册卡号信息时,我们向学生表里面添加基本数据,但是当学生退卡时,并不时直接从数据库里面删除该卡号记录,而是在学生信息表中定义一个Status字段,用来标识它是否处于使用状态。同样的道理,学生信息表中的信息,除了注册窗体模块,退卡窗体模块使用外,还有其它窗体模块与此表有关系。