【问题标题】:MySQL foreign key, trip "Cascade Delete" without removing original recordMySQL外键,在不删除原始记录的情况下跳闸“级联删除”
【发布时间】:2012-09-18 12:26:10
【问题描述】:

我目前正在使用 MySQL 存储所有关系数据的系统中工作,但我们的审计日志保存在 MongoDB 文档数据库中以进行长期存档。在“项目”(系统中最大的父实体)的情况下,我希望允许用户删除项目并强制级联删除有效地清理我的所有相关数据的数据库。 (这就是棘手的地方)

理想情况下,一旦删除,我的“项目”表中的单数记录将在删除过程中持续存在,被标记为“存档”项目,然后我的代码就会知道,如果用户尝试访问我们将加载的存档项目一个单独的页面,显示删除之前在项目生命周期内收集的所有 MongoDB 审计日志。

我想我可以通过选择项目记录、运行删除、重新插入数据并重新使用分配给项目的原始 AutoInc id 来在事务中完成这项工作。感觉有点脏,所以我想知道是否有人找到更好的方法。

理想情况下,如果有一种方法可以在不删除原始记录的情况下触发表的外键上的级联事件,我将拥有我需要的东西,但我还没有看到任何这样的野兽。

感谢您的帮助!

【问题讨论】:

    标签: asp.net mysql foreign-keys relational-database cascade


    【解决方案1】:

    我过去使用的只是添加一个存档列并将其设为布尔值。因此,当用户“删除”某些内容时,它只会切换标志。显然,只有当您使用 php 之类的东西来处理请求并且不允许用户直接修改数据库时,才能做到这一点。需要更多关于您计划如何执行此操作的信息。

    我会把这个放在 cmets 中,但我认为我没有足够高的评分来评论其他问题。

    【讨论】:

    • 感谢@Falantar014,在这种情况下,我们不直接在数据库上工作,这是一个 ASP.NET 站点,所以我们有很多程序控制,这里解决方案的最大问题是它会永远不要从数据库中清除(可能数以万计)相关记录。我的目标是实际使用 FK 清除旧数据,但仍保留审计线索以供查看。
    • 我明白了。我对 MongoDB 没有任何经验,所以我无法告诉你是否有更简单的方法。有必要“清理”这些记录吗?它们将以一种或另一种方式存在于您的数据库中。除非您遇到或预见到性能问题,否则我不明白为什么会这样。但我不知道你项目的细节,所以我不能做出这样的假设。
    猜你喜欢
    • 2017-06-13
    • 1970-01-01
    • 2011-02-24
    • 2018-04-13
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多