【问题标题】:MySQL Cascade delete if one-to-one relationshipMySQL级联删除如果一对一的关系
【发布时间】:2017-05-05 01:06:26
【问题描述】:

想象一个存储书名和作者的数据库。当我删除书名时,我也想删除作者 - 但前提是他们没有与之关联的其他书名。

有没有办法做到这一点?

或者,也许,您可以推荐我如何以不同的方式构建表格来解决这个问题。这是我负责数据建模的应用程序的简化示例;也许通过提出上述问题,我的数据结构显然很糟糕。

【问题讨论】:

  • 这里的父表是哪一个?您必须在代码中编写此逻辑。数据库可能不提供级联删除的自定义逻辑?
  • 这不是一对一的关系,而是一对多的关系,因为一个作者可以有很多本书。你不能用级联来做到这一点,你可以用触发器来做到这一点。
  • 虽然你是绝对正确的 Barmar,但我使用一对一是为了给场景贴上标签(将一对一描述为“如果我要删除的书是最后一本书与作者的关系”)理论上可以触发级联钩子。 Uueerdo 向我介绍了 AFTER DELETE 触发器的概念,这听起来是我的场景的最佳解决方案。

标签: mysql data-modeling delete-row one-to-one


【解决方案1】:

这是“先有鸡还是先有蛋”的数据建模场景之一,例如部门需要员工,而部门经理是该部门的员工。通常,您会将作者视为“父母”,因为它可以拥有许多书籍并且必须编写书籍;但如果没有他们创作的书,他们就不是作者。

所以这并不是一个糟糕的结构,而是你所代表的关系的复杂化。 CASCADE 不适合您;但是您可以在“书籍”表上使用 AFTER DELETE 触发器来检查已删除书籍的作者是否还有任何书籍,如果没有则删除它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 2016-01-17
    相关资源
    最近更新 更多