两表互为外键的解决方案

这是面试中遇到的一个题

如果两个表的主键互为对方的外键如何处理?

方案一
适合直接在数据库中操作的时候用

set @@foreign_key_checks=OFF 

方案二
外键是可以为null的,所以在框架的ORM中使用时,把对应字段的外键设置为允许为null,存的时候先存其中一个model(此时外键为null), 存完另一个model再来更新其外键即可.

以Django为例

from django.db import models

class Action(models.Model):
    step = models.ForeignKey('Step', related_name='step', null=True, blank=True)

class Step(models.Model):
    action = models.ForeignKey('Action', related_name='action', null=True, blank=True)

存的时候这样

a = Action(step_id=None)
a.save()

s = Step(action_id=a.id)
s.save()

a.step_id = s.id
a.save()
    原文作者:quietin
    原文地址: https://segmentfault.com/a/1190000004016074
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞