java学生管理系统,选课时,怎么判断当前有哪些课程可以选(选了的不可选)。我觉得我的数据库设计出了点问题,可以给我讲一下你们的思路
这是我有关课程的数据库表
例如现在有3门课程 C JAVA PHP
问题:查询学生A还可以选的课程
一个学生A选了C,那么C就不能被学生A所选了,但是列出学生A还可以选的课程也就是JAVA 和PHP
我的思路是:先在课程记录表查询出学生A已选的课程,然后再课程表作比较,选出没有被选
但是我觉得思路有点不清晰
不太清楚你可选不可选的概念是什么,我只能简单的理解为一个类似库存的玩意,如果选的数量到了上限(库存被扣完)及重复选择外都可选。
如果是这样,最起码几个基础表要有
课程表,记录基础信息及余量
用户表,记录用户信息,登录密码啥的
用户选课表,记录用户选课的历史数据(如果考虑多次使用的话需要在表中加入学期标识已区分)
在选课的时候(抛开前面那些展示什么的),最后关键的地方就是需要保证课程余量扣减和用户选课表的事务性,这个地方简单点就一个普通数据库级事务就可以搞定了,确保在用户选择后发现任何地方不满足选课条件则直接回滚。
完备点的可以加个用户操作历史记录表,这个表的数据只增不改,完全反应用户的各种对数据的变更,这个具有很强的证据作用。
我已经补充了问题,麻烦
@oneStep12: 你补充的问题
select * from tb where column_name not in (select column_name from tb2 where...)
@Daniel Cai: 好的,谢谢
条件太少`
我已经补充了问题,麻烦
最简单的就是加一张表,表里两个字段,一个记录课程所能选的次数,一个记录该课程被选了多少,达到所能选的次数就不能选了。
我已经补充了问题,麻烦
学生A 选择了 C语言课程 ,那么学生A 的这条数据里肯定有一个字段是要用来存 选中的课的标识的 ,假如这个字段名叫做chose_course , 那么选了C语言课程,就把C语言课程的标识 放进入,多门课用 ' , ' 号隔开,然后查询的时候,就用学生表里chose_course字段存的科目标识去匹配课程表里的科目标识,匹配上了就是已选,匹配不上就是还没选 ,
学生A 选择了 C语言课程 ,那么学生A 的这条数据里肯定有一个字段是要用来存 选中的课的标识的 ,假如这个字段名叫做chose_course , 那么选了C语言课程,就把C语言课程的标识 放进入,多门课用 ' , ' 号隔开,然后查询的时候,就用学生表里chose_course字段存的科目标识去匹配课程表里的科目标识,匹配上了就是已选,匹配不上就是还没选 ,