目前,我正在使用Django和MySQL后端数据库。
让我们拥有以下数据库架构
class Parent(models.Model):
parent_id = models.BigAutoField(primary_key=True)
last_child = models.ForeignKey('Child', on_delete=models.PROTECT)
class Child(models.Model):
child_id = models.BigAutoField(primary_key=True)
parent = models.ForeignKey('Parent', on_delete=models.CASCADE)
每个家长可以有多个孩子,但每个孩子只能有一个孩子。字段last_child
指向父母出生的最后一个孩子。我试图通过这种模式表达的是
只要父母还活着,最后一个孩子就不会死(被删除)
所有儿童在父母去世后死亡
但是由于PROTECT
vs CASCADE
存在冲突,我对数据库完整性有一些顾虑。
我的问题是,如果我删除Parent
,MySQL会先尝试删除什么?是先删除Parent
然后尝试删除Child
行,还是反过来?
答案 0 :(得分:2)
删除对象时Django
的作用 - >它首先删除所有子项,然后删除该对象。
您的架构有点奇怪,您需要制作last_child
对象null-able
,因为如何在没有parent
的情况下创建children
?
如果没有child
,您就无法创建parent
,并且无法使用parent
创建last_child
。
因此,当您last_child
无效时,在parent.delete
上需要设置last_child = null
,然后拨打parent.delete()
。我想你会好的。