请教大佬们,关于判断一个学生和一个老师有无关系的问题

2020-12-28 14:47:51 +08:00
 akmisty

用途(需求)

因老师只能处理自己的学生,所以需要检查关系

已有如下表

关系介绍

输入

输入是 student_id 和 teacher_id

目前的方案:

  1. 先通过 student_id 去 class_student 查得学生所在的所有班级 ID class_ids,
  2. 再用 class_ids 和 teacher_id 去 class_teacher 验证

请问有没有更好的方案呢?

有考虑加个关系表 student_teacher 但想到每次加老师的,加学生到班级的时候,要插 n 条记录到关系表,不理想

4902 次点击
所在节点    MySQL
41 条回复
daijialong
2020-12-28 17:01:04 +08:00
对不起,我以为是某国剧情点进来了
XiaoxiaoPu
2020-12-28 17:02:05 +08:00
```
select 1
from `class_student`
inner join `class_teacher` on `class_student`.`class_id` = `class_teacher`.`class_id`
where `class_student`.`student_id` = #{student_id}
and `class_teacher`.`teacher_id` = #{teacher_id}
limit 1
```
dynastysea
2020-12-28 17:05:12 +08:00
引入缓存
motherfaka
2020-12-28 17:06:13 +08:00
班级和老师也多对多的话,现有的方案就已经挺不错了,按道理一个班级的老师不会太多,可以考虑在班级字段里增加老师 id 的数组或者固定多个字段,降低业务复杂程度
laminux29
2020-12-28 17:14:12 +08:00
这个问题本质是愿意为了节约时间来浪费空间,还是为了浪费空间来节约时间。。
bluefalconjun
2020-12-28 17:17:41 +08:00
希望的点进来,失望的走出去 +1
fuxiuyin
2020-12-28 17:20:19 +08:00
我怎么觉得这种一学期才会变一次的数据,程序起来的时候从数据库里读出来需要的数据,然后内存里面建方便用的数据结构之后查就行了,比如以教师 ID 为 key,学生 ID set 为 value 的 dict 。
linux40
2020-12-28 17:22:48 +08:00
节点本来就是 MySQL,怎么这么多废话的?
wednesdayco
2020-12-28 17:29:05 +08:00
对不起,这不是我想要看到的关系
cue
2020-12-28 17:32:51 +08:00
我特喵的都脑补了好几个番号了 你就给我看这个???
iscook
2020-12-28 17:54:42 +08:00
对不起,内容和我想的不一样
52coder
2020-12-28 17:59:50 +08:00
点进来看到内容有点失望,哈哈哈
ZzFoo
2020-12-28 18:38:50 +08:00
什么关系?啊?你说什么关系?互为相反数啊!
coderABC
2020-12-28 20:45:43 +08:00
这种问题不屑于回答,因为根本就不是我理解的关系
writesome6
2020-12-28 21:55:57 +08:00
失望的内容
user8341
2020-12-29 03:56:21 +08:00
不晓得 MySQL 还有这功能!
janssenkm
2020-12-29 07:53:00 +08:00
这么点数据量,怎么画都不慢
zqwcrystal
2020-12-29 11:44:37 +08:00
如果纯用 sql 的话楼上就有解决办法,如果 sql 加代码逻辑实现的话可以分别查出来学生和老师对应的班级,然后两个数组取交集,为空则不存在关系,不为空则存在关系,即使学生或者老师表的数据再多,性能也不受影响
zifangsky
2020-12-29 14:59:33 +08:00
这种涉及到判断关系的问题,可以考虑试试用 并查集 这种数据结构来求解,每次有新的 学生 /老师 /班级 的关联关系时,就往并查集代表的数组中插入一条记录,删除关联关系时也做相应处理即可。最后,如果要判断某两者之间是否存在关系,也可以在线性时间复杂度内得到结果。
xyjincan
2020-12-29 18:58:09 +08:00
当初我是定义了一个课程表,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/739645

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX