我正在设计课程结果管理系统数据库。其中一个故事是:
点击按钮
取消分配学生所有课程我根据故事设计了三张桌子。架构是,
学生(StudentId,StudentName,RegNo)
课程(CourseId,CourseCode,CourseName)
注册(StudentId,CourseId,EnrollDate)
起初我以为我可以创建一个名为 Enroll_BCK 的Enroll表的副本,并同时在 Enroll 和 Enroll_BCK 中插入数据从应用程序中单击一下按钮。但这需要删除注册表和其他麻烦。
这是一个好方法吗?
如何在不实际删除数据库数据的情况下清除下一学期学生的注册表?
谢谢你的到来。
答案 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