Mysql 如何使用必备数据库创建学生主题

Mysql 如何使用必备数据库创建学生主题,mysql,sql,database,vb.net,phpmyadmin,Mysql,Sql,Database,Vb.net,Phpmyadmin,我正在尝试为主题先决条件创建数据库。这是我的当前表 “学生” “主题信息” 这是用于连接的连接表 现在两个 “学生科目” 示例:如果studentID 1235仍然没有使用正在编程1的主题id 1,则用户无法添加正在编程2的主题id 5,因为它是编程1的先决条件 我不知道我的桌子是否正确。如果正确,我如何设计该数据库?我不知道如何将先决条件连接到主题和学生id。非常感谢。首先,您需要使用以下代码(MySQL 8+)递归查找指定主题的所有先决条件(父项): () 然后,通过检查该学生是否拥有从上一

我正在尝试为主题先决条件创建数据库。这是我的当前表

“学生”

“主题信息”

这是用于连接的连接表 现在两个

“学生科目”

示例:如果studentID 1235仍然没有使用正在编程1的主题id 1,则用户无法添加正在编程2的主题id 5,因为它是编程1的先决条件


我不知道我的桌子是否正确。如果正确,我如何设计该数据库?我不知道如何将先决条件连接到主题和学生id。非常感谢。

首先,您需要使用以下代码(MySQL 8+)递归查找指定主题的所有先决条件(父项):

()

然后,通过检查该学生是否拥有从上一次查询中获得的所有科目,您可以决定是否允许用户将科目分配给该学生

更新: 如果以下查询不存在,则可以将主题添加到学生。您可以通过
(如果存在)
或通过以下方式执行:


您的数据结构很好。您只需要根据手头的具体任务进行正确的连接。您的数据结构看起来还不错。您需要做的唯一一件事是,在将记录添加到student_subject表之前,您需要检查必备主题是否存在条目(如果适用)@rohitshetty如果用户b插入该行,而用户a正在检查我在我的帖子中更新我的数据库,会发生什么情况。如果用户试图注册subjectid=5编程2,而subjectid=1编程1仍然未注册。但是如果主体ID=1上的已注册者=1,则用户可以注册主体编程2。我需要使用if语句来获得我想要的陈述吗?非常感谢。我不知道我的问题是否令人困惑。
-----------------------
|studentID | FullName |
-----------------------
|1234      | John    |
|1235      | Michael |
|1236      | Bryce   |
-----------------------------------------
|subject_id| subject_name  |  pre_id    |
-----------------------------------------
|    1     | Programming 1 |    NULL     |
|    2     | Networking    |    NULL     |
|    3     | Algorithm     |    NULL     |
|    4     | Physical Educ |    NULL     |
|    5     | Programming 2 |     1       |
------------------------------------------------
| student_id | subject_id | Grade   | Enrolled |
------------------------------------------------
|   1235     |      1     |    0    |     0    |
|   1235     |      2     |    0    |     0    |
|   1235     |      3     |    0    |     0    |
|   1234     |      1     |    0    |     0    |
set @newSubjectToAdd = 5;

with recursive cte (subject_id,subject_name,pre_id) as
(
  Select subject_id,subject_name,pre_id
  from subject_bsit
  where subject_id = @newSubjectToAdd 
  union all

  Select sb.subject_id,sb.subject_name,sb.pre_id
  from subject_bsit sb
  inner join cte 
  on  sb.subject_id = cte.pre_id
)

Select pre_id from cte
where pre_id is not null
order by subject_id
Select pre_id from cte
where pre_id is not null
and pre_id not in 
(select subject_id from student_subject
where student_id = 1235
and enrolled = 1)