【问题标题】:MySQL mutual dependent tablesMySQL相互依赖表
【发布时间】:2014-10-08 03:26:40
【问题描述】:

我正在创建 2 个表,一个称为 users,另一个称为 images,每个用户可以有一个头像,它引用 image 表,但是每个图像都有一个作者来识别谁上传/创建了图像,并且这个作者引用了 user 表中的一个用户,我为两者都添加了外键约束,所以这 2表变得相互依赖,这使得插入/删除操作变得一团糟......我想知道是否有人可以提出更好的设计模式,比如创建另一个表或任何东西,这样我就可以避免这种相互依赖的情况?谢谢。

【问题讨论】:

    标签: mysql foreign-key-relationship circular-dependency


    【解决方案1】:

    一旦 mysql 不提供执行延迟约束检查的方法,唯一的方法就是完全禁用约束检查

    SET FOREIGN_KEY_CHECKS = 0;
    

    完成后立即启用它

    SET FOREIGN_KEY_CHECKS = 1;
    

    但是当您处于“sparta”模式时,您需要非常小心,不要破坏数据库的完整性。

    PS:这个选项是特定于会话的,所以其他连接仍然会像往常一样遵守约束。

    PPS:一旦您要将数据库置于损坏状态 - 我强烈建议在单个事务中进行所有更改,以便其他会话无法观察到不一致的状态。

    【讨论】:

    • 我正试图找出一种设计来避免相互依赖,这感觉像是一些黑客行为......此外,我不能也不会在每次用户更新时暂时禁用外键检查头像并在头像更新后重新启用...
    • @dulan:我认为拥有 2 路依赖没有什么不好的。它不违反我知道的任何标准形式或其他“最佳实践”。
    • 是的,你是对的,我只是认为一种方式的依赖对设计来说更简单,代码更少,并希望保持这种方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 2011-01-25
    • 2016-07-22
    • 2014-01-15
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多