我正在研究上述大学数据库,并想知道如何强制执行先决条件表。我有它,所以每个crs_code都有一个与crs_requires相关的先决条件。但是,我需要找到一种方法,以便当学生参加课程时,它将检查他们是否具有必要的先决条件才能注册。如果学生确实有先决条件,它应该只创建新行并让他们注册,如果学生没有必要的先决条件,表格应该显示他们试图进入哪个课程以及他们需要哪个课程。
以下是先决条件表中某些数据的示例:
+----------+--------------+
| crs_code | crs_requires |
+----------+--------------+
| 10 | 1 |
| 11 | 10 |
| 14 | 11 |
| 15 | 11 |
| 20 | 11 |
| 16 | 13 |
| 17 | 13 |
| 18 | 13 |
| 21 | 13 |
编辑:学生将所有课程都放在报名表中(既可以参加课程也可以参加当前课程)如果他们通过了课程,他们将获得1分的学分,如果他们目前在课堂上或者没有通过课程,则可以获得0分。 。如何在他们注册需要特定先决条件的课程之前检查他们是否具备所需的必修课程的学分?
感谢您的帮助!
答案 0 :(得分:1)
试试这个
SELECT crs.crs_code, req.crs_requires
FROM COURSE crs
LEFT JOIN PREREQUISITES req ON req.crs_code = crs.crs_code
WHERE crs.crs_code = @course AND (req.crs_code IS NULL OR
req.crs_requires IN (SELECT crs2.crs_code FROM ENROLLMENT en2
JOIN SECTION se2 ON se2.sec_id = en2.sec_id
JOIN COURSE crs2 ON crs2.crs_code = se2.crs_code
WHERE en2.stu_id = @id))
我假设您将提供学生ID和学生想要注册查询的课程。
编辑:我看到它的方式,学生登录并选择要注册的课程,在这种情况下,我们知道他想要注册的课程和他的ID。如果他有资格,我们让他注册。
EDIT2 :要检查先决条件中的信用,您只需将AND en2.Credits = 1
添加到子查询中的WHERE子句中(实际检查学生是否已注册先决条件)。
似乎在MySql中IF..ELSE只能在函数或存储过程中使用。如果你决定采用这种方式,你可以做一些像
这样的事情IF(EXISTS (a Prequisite AND the student has a particular grade/credit))
//This student has the prereqisite.
ELSE
//This student does not have the required prerequisite
END
答案 1 :(得分:0)
是的,如果你能告诉我这是什么问题会很棒
您需要注意您的先决条件和课程表。
你拥有它的方式(因为ERK指示的FK不可为空)。这意味着每次创建课程时,必须创建一个实际上无效的必备课程。如果是这种情况,您应该能够创建一个没有先决条件的课程。
同样的问题也出现在其他表中。这也可能会影响删除行为,如删除级联。