兩表互為外來鍵的解決方案

quietin發表於2015-11-19

這是面試中遇到的一個題

如果兩個表的主鍵互為對方的外來鍵如何處理?

方案一
適合直接在資料庫中操作的時候用

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()

相關文章