如何在不删除数据库中的数据的情况下取消分配学生 - 课程关系表中的学生课程?

时间:2016-02-02 12:56:12

标签: sql-server database-design

我正在设计课程结果管理系统数据库。其中一个故事是:

点击按钮

取消分配学生所有课程

我根据故事设计了三张桌子。架构是,

学生(StudentId,StudentName,RegNo)

课程(CourseId,CourseCode,CourseName)

注册(StudentId,CourseId,EnrollDate)

起初我以为我可以创建一个名为 Enroll_BCK 的Enroll表的副本,并同时在 Enroll Enroll_BCK 中插入数据从应用程序中单击一下按钮。但这需要删除注册表和其他麻烦。

这是一个好方法吗?

如何在不实际删除数据库数据的情况下清除下一学期学生的注册表?

谢谢你的到来。

2 个答案:

答案 0 :(得分:0)

如果您的数据库中存在多对多关系,就像您在学生和课程之间一样,那么它需要一个类似于您拥有的中间表:Enroll。为了表明特定学生正在学习特定课程,您需要在Enroll表中插入一条记录。删除学生之间映射的方法是删除记录。

我不确定为什么你不喜欢从Enroll表中删除记录,但这就是它应该如何工作。

答案 1 :(得分:0)

您添加了一列(也可能是删除历史记录的日期时间)

ALTER TABLE Enroll ADD isDeleted bit DEFAULT 0 NOT NULL

您需要在程序,函数和查询中加入逻辑来解释这一点。

然后当"删除"您将此列更新为1。

UPDATE Enroll SET isDeleted = 1 -- You may want to add a WHERE clause

否则,您可以将表的内容复制到具有不同名称的克隆表,如下所示:

SELECT * INTO Enroll2016 FROM Enroll
DELETE Enroll