首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动化系统,数据库

自动化系统,数据库
EN

Stack Overflow用户
提问于 2013-04-08 09:46:09
回答 1查看 71关注 0票数 0

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

问题是:

如果有引用的记录可以从软件接口中删除,如何设计数据库结构?

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

代码语言:javascript
复制
Students, StudentClass, Marks, Classes

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

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

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

编辑:

还有其他解决办法吗?

EN

回答 1

Stack Overflow用户

发布于 2013-04-08 18:08:29

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

有两个潜在的缺点浮现在脑海中:

  1. 开发人员总是在某个时候忘记使用已删除的标志进行过滤。
  2. 如果不删除表,则表会变大,而且在某些时候,这会影响查询时间。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15876019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档