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

时间:2019-03-22 21:01:06

标签: mysql sql database vb.net phpmyadmin

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

“学生”

-----------------------
|studentID | FullName |
-----------------------
|1234      | John    |
|1235      | Michael |
|1236      | Bryce   |

“ subject_bsit”

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

例如,如果 studentID 1235 仍未采用正在编程1的 subject_id 1 ,则用户无法添加正在编程的 subject_id 5 2,因为它是编程1的前提。

我不知道我的桌子是否正确。如果是正确的,我该如何设计该数据库,我不知道该如何连接学科和学生证的先决条件。

1 个答案:

答案 0 :(得分:0)

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

-O3

Demo1

然后通过检查学生是否具有从上一个查询中获得的所有主题,您可以决定是否允许用户将主题分配给该学生。

更新:

如果以下查询不存在,则可以将主题添加到学生。您可以通过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 tricky conditional insert来做到这一点:

if exists

Demo2