跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教大佬们,关于判断一个学生和一个老师有无关系的问题
未分類
29 12 月 2020

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

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

資深大佬 : akmisty 0

用途(需求)

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

已有如下表

  • 学生表(student):id, name, …
  • 老师表(teacher):id, name, …
  • 班级表(class): id, name, …
  • 班级和学生的多对多关系表(class_student):id, class_id, student_id, …
  • 班级和老师的多对多关系表(class_teacher):id, class_id, teacher_id, …

关系介绍

  • 1 个学生可以在多个班级
  • 1 个老师也可以在多个班级

输入

输入是 student_id 和 teacher_id

目前的方案:

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

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

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

大佬有話說 (41)

  • 資深大佬 : jones2000

    老师表和学生表增加班级 ID 数组的 json 字段。这样 1 条记录就可以保存 1 个学生对应多个班级的信息了

  • 資深大佬 : gesse

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

    你考虑的这个方案是最优方案
    且学生变动、老师变动,对数据库来说,不是频繁的数据变动事件。空间换时间,绝对划得来。

  • 主 資深大佬 : akmisty

    @jones2000 这方法还可以,但是在批量改动时 班级的学生、老师时,每个老师学生都要查出其所有班级,然后更新相应的字段

  • 資深大佬 : cmdOptionKana

    学生和老师一共就没几个人,完全不需要考虑性能问题,只考虑逻辑清晰易懂、不易出错就行。

  • 資深大佬 : OaO

    对不起,我检讨,我不是带着学术讨论的目的点进这个标题的…( _ _)ノ

  • 資深大佬 : leafre

    对不起,我想歪了

  • 主 資深大佬 : akmisty

    @OaO 哈哈,看了你的回复后,我自己也不忍直视了

  • 資深大佬 : piecezzz

    对不起,我理解的关系不是这种关系

  • 資深大佬 : yaocai321

    学生和老师竟然有多对多的关系, 太可怕了. 道德沦丧.

  • 資深大佬 : cco

    你这标题- -。我手误了。

  • 資深大佬 : LYEHIZRF

    看到标题想到 NLP 关系抽取

  • 資深大佬 : Ranying

    希望的点进来,失望的走出去。

  • 資深大佬 : PeterYang1996

    失望

  • 資深大佬 : reed2020

    失望

  • 資深大佬 : TimePPT

    试试图关系数据库

  • 資深大佬 : wjfz

    直接 INNER JOIN 现有两张关系表如何?

  • 資深大佬 : jch

    失望

  • 資深大佬 : lyusantu

    SELECT count(1)
    FROM class_teacher
    WHERE teacher_id in(
    SELECT class_id FROM class_student WHERE student_id = #{studentId}
    )
    AND teacher_id = #{teacherId}

    判断查询结果是否 > 0 即可知道是否有无关系?

  • 資深大佬 : kevinGraham

    对不起,这不是我想要看到的关系

  • 資深大佬 : cking

    对不起,我以为是师生恋

  • 資深大佬 : daijialong

    对不起,我以为是某国剧情点进来了

  • 資深大佬 : XiaoxiaoPu

    “`
    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

    引入缓存

  • 資深大佬 : motherfaka

    班级和老师也多对多的话,现有的方案就已经挺不错了,按道理一个班级的老师不会太多,可以考虑在班级字段里增加老师 id 的数组或者固定多个字段,降低业务复杂程度

  • 資深大佬 : laminux29

    这个问题本质是愿意为了节约时间来浪费空间,还是为了浪费空间来节约时间。。

  • 資深大佬 : bluefalconjun

    希望的点进来,失望的走出去 +1

  • 資深大佬 : fuxiuyin

    我怎么觉得这种一学期才会变一次的数据,程序起来的时候从数据库里读出来需要的数据,然后内存里面建方便用的数据结构之后查就行了,比如以教师 ID 为 key,学生 ID set 为 value 的 dict 。

  • 資深大佬 : linux40

    节点本来就是 MySQL,怎么这么多废话的?

  • 資深大佬 : wednesdayco

    对不起,这不是我想要看到的关系

  • 資深大佬 : cue

    我特喵的都脑补了好几个番号了 你就给我看这个???

  • 資深大佬 : iscook

    对不起,内容和我想的不一样

  • 資深大佬 : 52coder

    点进来看到内容有点失望,哈哈哈

  • 資深大佬 : ZzFoo

    什么关系?啊?你说什么关系?互为相反数啊!

  • 資深大佬 : coderABC

    这种问题不屑于回答,因为根本就不是我理解的关系

  • 資深大佬 : writesome6

    失望的内容

  • 資深大佬 : user8341

    不晓得 MySQL 还有这功能!

  • 資深大佬 : janssenkm

    这么点数据量,怎么画都不慢

  • 資深大佬 : zqwcrystal

    如果纯用 sql 的话上就有解决办法,如果 sql 加代码逻辑实现的话可以分别查出来学生和老师对应的班级,然后两个数组取交集,为空则不存在关系,不为空则存在关系,即使学生或者老师表的数据再多,性能也不受影响

  • 資深大佬 : zifangsky

    这种涉及到判断关系的问题,可以考虑试试用 并查集 这种数据结构来求解,每次有新的 学生 /老师 /班级 的关联关系时,就往并查集代表的数组中插入一条记录,删除关联关系时也做相应处理即可。最后,如果要判断某两者之间是否存在关系,也可以在线性时间复杂度内得到结果。

  • 資深大佬 : xyjincan

    当初我是定义了一个课程表,

  • 資深大佬 : APi85

    失望

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具