2013-04-08 50 views
0

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

问题是:

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

简单的例子:假设你有表:

Students, StudentClass, Marks, Classes 

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

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

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

编辑:

任何其他解决方案?

+0

当联系人被删除时,我们有时会遇到类似的问题,但我们必须保留联系人详细信息以用于报告目的。我们采取的方法是完全一样的。我们添加了一个删除到联系人表的列。到目前为止没有问题:)并且像你说的那样,知道是否有人得到了更好的解决方案会很有趣。 – justMe 2013-04-08 10:01:46

回答

0

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

有浮现在脑海中可能有两个缺点:

  1. 开发商总是在某些时候忘记删除标志进行过滤。
  2. 如果您从不删除并且在某个时候可能会影响查询时间,那么该表可能会变大。

缓解这两个问题的一个可能的解决方案是不时运行一个作业,将删除的数据归档/移动到别处。您可以随时查询或稍后恢复,但不会影响其他“实时”记录。