【问题标题】:How to unassign courses of Students in Student-Course relationship table without deleting data from database?如何在不从数据库中删除数据的情况下取消分配学生-课程关系表中的学生课程?
【发布时间】:2016-02-02 12:56:11
【问题描述】:

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

一键取消分配学生学习的所有课程

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

学生(StudentId、StudentName、RegNo)

课程(CourseId、CourseCode、CourseName)

Enroll(StudentId, CourseId, EnrollDate)

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

这是一个好方法吗?

如何清除下学期学生的Enroll表而不实际从数据库中删除数据?

先谢谢了。

【问题讨论】:

  • 这样做的方法实际上是从登记表中删除。你为什么犹豫不决?
  • 因为规范。它说,您不能从数据库中删除数据以取消分配课程。我也不确定如果我扩大规模,那么它是否会产生性能问题。

标签: sql-server database-design


【解决方案1】:

您添加一列(也可以是删除历史的日期时间)

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

【讨论】:

  • 感谢您的快速回复。我会尝试这两种技术。
【解决方案2】:

当您的数据库中存在学生和课程之间的多对多关系时,它需要一个中间表,例如您所拥有的表:Enroll。为了表明特定学生正在学习特定课程,您将在Enroll 表中插入一条记录。删除学生之间的映射的方法是删除记录。

我不知道您为什么不喜欢从 Enroll 表中删除记录,但它应该是这样工作的。

【讨论】:

  • 感谢您的回复。我的规范说不要从数据库中删除数据。如果没有添加该行,那么我肯定会从 Enroll 表中删除记录,
猜你喜欢
  • 2019-11-30
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2021-11-28
  • 1970-01-01
相关资源
最近更新 更多