【问题标题】:Automation system, Database自动化系统、数据库
【发布时间】:2013-09-10 23:07:42
【问题描述】:

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

问题是:

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

简单示例:假设您有表格:

Students, StudentClass, Marks, Classes

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

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

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

编辑:

还有其他解决方案吗?

【问题讨论】:

  • 当联系人可以被删除时,我们有时会遇到类似的问题,但我们必须保留联系人详细信息以用于报告目的。我们采取的方法完全相同。我们在 Contacts 表中添加了一个已删除的列。到目前为止没问题 :) 就像你说的那样,知道有人是否有更好的解决方案会很有趣。

标签: database automation system


【解决方案1】:

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

我想到了两个潜在的缺点:

  1. 开发人员总是有时会忘记按已删除标志进行过滤。
  2. 如果您从不删除,表可能会变大,并且有时会影响查询时间。

缓解这两个问题的一个潜在解决方案是不时运行一项作业,将已删除的数据存档/移动到其他地方。如果需要,您可以随时查询或稍后恢复它,但不会影响其他“实时”记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-16
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2015-08-25
    • 2012-07-13
    相关资源
    最近更新 更多