数据库让我头疼了好几天,主要是项目开始前没有规划好想要怎么弄。之前的想法是,结账是让固定用户充值的钱减去固定用户退卡的钱,加上临时用户消费的钱。这个算法的前提是临时用户不能充值和退卡。临时用户下机等于退卡,把卡表里的记录删掉。但是问题来了,算临时用户消费的钱的时候要联合卡表和上下机表,这两张表是有主外键约束的,卡表的记录删掉的话,就会报错。
理思路
到底要怎么算钱?不让临时用户充值和退卡好像不太合理?
临时用户上着机卡里的钱不够想充值,难道不让吗?下机等于退卡,一点下机卡表里的余额就变为0了,退卡表里没有记录操作员根据什么退钱?难道要设计成充了多少钱必须消费完,剩的不退,,不太合理吧。
最终的想法是:临时用户也可以充值和退卡,和固定用户唯一的区别就是没有学生信息,收费标准不一样。
卡表的设计
(1)退卡后状态改为“已退卡”
(2)注册的时候,一点击选择用户类型的组合框,就查自动生成卡号。如果注册固定用户且学号已存在,说明该用户注册过,就激活改卡,改变卡的状态和余额,添加一条新的充值记录
(3)在结账的时候把临时用户且已退卡的卡删除
其他问题
主键问题:充值表等的主键设置的是卡号,但是同样的卡号多次充值就会报错。
我的解决方法:把卡号联合日期和时间设成主键
师傅的建议:一般都以一个自增长列作为主键
小结
做事情之前要有一个规划,这次体会到文档和图的重要性,如果之前设计数据库的时候画好图,系统的各个功能都画好图,然后按照图开发就比较简单了。其次,学会搜索,网上有好多资源,学会站在巨人的肩膀上。