自动化系统,数据库

时间:2013-04-08 09:46:10

标签: database automation system

去年,我在大项目工作,这是教育管理系统!我的团队在开发过程中解决了很多问题。但我们有一个问题,现在我又得到了它。

问题是:

  

如何设计数据库结构,如果有一些记录有引用   可以从软件界面中删除吗?

简单示例:假设您有表:

Students, StudentClass, Marks, Classes

。因此,如果我尝试从'Classes'表中删除记录,那将是不可能的,因为'StudentClass'表引用了'Classes'表。当然,可以从依赖表中删除记录(StudentClass, etc.),然后删除'Classes'记录,但我需要保留数据。

我找到了解决方案,在其他引用的所有表中,我创建了列'IsDeleted'。 这意味着如果我想从'Classes'表中删除记录,我只需将'IsDeleted'列更新为1。要向用户显示,我使用"SELECT * .... FROM ... WHERE Classes.IsDeleted = 0".

这是我的解决方案!你能告诉我,你如何解决这些问题,与我分享你的方法,请!任何意见对我来说都很有趣!在此先感谢您的回复!!!!

修改

其他任何解决方案?

1 个答案:

答案 0 :(得分:0)

相当经典的问题,我已经看过你的解决方案实施了很多次。通常它被称为“软”删除,因为您仍然拥有数据库中的数据,但它不会出现在UI中。

有两个潜在的缺点可以想到:

  1. 开发人员始终在某些时候忘记按已删除的标记进行过滤。
  2. 如果您永远不会删除,表格会变大,但在某些时候这会影响查询时间。
  3. 缓解这两个问题的一个可能的解决方案是不时运行一个工作,将已删除的数据存档/移动到其他地方。如果需要,您可以随时查询或稍后恢复它,但它不会影响其他“实时”记录。